using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Cloud.Models; namespace Cloud.Controllers; [Authorize] [ApiController] [Route("api/[controller]")] public class DecksController : ControllerBase { private readonly AppDbContext _context; public DecksController(AppDbContext context) { _context = context; } [HttpGet] public async Task>> GetDecks() { try { return Ok(await _context.UserDecks.OrderByDescending(d => d.UpdatedAt).ToListAsync()); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not retrieve decks: {ex.Message}"); return Ok(new List()); } } [HttpGet("{id:guid}")] public async Task> GetDeck(Guid id) { try { var deck = await _context.UserDecks.FindAsync(id); if (deck == null) return NotFound(); return Ok(deck); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not retrieve deck: {ex.Message}"); return StatusCode(500); } } [HttpPost] public async Task> CreateDeck(UserDeck deck) { try { deck.Id = Guid.NewGuid(); deck.UpdatedAt = DateTime.UtcNow; _context.UserDecks.Add(deck); await _context.SaveChangesAsync(); return Ok(deck); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not create deck: {ex.Message}"); return StatusCode(500, "Failed to save deck."); } } [HttpPut("{id:guid}")] public async Task> UpdateDeck(Guid id, UserDeck deck) { try { var existing = await _context.UserDecks.FindAsync(id); if (existing == null) return NotFound(); existing.Name = deck.Name; existing.Cards = deck.Cards; existing.Divers = deck.Divers; existing.Notes = deck.Notes; existing.Season = deck.Season; existing.UpdatedAt = DateTime.UtcNow; await _context.SaveChangesAsync(); return Ok(existing); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not update deck: {ex.Message}"); return StatusCode(500, "Failed to update deck."); } } [HttpDelete("{id:guid}")] public async Task DeleteDeck(Guid id) { try { var deck = await _context.UserDecks.FindAsync(id); if (deck == null) return NotFound(); _context.UserDecks.Remove(deck); await _context.SaveChangesAsync(); return NoContent(); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not delete deck: {ex.Message}"); return StatusCode(500); } } }