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(); } } }