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

Reply via email to