using CleanArchitecture.Application.Common.Exceptions; using CleanArchitecture.Application.Common.Interfaces; using CleanArchitecture.Domain.Entities; using MediatR; using System.Threading; using System.Threading.Tasks; using CleanArchitecture.WebUI.Controllers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace CleanArchitecture.Application.TodoItems.Commands.DeleteTodoItem { [Authorize] public class DeleteTodoItemController : ApiControllerBase { [HttpDelete("/todoItems/{id}")] public async Task<ActionResult> Delete(int id) { await Mediator.Send(new DeleteTodoItemCommand { Id = id }); return NoContent(); } } public class DeleteTodoItemCommand : IRequest { public int Id { get; set; } } public class DeleteTodoItemCommandHandler : IRequestHandler<DeleteTodoItemCommand> { private readonly IApplicationDbContext _context; public DeleteTodoItemCommandHandler(IApplicationDbContext context) { _context = context; } public async Task<Unit> Handle(DeleteTodoItemCommand request, CancellationToken cancellationToken) { var entity = await _context.TodoItems.FindAsync(request.Id); if (entity == null) { throw new NotFoundException(nameof(TodoItem), request.Id); } _context.TodoItems.Remove(entity); await _context.SaveChangesAsync(cancellationToken); return Unit.Value; } } }