$mermaidjs
Clean Architecture Demo
Loading...
Searching...
No Matches
CompleteTaskCommand.cs
Go to the documentation of this file.
1using MediatR;
4
6
38public sealed class CompleteTaskCommand : IRequest<Result>
39{
43 public Guid TaskId { get; }
44
45 public CompleteTaskCommand(Guid taskId)
46 {
47 TaskId = taskId;
48 }
49}
50
85public sealed class CompleteTaskCommandHandler : IRequestHandler<CompleteTaskCommand, Result>
86{
87 private readonly ITaskRepository _taskRepository;
88 private readonly IUnitOfWork _unitOfWork;
89 private readonly IDomainEventDispatcher _eventDispatcher;
90
92 ITaskRepository taskRepository,
93 IUnitOfWork unitOfWork,
94 IDomainEventDispatcher eventDispatcher)
95 {
96 _taskRepository = taskRepository;
97 _unitOfWork = unitOfWork;
98 _eventDispatcher = eventDispatcher;
99 }
100
101 public async Task<Result> Handle(CompleteTaskCommand request, CancellationToken cancellationToken)
102 {
103 ArgumentNullException.ThrowIfNull(request);
104
105 var task = await _taskRepository.GetByIdAsync(request.TaskId, cancellationToken).ConfigureAwait(false);
106 if (task is null)
107 return Result.Failure(TaskErrors.NotFound(request.TaskId));
108
109 var result = task.Complete();
110 if (result.IsFailure)
111 return result;
112
113 // La tarea fue cargada con AsNoTracking; adjuntarla para que los cambios de estado se persistan.
114 _taskRepository.Update(task);
115 await _unitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
116 await _eventDispatcher.DispatchAsync(task.DomainEvents, cancellationToken).ConfigureAwait(false);
117 task.ClearDomainEvents();
118
119 return Result.Success();
120 }
121}
CompleteTaskCommandHandler es el servicio de aplicación para completar tareas.
CompleteTaskCommandHandler(ITaskRepository taskRepository, IUnitOfWork unitOfWork, IDomainEventDispatcher eventDispatcher)
async Task< Result > Handle(CompleteTaskCommand request, CancellationToken cancellationToken)
CompleteTaskCommand encapsula la solicitud de marcar una tarea como completada.
Result es un tipo de unión discriminada que implementa el patrón Result para manejo de errores.
Definition Result.cs:71
static Result Failure(string error)
TaskErrors es un repositorio central para todos los mensajes de error del dominio de tareas.
Definition TaskErrors.cs:37
IDomainEventDispatcher es la interfaz para publicación de eventos del dominio.
ITaskRepository es la interfaz del repositorio de escritura para agregado TaskItem.
IUnitOfWork es la abstracción para coordinar la persistencia de cambios de entidades.