using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AutoMapper; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using ThuisApi.Data; using ThuisApi.Models; namespace ThuisApi.Controllers { [Route("api/[controller]")] [ApiController] public class FreezerController : ControllerBase { private readonly ThuisDbContext _context; private readonly IMapper _mapper; public FreezerController(ThuisDbContext context, IMapper mapper) { _context = context; _mapper = mapper; } // GET: api/Freezer [HttpGet] public async Task>> GetFreezer() { // Iterate over the freezers to add amount in freezer. var freezers = await _context.Freezer.ToListAsync(); var freezerResponse = new List(); foreach (var freezer in freezers) { freezerResponse.Add(new FreezerDto { FreezerId = freezer.FreezerId, Name = freezer.Name, AmountInFreezer = await _context.FreezerItem.CountAsync(a => a.Freezer.FreezerId == freezer.FreezerId) }); } return Ok(freezerResponse.ToArray()); } // GET: api/Freezer/5 [HttpGet("{id}")] public async Task> GetFreezer(int id) { var freezer = await _context.Freezer.FindAsync(id); if (freezer == null) { return NotFound(); } return Ok(_mapper.Map(freezer)); } // PUT: api/Freezer/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPut("{id}")] public async Task PutFreezer(int id, FreezerDto freezer) { if (id != freezer.FreezerId) { return BadRequest(); } _context.Entry(_mapper.Map(freezer)).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!FreezerExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/Freezer // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPost] public async Task> PostFreezer(FreezerDto freezerDto) { var mappedFreezer = _mapper.Map(freezerDto); var newFreezer = new Freezer { Name = mappedFreezer.Name }; _context.Freezer.Add(newFreezer); await _context.SaveChangesAsync(); return CreatedAtAction("GetFreezer", new { id = newFreezer.FreezerId }, _mapper.Map(newFreezer)); } // DELETE: api/Freezer/5 [HttpDelete("{id}")] public async Task DeleteFreezer(int id) { var freezer = await _context.Freezer.FindAsync(id); if (freezer == null) { return NotFound(); } _context.Freezer.Remove(freezer); await _context.SaveChangesAsync(); return NoContent(); } private bool FreezerExists(int id) { return _context.Freezer.Any(e => e.FreezerId == id); } } }