using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace ScrumTaskboard.Controllers { /// /// This is a controller of Categories class includes all API's related to the Categories. /// [Route("[controller]")] [ApiController] public class CategoriesController : ControllerBase { private readonly TaskContext _context; /// /// Initializes a new instance of the class. /// /// public CategoriesController(TaskContext context) { _context = context; } // GET: api/category /// /// Retrieve all Categories in DB. /// Result can be filtered using the Params. /// /// string value /// ID of created Project /// string value /// JSON list of all matching Categories #nullable enable [HttpGet] public async Task>> GetCategory([FromQuery]string? title, [FromQuery]int? projectid, [FromQuery] string? color) { var filtered = _context.Categories.AsQueryable(); if (title != null) { filtered = filtered.Where(c => c.Title.Contains(title)); } if (projectid != null) { filtered = filtered.Where(c => c.ProjectId == projectid); } if (color != null) { filtered = filtered.Where(c => c.Color == color); } return await filtered.ToListAsync(); } #nullable disable // GET: api/category/1 /// /// Retrieve the Category by it's ID. /// /// ID of searched Category /// JSON object [HttpGet("{id}")] public async Task> GetCategory(int id) { var category = await _context.Categories.FindAsync(id); if (category == null) { return NotFound(); } return category; } // PUT: api/category/1 /// /// Update the Category identified by it's ID. /// /// to edit Category's ID /// modified Category /// the proper status code [HttpPut("{id}")] public async Task PutCategory(int id, ScrumCategory category) { // The category's ID must not be changed if (id != category.Id) { return BadRequest(); } // Save the changed category in the context _context.Entry(category).State = EntityState.Modified; try { // Apply the changes to the database await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { // If the category does not exist, return status code 404 if (!CategoryExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/category /// /// Create a new Category. /// /// new Category /// the proper status code [HttpPost] public async Task> PostCategory(ScrumCategory category) { _context.Categories.Add(category); await _context.SaveChangesAsync(); // The new user story has been created and can be called up using the GetUserstory method return CreatedAtAction("GetCategory", new { id = category.Id }, category); } // DELETE: api/category/1 /// /// Delete a Category identified by it's ID. /// /// to delete Category's ID /// the proper status code [HttpDelete("{id}")] public async Task> DeleteCategory(int id) { var category = await _context.Categories.FindAsync(id); if (category == null) { return NotFound(); } // Remove the category from the context _context.Categories.Remove(category); // Save the changes in the database await _context.SaveChangesAsync(); return category; } /// /// Checks whether a category with the specified ID already exists. /// private bool CategoryExists(int id) { return _context.Categories.Any(e => e.Id == id); } } }