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 }));
            }
        }
Пример #3
0
        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()));
        }
Пример #6
0
        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));
        }
Пример #8
0
        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()
            };
        }
Пример #9
0
    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));
    }