Beispiel #1
0
 public static CreateProjectModel WithOwner(this CreateProjectRequest createProjectRequest, PlatformAdminUserId createdBy)
 => new CreateProjectModel
 {
     CreatedBy    = createdBy.Value,
     OwnerAdminId = createdBy.Value,
     AdminIds     = new string[] { createdBy.Value },
     Name         = createProjectRequest.Name
 };
Beispiel #2
0
 public async Task <IEnumerable <TestProject> > GetAllTest(PlatformAdminUserId userId, IAsyncDocumentSession session)
 => await session.Query <TestProject>()
 .Where(p => p.OwnerAdminId == userId.Value || p.AdminIds.Contains(userId.Value))
 .OrderByDescending(p => p.Id)
 .ToListAsync();
        public async Task<Project> Update(UpdateProjectRequest request, IAsyncDocumentSession session, PlatformAdminUserId userId)
        {
            _logger.LogInformation("Project update {@projectId}", request.Id);

            var requestName = request.Name.Trim();

            if (string.IsNullOrEmpty(requestName) || string.IsNullOrWhiteSpace(requestName))
            {
                _logger.LogError("Project update - empty name requested");
                throw new ApiException("Seems you are not an admin on this project.", (int)System.Net.HttpStatusCode.BadRequest);
            }

            var testMode = TestProjectId.IsValidIdentity(request.Id) && !ProjectId.IsValidIdentity(request.Id);

            var project = testMode ? await _projectManager.GetTest((TestProjectId)request.Id, session) : await _projectManager.Get((ProjectId)request.Id, session);

            if (!project.AdminIds.Contains(userId.Value) && project.OwnerAdminId != userId.Value)
            {
                _logger.LogError("User {userId} is not part of {ownerId} or {@adminIds}", userId.Value, project.OwnerAdminId, project.AdminIds);
                throw new ApiException("Seems you are not an admin on this project.", (int)System.Net.HttpStatusCode.Unauthorized);
            }

            var updates = new List<string>();
            var application = project.Applications.FirstOrDefault();
            var platform = project.Platforms.FirstOrDefault();

            if (project.Name != requestName)
            {
                if (testMode)
                {
                    _logger.LogInformation("TestProject - skipping name update {@projectId}", request.Id);
                }
                else
                {
                    // TODO: Catch exception thrown on failed update
                    if (application != null)
                        await _applicationHttpClient.SetName(application.Id, requestName);
                    if (platform != null)
                        await _platformAdminHttpClient.SetName(platform.Id.ToString(), requestName);

                    project.Name = requestName;
                    updates.Add(nameof(Project.Name));
                    // _logger.LogInformation("Project update: {@property}", nameof(Project.Name));
                }
            }
            if (project.LogoUrl != request.LogoUrl)
            {
                // TODO: Catch exception thrown on failed update
                if (application != null && !testMode)
                    await _applicationHttpClient.SetLogoUrl(application.Id, request.LogoUrl);
                if (platform != null && !testMode)
                    await _platformAdminHttpClient.SetLogoUrl(platform.Id.ToString(), request.LogoUrl);
                project.LogoUrl = request.LogoUrl;
                updates.Add(nameof(Project.LogoUrl));
                // _logger.LogInformation("Project update: {@property}", nameof(Project.LogoUrl));
            }
            if (project.Description != request.Description)
            {
                // TODO: Catch exception thrown on failed update
                if (application != null && !testMode)
                    await _applicationHttpClient.SetDescription(application.Id, request.Description);
                if (platform != null && !testMode)
                    await _platformAdminHttpClient.SetDescription(platform.Id.ToString(), request.Description);
                project.Description = request.Description;
                updates.Add(nameof(Project.Description));
                // _logger.LogInformation("Project update: {@property}", nameof(Project.Description));
            }
            if (project.Webpage != request.Webpage)
            {
                // TODO: Catch exception thrown on failed update
                if (application != null && !testMode)
                    await _applicationHttpClient.SetWebsiteUrl(application.Id, request.Webpage);
                if (platform != null && !testMode)
                    await _platformAdminHttpClient.SetWebsiteUrl(platform.Id.ToString(), request.Webpage);
                project.Webpage = request.Webpage;
                updates.Add(nameof(Project.Webpage));
                // _logger.LogInformation("Project update: {@property}", nameof(Project.Webpage));
            }

            if (updates.Any())
            {
                _logger.LogInformation("Project update: Preparing to save {@updates}", updates);
                project = await _projectManager.Update(project, session);
                await session.SaveChangesAsync();
            }
            return project;
        }