using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Nevyn.Models; namespace Nevyn.Controllers { [Route("api/[controller]")] [ApiController] public class ShoppingListsController : ControllerBase { private readonly ShoppingContext _context; public ShoppingListsController(ShoppingContext context) { _context = context; } // GET: api/ShoppingLists [HttpGet] public async Task>> GetUpdateShopping() { return await _context.UpdateShopping.Select(x => ItemToDTO(x)).ToListAsync(); } // GET: api/ShoppingLists/5 [HttpGet("{id}")] public async Task> GetShoppingList(long id) { var shoppingList = await _context.UpdateShopping.FindAsync(id); if (shoppingList == null) { return NotFound(); } return ItemToDTO(shoppingList); } // PUT: api/ShoppingLists/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPut("{id}")] public async Task PutShoppingList(long id, ShoppingListDTO shoppingListDTO) { if (id != shoppingListDTO.Id) { return BadRequest(); } //_context.Entry(shoppingList).State = EntityState.Modified; var shoppingList = await _context.UpdateShopping.FindAsync(id); if (shoppingList == null) { return NotFound(); } shoppingList.Name = shoppingListDTO.Name; shoppingList.IsComplete = shoppingListDTO.IsComplete; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) when (!ShoppingListExists(id)) { return NotFound(); } return NoContent(); } // POST: api/ShoppingLists // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPost] public async Task> PostShoppingList(ShoppingListDTO shoppingListDTO) { var shoppingList = new ShoppingList { IsComplete = shoppingListDTO.IsComplete, Name = shoppingListDTO.Name }; _context.UpdateShopping.Add(shoppingList); await _context.SaveChangesAsync(); return CreatedAtAction( nameof(GetShoppingList), new { id = shoppingList.Id }, ItemToDTO(shoppingList)); } // DELETE: api/ShoppingLists/5 [HttpDelete("{id}")] public async Task DeleteShoppingList(long id) { var shoppingList = await _context.UpdateShopping.FindAsync(id); if (shoppingList == null) { return NotFound(); } _context.UpdateShopping.Remove(shoppingList); await _context.SaveChangesAsync(); return NoContent(); } private bool ShoppingListExists(long id) { return _context.UpdateShopping.Any(e => e.Id == id); } private static ShoppingListDTO ItemToDTO(ShoppingList shoppingList) => new ShoppingListDTO { Id = shoppingList.Id, Name = shoppingList.Name, IsComplete = shoppingList.IsComplete }; } }