Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }