public async Task <Result <List <ToDoItem> > > GetAllIncompleteItemsAsync(int projectId, string searchString) { if (string.IsNullOrEmpty(searchString)) { var errors = new List <ValidationError> { new() { Identifier = nameof(searchString), ErrorMessage = $"{nameof(searchString)} is required." } }; return(Result <List <ToDoItem> > .Invalid(errors)); } var projectSpec = new ProjectByIdWithItemsSpec(projectId); var project = await _repository.GetBySpecAsync(projectSpec); // TODO: Optionally use Ardalis.GuardClauses Guard.Against.NotFound and catch if (project == null) { return(Result <List <ToDoItem> > .NotFound()); } var incompleteSpec = new IncompleteItemsSearchSpec(searchString); try { var items = incompleteSpec.Evaluate(project.Items).ToList(); return(new Result <List <ToDoItem> >(items)); } catch (Exception ex) { // TODO: Log details here return(Result <List <ToDoItem> > .Error(new[] { ex.Message })); } }
public async Task <Result <List <ToDoItem> > > GetAllIncompleteItemsAsync(int projectId, string searchString) { if (string.IsNullOrEmpty(searchString)) { var errors = new List <ValidationError>(); errors.Add(new ValidationError() { Identifier = nameof(searchString), ErrorMessage = $"{nameof(searchString)} is required." }); return(Result <List <ToDoItem> > .Invalid(errors)); } var projectSpec = new ProjectByIdWithItemsSpec(projectId); var project = await _repository.GetBySpecAsync(projectSpec); var incompleteSpec = new IncompleteItemsSpec(); try { //var items = await _repository.ListAsync(incompleteSpec); var items = incompleteSpec.Evaluate(project.Items).ToList(); return(new Result <List <ToDoItem> >(items)); } catch (Exception ex) { // TODO: Log details here return(Result <List <ToDoItem> > .Error(new[] { ex.Message })); } }
public async Task OnGetAsync() { var projectSpec = new ProjectByIdWithItemsSpec(1); // TODO: get from route var project = await _repository.GetBySpecAsync(projectSpec); var spec = new IncompleteItemsSpec(); ToDoItems = spec.Evaluate(project.Items).ToList(); }
public async Task OnGetAsync() { var projectSpec = new ProjectByIdWithItemsSpec(ProjectId); var project = await _repository.GetBySpecAsync(projectSpec); if (project == null) { return; } var spec = new IncompleteItemsSpec(); ToDoItems = spec.Evaluate(project.Items).ToList(); }
public async Task <Result <ToDoItem> > GetNextIncompleteItemAsync(int projectId) { var projectSpec = new ProjectByIdWithItemsSpec(projectId); var project = await _repository.GetBySpecAsync(projectSpec); var incompleteSpec = new IncompleteItemsSpec(); var items = incompleteSpec.Evaluate(project.Items).ToList(); if (!items.Any()) { return(Result <ToDoItem> .NotFound()); } return(new Result <ToDoItem>(items.First())); }
public async Task <IActionResult> Index(int projectId = 1) { var spec = new ProjectByIdWithItemsSpec(projectId); var project = await _projectRepository.GetBySpecAsync(spec); var dto = new ProjectViewModel { Id = project.Id, Name = project.Name, Items = project.Items .Select(item => ToDoItemViewModel.FromToDoItem(item)) .ToList() }; return(View(dto)); }
public async Task <IActionResult> GetById(int id) { var projectSpec = new ProjectByIdWithItemsSpec(id); var project = await _repository.GetBySpecAsync(projectSpec); var result = new ProjectDTO { Id = project.Id, Name = project.Name, Items = new List <ToDoItemDTO> ( project.Items.Select(i => ToDoItemDTO.FromToDoItem(i)).ToList() ) }; return(Ok(result)); }
public async Task OnGetAsync() { var projectSpec = new ProjectByIdWithItemsSpec(ProjectId); var project = await _repository.GetBySpecAsync(projectSpec); if (project == null) { Message = "No project found."; return; } Project = new ProjectDTO { Id = project.Id, Name = project.Name, Items = project.Items .Select(item => ToDoItemDTO.FromToDoItem(item)) .ToList() }; }
public override async Task <ActionResult <GetProjectByIdResponse> > HandleAsync([FromRoute] GetProjectByIdRequest request, CancellationToken cancellationToken) { var spec = new ProjectByIdWithItemsSpec(request.ProjectId); var entity = await _repository.GetBySpecAsync(spec); // TODO: pass cancellation token if (entity == null) { return(NotFound()); } var response = new GetProjectByIdResponse ( id: entity.Id, name: entity.Name, items: entity.Items.Select(item => new ToDoItemRecord(item.Id, item.Title, item.Description, item.IsDone)).ToList() ); return(Ok(response)); }
public async Task <IActionResult> Complete(int projectId, int itemId) { var projectSpec = new ProjectByIdWithItemsSpec(projectId); var project = await _repository.GetBySpecAsync(projectSpec); if (project == null) { return(NotFound("No such project")); } var toDoItem = project.Items.FirstOrDefault(item => item.Id == itemId); if (toDoItem == null) { return(NotFound("No such item.")); } toDoItem.MarkComplete(); await _repository.UpdateAsync(project); return(Ok()); }
public async Task <IActionResult> GetById(int id) { var projectSpec = new ProjectByIdWithItemsSpec(id); var project = await _repository.GetBySpecAsync(projectSpec); if (project == null) { return(NotFound()); } var result = new ProjectDTO ( id: project.Id, name: project.Name, items: new List <ToDoItemDTO> ( project.Items.Select(i => ToDoItemDTO.FromToDoItem(i)).ToList() ) ); return(Ok(result)); }