This is an automated email from the ASF dual-hosted git repository.

dyankiv pushed a commit to branch DATALAB-2812
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit d1ea368f90e2073d2c16e3c717af7d06fb3591e3
Author: Denys Yankiv <[email protected]>
AuthorDate: Mon May 30 14:27:06 2022 +0300

    add endpoint for user images
---
 .../com/epam/datalab/model/exploratory/Image.java  |  3 ++
 .../backendapi/dao/ImageExploratoryDAO.java        |  2 ++
 .../backendapi/dao/ImageExploratoryDAOImpl.java    | 12 +++++++
 .../resources/ImageExploratoryResource.java        | 11 +++++++
 .../dto/{ImageInfoRecord.java => ImageFilter.java} | 38 +++++++++++++++++-----
 .../backendapi/resources/dto/ImageInfoRecord.java  |  5 +++
 ...ImageInfoRecord.java => ProjectImagesInfo.java} | 30 +++++++++--------
 .../service/ImageExploratoryService.java           |  4 +++
 .../service/impl/ImageExploratoryServiceImpl.java  | 20 ++++++++++++
 .../resources/ImageExploratoryResourceTest.java    | 14 ++++++--
 .../service/impl/BillingServiceImplTest.java       | 13 +++++++-
 .../impl/ImageExploratoryServiceImplTest.java      |  3 +-
 12 files changed, 128 insertions(+), 27 deletions(-)

diff --git 
a/services/datalab-model/src/main/java/com/epam/datalab/model/exploratory/Image.java
 
b/services/datalab-model/src/main/java/com/epam/datalab/model/exploratory/Image.java
index c8d3b2c35..322d5511a 100644
--- 
a/services/datalab-model/src/main/java/com/epam/datalab/model/exploratory/Image.java
+++ 
b/services/datalab-model/src/main/java/com/epam/datalab/model/exploratory/Image.java
@@ -24,6 +24,7 @@ import com.epam.datalab.model.library.Library;
 import lombok.Builder;
 import lombok.Data;
 
+import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 
@@ -40,6 +41,8 @@ public class Image {
     private final String fullName;
     private final String externalName;
     private final String application;
+    private final String instanceName;
+    private final String cloudProvider;
     private final String dockerImage;
     private final List<Library> libraries;
     private final Map<String, List<Library>> computationalLibraries;
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAO.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAO.java
index d8e89874a..4d97437e6 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAO.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAO.java
@@ -38,6 +38,8 @@ public interface ImageExploratoryDAO {
 
     List<ImageInfoRecord> getImages(String user, String dockerImage, String 
project, String endpoint, ImageStatus... statuses);
 
+    List<ImageInfoRecord> getImagesOfUser(String user, String project);
+
     List<ImageInfoRecord> getImagesForProject(String project);
 
     Optional<ImageInfoRecord> getImage(String user, String name, String 
project, String endpoint);
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
index 234a15e52..95f4e0a1a 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
@@ -54,6 +54,7 @@ public class ImageExploratoryDAOImpl extends BaseDAO 
implements ImageExploratory
     private static final String DOCKER_IMAGE = "dockerImage";
     private static final String PROJECT = "project";
     private static final String ENDPOINT = "endpoint";
+    private static final String CREATION_DATE = "creationDate";
 
     @Override
     public boolean exist(String image, String project) {
@@ -79,6 +80,13 @@ public class ImageExploratoryDAOImpl extends BaseDAO 
implements ImageExploratory
                 ImageInfoRecord.class);
     }
 
+    @Override
+    public List<ImageInfoRecord> getImagesOfUser(String user, String project) {
+        return find(MongoCollections.IMAGES,
+                imageUserProjectCondition(user, project),
+                ImageInfoRecord.class);
+    }
+
     @Override
     public List<ImageInfoRecord> getImagesForProject(String project) {
         return find(MongoCollections.IMAGES,
@@ -146,6 +154,10 @@ public class ImageExploratoryDAOImpl extends BaseDAO 
implements ImageExploratory
         return and(eq(IMAGE_NAME, image), eq(PROJECT, project));
     }
 
+    private Bson imageUserProjectCondition(String user, String project) {
+        return and(eq(USER, user), eq(PROJECT, project));
+    }
+
     private Document getUpdatedFields(Image image) {
         return new Document(STATUS, image.getStatus().toString())
                 .append(IMAGE_FULL_NAME, image.getFullName())
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
index 95dcdb469..03774e657 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
@@ -22,7 +22,9 @@ package com.epam.datalab.backendapi.resources;
 import com.epam.datalab.auth.UserInfo;
 import com.epam.datalab.backendapi.domain.RequestId;
 import com.epam.datalab.backendapi.resources.dto.ExploratoryImageCreateFormDTO;
+import com.epam.datalab.backendapi.resources.dto.ImageFilter;
 import com.epam.datalab.backendapi.resources.dto.ImageInfoRecord;
+import com.epam.datalab.backendapi.resources.dto.ProjectImagesInfo;
 import com.epam.datalab.backendapi.service.ImageExploratoryService;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
@@ -98,6 +100,15 @@ public class ImageExploratoryResource {
         return Response.ok(images).build();
     }
 
+    @POST
+    @Path("user")
+    public Response getImagesForUser(@Auth UserInfo ui, @Valid @NotNull 
ImageFilter imageFilter) {
+        log.debug("Getting images for user {}", ui.getName());
+        final List<ProjectImagesInfo> images = 
imageExploratoryService.getImagesOfUser(ui ,imageFilter);
+        return Response.ok(images).build();
+    }
+
+
     @GET
     @Path("{name}")
     public Response getImage(@Auth UserInfo ui,
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageFilter.java
similarity index 58%
copy from 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
copy to 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageFilter.java
index 18692c34c..09c50ef58 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageFilter.java
@@ -19,19 +19,39 @@
 
 package com.epam.datalab.backendapi.resources.dto;
 
+import com.epam.datalab.cloud.CloudProvider;
 import com.epam.datalab.dto.exploratory.ImageStatus;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+import java.util.List;
 
 @Data
+@NoArgsConstructor
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ImageInfoRecord {
-    private final String name;
-    private final String description;
-    private final String project;
-    private final String endpoint;
-    private final String user;
-    private final String application;
-    private final String fullName;
-    private final ImageStatus status;
+public class ImageFilter {
+    @NonNull
+    private String imageName;
+    @NonNull
+    @JsonProperty("date_start")
+    private String dateStart;
+    @NonNull
+    @JsonProperty("date_end")
+    private String dateEnd;
+    @NonNull
+    private List<CloudProvider> cloudProviders;
+    @NonNull
+    private List<ImageStatus> statuses;
+//    @NonNull
+//    private List<> sharingStatuses;
+    @NonNull
+    private List<String> templateNames;
+    @NonNull
+    private List<String> instanceNames;
+    @NonNull
+    private List<String> projects;
+
 }
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
index 18692c34c..b10db48d6 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
@@ -19,10 +19,13 @@
 
 package com.epam.datalab.backendapi.resources.dto;
 
+import com.epam.datalab.cloud.CloudProvider;
 import com.epam.datalab.dto.exploratory.ImageStatus;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class ImageInfoRecord {
@@ -32,6 +35,8 @@ public class ImageInfoRecord {
     private final String endpoint;
     private final String user;
     private final String application;
+    private final String instanceName;
+    private final CloudProvider cloudProvider;
     private final String fullName;
     private final ImageStatus status;
 }
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
similarity index 63%
copy from 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
copy to 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
index 18692c34c..06da51f28 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
@@ -19,19 +19,21 @@
 
 package com.epam.datalab.backendapi.resources.dto;
 
-import com.epam.datalab.dto.exploratory.ImageStatus;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
-@Data
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class ImageInfoRecord {
-    private final String name;
-    private final String description;
-    private final String project;
-    private final String endpoint;
-    private final String user;
-    private final String application;
-    private final String fullName;
-    private final ImageStatus status;
+import java.util.List;
+
+@AllArgsConstructor
+@Builder
+@EqualsAndHashCode
+@ToString
+public class ProjectImagesInfo {
+    @JsonProperty
+    private String project;
+    @JsonProperty
+    private List<ImageInfoRecord> images;
 }
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
index fae72a33f..c08628820 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
@@ -20,7 +20,9 @@
 package com.epam.datalab.backendapi.service;
 
 import com.epam.datalab.auth.UserInfo;
+import com.epam.datalab.backendapi.resources.dto.ImageFilter;
 import com.epam.datalab.backendapi.resources.dto.ImageInfoRecord;
+import com.epam.datalab.backendapi.resources.dto.ProjectImagesInfo;
 import com.epam.datalab.model.exploratory.Image;
 
 import java.util.List;
@@ -36,4 +38,6 @@ public interface ImageExploratoryService {
     ImageInfoRecord getImage(String user, String name, String project, String 
endpoint);
 
     List<ImageInfoRecord> getImagesForProject(String project);
+
+    List<ProjectImagesInfo> getImagesOfUser(UserInfo user, ImageFilter 
imageFilter);
 }
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 8c6802167..0a3666c1f 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -30,7 +30,9 @@ import com.epam.datalab.backendapi.dao.ExploratoryLibDAO;
 import com.epam.datalab.backendapi.dao.ImageExploratoryDAO;
 import com.epam.datalab.backendapi.domain.EndpointDTO;
 import com.epam.datalab.backendapi.domain.ProjectDTO;
+import com.epam.datalab.backendapi.resources.dto.ImageFilter;
 import com.epam.datalab.backendapi.resources.dto.ImageInfoRecord;
+import com.epam.datalab.backendapi.resources.dto.ProjectImagesInfo;
 import com.epam.datalab.backendapi.service.EndpointService;
 import com.epam.datalab.backendapi.service.ImageExploratoryService;
 import com.epam.datalab.backendapi.service.ProjectService;
@@ -53,6 +55,7 @@ import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Predicate;
@@ -104,6 +107,8 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .computationalLibraries(fetchComputationalLibs(libraries))
                 .dockerImage(userInstance.getImageName())
                 .exploratoryId(userInstance.getId())
+                .instanceName(userInstance.getExploratoryName())
+                .cloudProvider(userInstance.getCloudProvider())
                 .project(userInstance.getProject())
                 .endpoint(userInstance.getEndpoint())
                 .build());
@@ -154,6 +159,21 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
         return imageExploratoryDao.getImagesForProject(project);
     }
 
+    @Override
+    public List<ProjectImagesInfo> getImagesOfUser(UserInfo user, ImageFilter 
imageFilter) {
+        log.debug("Loading list of images for user {}", user.getName());
+        return projectService.getUserProjects(user, Boolean.FALSE)
+                .stream()
+                .map( p-> {
+                    List<ImageInfoRecord> images =  
imageExploratoryDao.getImagesOfUser(user.getName(), p.getName());
+                    return ProjectImagesInfo.builder()
+                            .project(p.getName())
+                            .images(images)
+                            .build();
+                })
+                .collect(Collectors.toList());
+    }
+
     private Map<String, List<Library>> fetchComputationalLibs(List<Library> 
libraries) {
         return libraries.stream()
                 .filter(resourceTypePredicate(ResourceType.COMPUTATIONAL))
diff --git 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/resources/ImageExploratoryResourceTest.java
 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/resources/ImageExploratoryResourceTest.java
index f62b1e3c6..7a28c670c 100644
--- 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/resources/ImageExploratoryResourceTest.java
+++ 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/resources/ImageExploratoryResourceTest.java
@@ -24,6 +24,7 @@ import com.epam.datalab.backendapi.domain.RequestId;
 import com.epam.datalab.backendapi.resources.dto.ExploratoryImageCreateFormDTO;
 import com.epam.datalab.backendapi.resources.dto.ImageInfoRecord;
 import com.epam.datalab.backendapi.service.ImageExploratoryService;
+import com.epam.datalab.cloud.CloudProvider;
 import com.epam.datalab.dto.exploratory.ImageStatus;
 import com.epam.datalab.exceptions.ResourceAlreadyExistException;
 import com.epam.datalab.exceptions.ResourceNotFoundException;
@@ -39,6 +40,7 @@ import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.List;
 
@@ -275,8 +277,16 @@ public class ImageExploratoryResourceTest extends TestBase 
{
     }
 
     private List<ImageInfoRecord> getImageList() {
-        ImageInfoRecord imageInfoRecord = new ImageInfoRecord("someName", 
"someDescription", "someProject", "someEndpoint", "someUser", "someApp",
-                "someFullName", ImageStatus.CREATED);
+        ImageInfoRecord imageInfoRecord = new ImageInfoRecord("someName",
+                "someDescription",
+                "someProject",
+                "someEndpoint",
+                "someUser",
+                "someApp",
+                "someInstance",
+                CloudProvider.AWS,
+                "someFullName",
+                ImageStatus.CREATED);
         return Collections.singletonList(imageInfoRecord);
     }
 }
diff --git 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/BillingServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/BillingServiceImplTest.java
index 5c9ec461b..fc6629c85 100644
--- 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/BillingServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/BillingServiceImplTest.java
@@ -56,6 +56,7 @@ import org.mockito.runners.MockitoJUnitRunner;
 
 import javax.ws.rs.core.GenericType;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -745,7 +746,17 @@ public class BillingServiceImplTest extends TestBase {
 
     private List<ImageInfoRecord> getImageInfoRecords() {
         return Collections.singletonList(
-                new ImageInfoRecord(IMAGE_NAME, IMAGE_DESCRIPTION, PROJECT, 
ENDPOINT, USER, IMAGE_APPLICATION, IMAGE_FULL_NAME, ImageStatus.CREATED)
+                new ImageInfoRecord(
+                        IMAGE_NAME,
+                        IMAGE_DESCRIPTION,
+                        PROJECT,
+                        ENDPOINT,
+                        USER,
+                        IMAGE_APPLICATION,
+                        EXPLORATORY_NAME,
+                        CloudProvider.GENERAL,
+                        IMAGE_FULL_NAME,
+                        ImageStatus.CREATED)
         );
     }
 }
\ No newline at end of file
diff --git 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
index 78eb81f55..c89fda149 100644
--- 
a/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
@@ -52,6 +52,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
+import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
@@ -309,7 +310,7 @@ public class ImageExploratoryServiceImplTest {
 
     private ImageInfoRecord getImageInfoRecord() {
         return new ImageInfoRecord("someName", "someDescription", 
"someProject", "someEndpoint", "someUser", "someApp",
-                "someFullName", ImageStatus.CREATED);
+                "someInstance",CloudProvider.GENERAL,"someFullName", 
ImageStatus.CREATED);
     }
 
     private Image fetchImage() {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to