using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; using System.Transactions; using UnivateProperties_API.Containers.Property; using UnivateProperties_API.Model.Properties; using UnivateProperties_API.Repository.Properties; namespace UnivateProperties_API.Controllers.Properties { [Route("api/[controller]")] [ApiController] public class PropertyController : ControllerBase { private readonly IPropertyRepository _Repo; public PropertyController(IPropertyRepository repo) { _Repo = repo; } #region Get Methods [HttpGet] public IActionResult Get() { return new OkObjectResult(_Repo.GetDisplay()); } [HttpGet("{id}")] public IActionResult Get(int id) { return new OkObjectResult(_Repo.GetDetailed(x => x.Id == id)); } [HttpGet("latestProperties")] public IActionResult GetLatestProperties() { return new OkObjectResult(_Repo.GetLatestDisplay()); } [HttpGet("{type}/{by}")] public IActionResult SearchBy(string type, int by) { return new OkObjectResult(_Repo.GetPropertyList(type, by)); } #endregion [HttpGet("search")] public IActionResult Search([FromBody] PropertySearch search) { return new OkObjectResult(_Repo.GetDisplay(search)); } //Will need to come out. Post search not working......:( [HttpGet("search/{userName}/{keyword}/{salesType}/{propertyUsageType}/{propertyType}/{province}/{city}/{suburb}/{minPrice}/{maxPrice}")] public IActionResult Search(string userName, string keyword, string salesType, string propertyUsageType, string propertyType, string province, string city, string suburb, decimal minPrice, decimal maxPrice) { var search = new PropertySearch() { UserName = userName, Keyword = keyword, SalesType = salesType, PropertyUsageType = propertyUsageType, PropertyType = propertyType, Province = province, City = city, Suburb = suburb, MinPrice = minPrice, MaxPrice = maxPrice }; return new OkObjectResult(_Repo.GetDisplay(search)); } [HttpPost] public IActionResult Post([FromBody] Property property) { using (var scope = new TransactionScope()) { _Repo.Insert(property); scope.Complete(); return CreatedAtAction(nameof(Get), new { id = property.Id }, property); } } [HttpPut] public IActionResult Put([FromBody] Property property) { if (property != null) { using (var scope = new TransactionScope()) { _Repo.Update(property); scope.Complete(); return new OkResult(); } } return new NoContentResult(); } [HttpDelete("{id}")] public IActionResult Delete(int id) { _Repo.RemoveAtId(id); return new OkResult(); } } }