using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaxBaik.Application.Services; namespace TaxBaik.Web.Controllers; [ApiController] [Route("api/[controller]")] public class CategoryController : ControllerBase { private readonly CategoryService _categoryService; public CategoryController(CategoryService categoryService) { _categoryService = categoryService; } [HttpGet] public async Task GetAll() { var categories = await _categoryService.GetAllAsync(); return Ok(categories); } [HttpPost] [Authorize] public async Task Create([FromBody] CreateCategoryRequest request) { if (string.IsNullOrWhiteSpace(request.Name)) return BadRequest(new { message = "Category name is required" }); var category = await _categoryService.CreateAsync(request.Name, request.Description); return CreatedAtAction(nameof(GetAll), category); } [HttpPut("{id}")] [Authorize] public async Task Update(int id, [FromBody] CreateCategoryRequest request) { var category = await _categoryService.UpdateAsync(id, request.Name, request.Description); if (category == null) return NotFound(new { message = "Category not found" }); return Ok(category); } [HttpDelete("{id}")] [Authorize] public async Task Delete(int id) { await _categoryService.DeleteAsync(id); return NoContent(); } } public class CreateCategoryRequest { public string Name { get; set; } = string.Empty; public string? Description { get; set; } }