public override async Task <ActionResult <GetListResponse> > HandleAsync(GetListRequest request, CancellationToken cancellationToken = default) { var response = new GetListResponse(request.CorrelationId()); var filterSpec = new ProjectFilterSpecification(request.ProjectName, request.Deadline); var items = await projectRepo.ListAsync(filterSpec); response.Projects.AddRange(items.Select(mapper.Map <ProjectDto>)); return(Ok(response)); }
public override async Task <ActionResult <GetProjectPagedListResponse> > HandleAsync([FromQuery] GetProjectPagedListRequest request, CancellationToken cancellationToken) { var response = new GetProjectPagedListResponse(request.CorrelationId()); var filterSpec = new ProjectFilterSpecification(request.ProjectName, request.Deadline); int totalItems = await projectRepo.CountAsync(filterSpec); var pagedSpec = new ProjectFilterPaginationSpecification( skip: request.PageIndex * request.PageSize, take: request.PageSize, projectName: request.ProjectName, deadline: request.Deadline); var items = await projectRepo.ListAsync(pagedSpec); response.Projects.AddRange(items.Select(mapper.Map <ProjectDto>)); response.PageCount = int.Parse(Math.Ceiling((decimal)totalItems / request.PageSize).ToString()); return(Ok(response)); }
public async Task <Project> CloneProject(int sourceProjectId, string newProjectName, string newDisplayName, string newClient, int ownerUserId, bool includeMembers = false, bool includeJobDefinitions = false, CancellationToken cancellationToken = default(CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); newProjectName = GetNormalizedProjectName(newProjectName); // set default display name newDisplayName = !string.IsNullOrEmpty(newDisplayName) ? newDisplayName : newProjectName; var projectByNameSpec = new ProjectFilterSpecification(newProjectName); var duplicateProjects = await _projectRepository.GetBySpec(projectByNameSpec, cancellationToken); if (duplicateProjects.Any()) { throw new DuplicateProjectException(newProjectName); } var projectByIdSpec = new ProjectFilterSpecification(sourceProjectId); projectByIdSpec.IncludeStrings.Add("Models.Properties"); projectByIdSpec.IncludeStrings.Add("Jobs.Tasks"); projectByIdSpec.IncludeStrings.Add("Members"); var sourceProject = await _projectRepository.GetSingleBySpec(projectByIdSpec, cancellationToken); if (sourceProject == null) { throw new ProjectNotFoundException(sourceProjectId); } var newProject = new Project { Name = newProjectName, DisplayName = newDisplayName, Client = newClient ?? sourceProject.Client, Models = sourceProject.Models?.Select(m => new ProjectDataModel { Name = m.Name, Description = m.Description, Label = m.Label, Properties = m.Properties?.Select(p => new ProjectDataModelProperty { Name = p.Name, Label = p.Label, DataType = p.DataType, ControlType = p.ControlType, RelatedProjectDataModelId = p.RelatedProjectDataModelId, RelationalType = p.RelationalType, IsRequired = p.IsRequired, Created = DateTime.UtcNow }).ToList(), Created = DateTime.UtcNow }).ToList() }; if (includeJobDefinitions) { newProject.Jobs = sourceProject?.Jobs.Select(j => new JobDefinition { Name = j.Name, Tasks = j.Tasks?.Select(sourceTask => new JobTaskDefinition { Name = sourceTask.Name, Type = sourceTask.Type, Provider = sourceTask.Provider, Sequence = sourceTask.Sequence, ConfigString = sourceTask.ConfigString, Created = DateTime.UtcNow }).ToList(), Created = DateTime.UtcNow }).ToList(); } if (includeMembers) { newProject.Members = sourceProject?.Members?.Select(m => new ProjectMember { UserId = m.UserId, ProjectMemberRoleId = m.ProjectMemberRoleId, Created = DateTime.UtcNow }).ToList(); } else { newProject.Members = new List <ProjectMember> { new ProjectMember { UserId = ownerUserId, ProjectMemberRoleId = MemberRole.OwnerId, Created = DateTime.UtcNow } }; } var newProjectId = await _projectRepository.Create(newProject, cancellationToken); return(newProject); }