diff options
Diffstat (limited to 'src/Controllers/CabinsController.cs')
| -rw-r--r-- | src/Controllers/CabinsController.cs | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/Controllers/CabinsController.cs b/src/Controllers/CabinsController.cs new file mode 100644 index 0000000..4fe87cc --- /dev/null +++ b/src/Controllers/CabinsController.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Reflection.Metadata; +using IOL.Fagprove.Data; +using IOL.Fagprove.Data.DTOs; +using IOL.Fagprove.Data.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using IOL.Fagprove.Utilities; + +namespace IOL.Fagprove.Controllers +{ + [Authorize("Administrator")] + public class CabinsController : BaseController + { + private readonly AppDbContext _context; + + public CabinsController(AppDbContext context) + { + _context = context; + } + + [HttpGet] + public ActionResult<List<CabinDto>> GetCabins() + { + var cabins = _context.Cabins.ToList(); + var res = new List<CabinDto>(); + foreach (var cabin in cabins) + { + var fieldName = StaticData.CabinFields.FirstOrDefault(s => s.Id == cabin.CategoryId)?.Name ?? "Ukjent"; + res.Add(new CabinDto + { + Capacity = cabin.Capacity, + Description = cabin.Description, + Id = cabin.Id, + Name = cabin.Name, + Price = cabin.Price, + CategoryId = cabin.CategoryId, + CategoryName = fieldName + }); + } + + return res; + } + + [HttpPost("create")] + public ActionResult CreateCabin(ReservationObject data) + { + if (data.Name.IsMissing()) return BadRequest(new {error = "Navn er påkrevd"}); + data.CreatedBy = LoggedInUser.Id; + data.CreatedUtc = DateTime.UtcNow; + _context.Cabins.Add(data); + _context.SaveChanges(); + return Ok(data.Name); + } + + [HttpPut("update")] + public ActionResult UpdateCabin(ReservationObject data) + { + if (data.Name.IsMissing()) return BadRequest("Navn er påkrevd"); + if (data.Id == Guid.Empty) return BadRequest(); + var cabinExists = _context.Cabins.Any(c => c.Id == data.Id); + if (!cabinExists) return BadRequest(new {error = "Fant ikke hytten"}); + data.ModifiedBy = LoggedInUser.Id; + data.ModifiedUtc = DateTime.UtcNow; + _context.Cabins.Update(data); + _context.Entry(data).Property(x => x.CreatedBy).IsModified = false; + _context.Entry(data).Property(x => x.CreatedUtc).IsModified = false; + _context.Entry(data).Property(x => x.Id).IsModified = false; + _context.SaveChanges(); + return Ok(); + } + + [HttpDelete("delete")] + public ActionResult DeleteCabin(CabinDto data) + { + var cabinToRemove = _context.Cabins.SingleOrDefault(c => c.Id == data.Id); + if (cabinToRemove == default) return Ok(); + _context.Cabins.Remove(cabinToRemove); + var existingFutureReservationsForThisCabin = _context.Reservations.Where(r => r.ReservationObjectId == cabinToRemove.Id + && DateTime.Compare(r.From, DateTime.Today) >= 0).ToList(); + if (existingFutureReservationsForThisCabin.Count != 0) + { + _context.Reservations.RemoveRange(existingFutureReservationsForThisCabin); + } + + _context.SaveChanges(); + return Ok(); + } + } +}
\ No newline at end of file |
