using CleanArchitecture.Application.Common.Exceptions; using CleanArchitecture.Application.Common.Interfaces; using CleanArchitecture.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Threading; using System.Threading.Tasks; using CleanArchitecture.Application.TodoLists.Commands.CreateTodoList; using CleanArchitecture.Application.TodoLists.Commands.UpdateTodoList; using CleanArchitecture.Application.TodoLists.Queries.ExportTodos; using CleanArchitecture.Application.TodoLists.Queries.GetTodos; using CleanArchitecture.WebUI.Controllers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace CleanArchitecture.Application.TodoLists.Commands.DeleteTodoList { [Authorize] public class DeleteTodoListController : ApiControllerBase { [HttpDelete("{id}")] public async Task<ActionResult> Delete(int id) { await Mediator.Send(new DeleteTodoListCommand { Id = id }); return NoContent(); } } public class DeleteTodoListCommand : IRequest { public int Id { get; set; } } public class DeleteTodoListCommandHandler : IRequestHandler<DeleteTodoListCommand> { private readonly IApplicationDbContext _context; public DeleteTodoListCommandHandler(IApplicationDbContext context) { _context = context; } public async Task<Unit> Handle(DeleteTodoListCommand request, CancellationToken cancellationToken) { var entity = await _context.TodoLists .Where(l => l.Id == request.Id) .SingleOrDefaultAsync(cancellationToken); if (entity == null) { throw new NotFoundException(nameof(TodoList), request.Id); } _context.TodoLists.Remove(entity); await _context.SaveChangesAsync(cancellationToken); return Unit.Value; } } }