This is an automated email from the ASF dual-hosted git repository. bhliva pushed a commit to branch feature/projects in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 06d3b1dc8de00432825c0bf7472d6acc6b9ea22a Author: bhliva <bohdan_hl...@epam.com> AuthorDate: Tue Jun 25 16:09:07 2019 +0300 DLAB-818 fixed bug connected with resource creation --- .../dlab/rest/mappers/ValidationExceptionMapper.java | 2 +- .../java/com/epam/dlab/backendapi/dao/ProjectDAO.java | 3 +++ .../com/epam/dlab/backendapi/dao/ProjectDAOImpl.java | 17 +++++++++++++++++ .../com/epam/dlab/backendapi/domain/ProjectDTO.java | 2 ++ .../epam/dlab/backendapi/resources/ProjectResource.java | 17 +++++++++++++++++ .../epam/dlab/backendapi/service/ProjectService.java | 1 + .../backendapi/service/impl/ProjectServiceImpl.java | 5 +++++ .../core/services/applicationServiceFacade.service.ts | 8 ++++++++ .../webapp/src/app/core/services/project.service.ts | 10 +++++++++- .../create-environment/create-environment.component.ts | 6 +++++- 10 files changed, 68 insertions(+), 3 deletions(-) diff --git a/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/mappers/ValidationExceptionMapper.java b/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/mappers/ValidationExceptionMapper.java index 49ce81f..700ce4d 100644 --- a/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/mappers/ValidationExceptionMapper.java +++ b/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/mappers/ValidationExceptionMapper.java @@ -36,7 +36,7 @@ public class ValidationExceptionMapper implements ExceptionMapper<JerseyViolatio final String errors = exception.getConstraintViolations() .stream().map(violation -> ConstraintMessage.getMessage(violation, invocable)) - .collect(Collectors.joining()); + .collect(Collectors.joining(",")); return Response.status(Response.Status.BAD_REQUEST) .entity(new ErrorDTO(Response.Status.BAD_REQUEST.getStatusCode(), errors)) .type(MediaType.APPLICATION_JSON) diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java index 35cfd1b..2e2ab55 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java @@ -1,5 +1,6 @@ package com.epam.dlab.backendapi.dao; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.domain.ProjectDTO; import com.epam.dlab.dto.base.project.ProjectEdgeInfo; @@ -10,6 +11,8 @@ import java.util.Set; public interface ProjectDAO { List<ProjectDTO> getProjects(); + List<ProjectDTO> getUserProjects(UserInfo userInfo); + void create(ProjectDTO projectDTO); void updateStatus(String projectName, ProjectDTO.Status status); diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java index c3a6752..dd89e5d 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java @@ -1,8 +1,11 @@ package com.epam.dlab.backendapi.dao; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.domain.ProjectDTO; import com.epam.dlab.dto.base.project.ProjectEdgeInfo; import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; +import com.google.inject.Inject; import com.mongodb.BasicDBObject; import com.mongodb.client.result.UpdateResult; import org.bson.Document; @@ -22,12 +25,26 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO { private static final String STATUS_FIELD = "status"; private static final String EDGE_INFO_FIELD = "edgeInfo"; + private final UserGroupDao userGroupDao; + + @Inject + public ProjectDAOImpl(UserGroupDao userGroupDao) { + this.userGroupDao = userGroupDao; + } + + @Override public List<ProjectDTO> getProjects() { return find(PROJECTS_COLLECTION, ProjectDTO.class); } @Override + public List<ProjectDTO> getUserProjects(UserInfo userInfo) { + return find(PROJECTS_COLLECTION, in(GROUPS, Sets.union(userGroupDao.getUserGroups(userInfo.getName()), + userInfo.getRoles())), ProjectDTO.class); + } + + @Override public void create(ProjectDTO projectDTO) { insertOne(PROJECTS_COLLECTION, projectDTO); } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java index ac47bd8..4d836cc 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import java.util.Set; @Data @@ -16,6 +17,7 @@ public class ProjectDTO { @NotNull private final Set<String> groups; @NotNull + @Pattern(regexp = "^ssh-", message = "Wrong key format. Key should be in openSSH format") private final String key; @NotNull private final String tag; diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java index 36d078c..e8414a4 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java @@ -98,6 +98,23 @@ public class ProjectResource { .build(); } + @Operation(summary = "Get projects assigned to user", tags = "project") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "Return information about projects", + content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = + @Schema(implementation = ProjectDTO.class))), + }) + @Path("/me") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getUserProjects(@Parameter(hidden = true) @Auth UserInfo userInfo, + @Parameter(description = "Project name") + @PathParam("name") String name) { + return Response + .ok(projectService.getUserProjects(userInfo)) + .build(); + } + @Operation(summary = "Update project", tags = "project") @ApiResponses({ @ApiResponse(responseCode = "200", description = "Project is successfully updated"), diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java index 03c979c..3245144 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java @@ -7,6 +7,7 @@ import java.util.List; public interface ProjectService { List<ProjectDTO> getProjects(); + List<ProjectDTO> getUserProjects(UserInfo userInfo); void create(UserInfo userInfo, ProjectDTO projectDTO); diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java index 0343583..637bdd3 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java @@ -51,6 +51,11 @@ public class ProjectServiceImpl implements ProjectService { } @Override + public List<ProjectDTO> getUserProjects(UserInfo userInfo) { + return projectDAO.getUserProjects(userInfo); + } + + @Override public void create(UserInfo user, ProjectDTO projectDTO) { if (!projectDAO.get(projectDTO.getName()).isPresent()) { projectDAO.create(projectDTO); diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts index 4435324..bec6ee9 100644 --- a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts +++ b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts @@ -68,6 +68,7 @@ export class ApplicationServiceFacade { private static readonly DOWNLOAD_REPORT = 'download_report'; private static readonly SETTINGS = 'settings'; private static readonly PROJECT = 'project'; + private static readonly USER_PROJECT = 'project/me'; private static readonly ENDPOINT = 'endpoint'; private accessTokenKey: string = 'access_token'; private requestRegistry: Dictionary<string>; @@ -527,6 +528,12 @@ export class ApplicationServiceFacade { null); } + public buildGetUserProjectsList(): Observable<any> { + return this.buildRequest(RequestMethod.Get, + this.requestRegistry.Item(ApplicationServiceFacade.USER_PROJECT), + null); + } + public buildDeleteProject(param): Observable<any> { return this.buildRequest(RequestMethod.Delete, this.requestRegistry.Item(ApplicationServiceFacade.PROJECT) + param, @@ -627,6 +634,7 @@ export class ApplicationServiceFacade { // project this.requestRegistry.Add(ApplicationServiceFacade.PROJECT, '/api/project'); this.requestRegistry.Add(ApplicationServiceFacade.ENDPOINT, '/api/endpoint'); + this.requestRegistry.Add(ApplicationServiceFacade.USER_PROJECT, '/api/project/me'); } private buildRequest(method: RequestMethod, url: string, body: any, opt?) { diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/project.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/project.service.ts index ff17365..bdb2dc4 100644 --- a/services/self-service/src/main/resources/webapp/src/app/core/services/project.service.ts +++ b/services/self-service/src/main/resources/webapp/src/app/core/services/project.service.ts @@ -52,6 +52,14 @@ export class ProjectService { catchError(ErrorUtils.handleServiceError)); } + public getUserProjectsList(): Observable<{}> { + return this.applicationServiceFacade + .buildGetUserProjectsList() + .pipe( + map(response => response), + catchError(ErrorUtils.handleServiceError)); + } + public deleteProject(data): Observable<{}> { const url = `/${data}`; return this.applicationServiceFacade @@ -60,4 +68,4 @@ export class ProjectService { map(response => response), catchError(ErrorUtils.handleServiceError)); } -} \ No newline at end of file +} diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts index 8eb8f9b..6fc0b07 100644 --- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts +++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts @@ -60,7 +60,7 @@ export class ExploratoryEnvironmentCreateComponent implements OnInit { } ngOnInit() { - this.getProjects(); + this.getUserProjects(); this.initFormModel(); } @@ -68,6 +68,10 @@ export class ExploratoryEnvironmentCreateComponent implements OnInit { this.projectService.getProjectsList().subscribe((projects: any) => this.projects = projects); } + public getUserProjects() { + this.projectService.getUserProjectsList().subscribe((projects: any) => this.projects = projects); + } + public getTemplates($event, project) { this.endpoints = project.endpoints; this.userResourceService.getExploratoryTemplates($event.value).subscribe(templates => this.templates = templates); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org