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)); }
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)); }
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()); }