forked from ardalis/CleanArchitecture
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMarkToDoItemCompleteHandler.cs
More file actions
30 lines (23 loc) · 1.02 KB
/
MarkToDoItemCompleteHandler.cs
File metadata and controls
30 lines (23 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using NimblePros.SampleToDo.Core.ProjectAggregate;
using NimblePros.SampleToDo.Core.ProjectAggregate.Specifications;
namespace NimblePros.SampleToDo.UseCases.Projects.Commands.MarkToDoItemComplete;
public class MarkToDoItemCompleteHandler : ICommandHandler<MarkToDoItemCompleteCommand, Result>
{
private readonly IRepository<Project> _repository;
public MarkToDoItemCompleteHandler(IRepository<Project> repository)
{
_repository = repository;
}
public async ValueTask<Result> Handle(MarkToDoItemCompleteCommand request,
CancellationToken cancellationToken)
{
var spec = new ProjectByIdWithItemsSpec(request.ProjectId);
var entity = await _repository.FirstOrDefaultAsync(spec, cancellationToken);
if (entity == null) return Result.NotFound("Project not found.");
var item = entity.Items.FirstOrDefault(i => i.Id == request.ToDoItemId);
if (item == null) return Result.NotFound("Item not found.");
item.MarkComplete();
await _repository.UpdateAsync(entity);
return Result.Success();
}
}