From 3f4c0720e1e3421431e7baa20882a4a4512a7fab Mon Sep 17 00:00:00 2001 From: ivar Date: Sun, 19 Oct 2025 23:41:23 +0200 Subject: Initial --- src/Controllers/CabinsController.cs | 93 +++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/Controllers/CabinsController.cs (limited to 'src/Controllers/CabinsController.cs') 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> GetCabins() + { + var cabins = _context.Cabins.ToList(); + var res = new List(); + 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 -- cgit v1.3