using DbFirst.Application.Catalogs; using DbFirst.Application.Catalogs.Commands; using DbFirst.Application.Catalogs.Queries; using MediatR; using Microsoft.AspNetCore.Mvc; namespace DbFirst.API.Controllers; [ApiController] [Route("api/[controller]")] public class CatalogsController : ControllerBase { private readonly IMediator _mediator; public CatalogsController(IMediator mediator) { _mediator = mediator; } [HttpGet] public async Task>> GetAll(CancellationToken cancellationToken) { var result = await _mediator.Send(new GetAllCatalogsQuery(), cancellationToken); return Ok(result); } [HttpGet("{id:int}")] public async Task> GetById(int id, CancellationToken cancellationToken) { var result = await _mediator.Send(new GetCatalogByIdQuery(id), cancellationToken); if (result == null) { return NotFound(); } return Ok(result); } [HttpPost] public async Task> Create(CatalogWriteDto dto, CancellationToken cancellationToken) { var created = await _mediator.Send(new CreateCatalogCommand(dto), cancellationToken); if (created == null) { return Conflict(); } return CreatedAtAction(nameof(GetById), new { id = created.Guid }, created); } [HttpPut("{id:int}")] public async Task> Update(int id, CatalogWriteDto dto, CancellationToken cancellationToken) { var current = await _mediator.Send(new GetCatalogByIdQuery(id), cancellationToken); if (current == null) { return NotFound(); } if (!string.Equals(current.CatTitle, dto.CatTitle, StringComparison.Ordinal)) { return BadRequest("CatTitle cannot be changed."); } var updated = await _mediator.Send(new UpdateCatalogCommand(id, dto), cancellationToken); if (updated == null) { return NotFound(); } return Ok(updated); } [HttpDelete("{id:int}")] public async Task Delete(int id, CancellationToken cancellationToken) { var deleted = await _mediator.Send(new DeleteCatalogCommand(id), cancellationToken); if (!deleted) { return NotFound(); } return NoContent(); } }