Beispiel #1
0
        public async Task <ProjectDto> Handle(GetProjectByIdQuery request, CancellationToken cancellationToken)
        {
            var spec = new ProjectsWithMembersSpecification(request.ProjectId);

            var project = await _unitOfWork.Repository <Project>().GetEntityWithSpecification(spec);

            return(project == null ? null : _mapper.Map <Project, ProjectDto>(project));
        }
Beispiel #2
0
        public async Task <Pagination <ProjectDto> > Handle(GetAllProjectsQuery request, CancellationToken cancellationToken)
        {
            var spec = new ProjectsWithMembersSpecification(request.ProjectParameters);

            var countSpec = new ProjectsWithFiltersForCountSpecification(request.ProjectParameters);

            var projects = await _unitOfWork.Repository <Project>().ListAsync(spec);

            var count = await _unitOfWork.Repository <Project>().CountAsync(countSpec);

            var data = _mapper.Map <IReadOnlyList <Project>, IReadOnlyList <ProjectDto> >(projects);

            return(new Pagination <ProjectDto>(request.ProjectParameters.PageIndex, request.ProjectParameters.PageSize, count, data));
        }
Beispiel #3
0
        public async Task <IActionResult> Handle(PartiallyUpdateProjectCommand request, CancellationToken cancellationToken)
        {
            var spec = new ProjectsWithMembersSpecification(request.ProjectId);

            var project = await _unitOfWork.Repository <Project>().GetEntityWithSpecification(spec);

            if (project == null)
            {
                return(request.Controller.NotFound(new ApiResponse(404)));
            }

            var projectToPatch = _mapper.Map <ProjectForUpdateDto>(project);

            request.PatchDocument.ApplyTo(projectToPatch, request.Controller.ModelState);

            if (!request.Controller.TryValidateModel(projectToPatch))
            {
                return(request.Controller.ValidationProblem(request.Controller.ModelState));
            }

            var updatedProject = _mapper.Map(projectToPatch, project);

            // Ugly way of adding/removing users to project using only 'id' in Json Patch document.
            if (updatedProject.Members.Count > 0)
            {
                var tmp = new List <AppUser>();
                //project.Members.ToList().ForEach(m => tmp.Add(m));
                foreach (var member in projectToPatch.Members)
                {
                    var user = await _userManager.FindByIdAsync(member.Id.ToString());

                    tmp.Add(user);
                }

                updatedProject.Members = new List <AppUser>(tmp);
            }

            try
            {
                _unitOfWork.Repository <Project>().Update(updatedProject);
                await _unitOfWork.Complete();
            }
            catch (Exception ex)
            {
                return(new ObjectResult(new ApiException(500, ex.Message)));
            }

            return(request.Controller.NoContent());
        }