From 393786679c93f65534f18ed2953f8ccfc067b786 Mon Sep 17 00:00:00 2001
From: evilimkova <evilimkova@onpointserv.com>
Date: Tue, 4 Apr 2023 16:18:38 +0200
Subject: [PATCH] Ids from String to Long + findCertificateByUserId

---
 .../model/dto/certificate/CertificateDto.java      |  2 +-
 .../dto/certificate/CertificateSimpleDto.java      |  6 +++---
 .../fuseri/model/dto/common/DomainObjectDto.java   |  4 +---
 .../org/fuseri/model/dto/course/CourseDto.java     |  2 +-
 .../java/org/fuseri/model/dto/user/UserDto.java    |  2 +-
 .../org/fuseri/modulecertificate/Certificate.java  | 14 +++++++-------
 .../service/CertificateController.java             |  4 ++--
 .../service/CertificateFacade.java                 |  8 ++++++++
 .../service/CertificateMapper.java                 |  5 +++--
 .../service/CertificateRepository.java             |  6 ++++++
 .../service/CertificateService.java                |  7 +++++++
 .../CertificateControllerTests.java                |  4 ++--
 12 files changed, 42 insertions(+), 22 deletions(-)

diff --git a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateDto.java b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateDto.java
index 52597af3..6d55d577 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateDto.java
@@ -33,6 +33,6 @@ public class CertificateDto extends DomainObjectDto {
     private CertificateFileDto certificateFile;
 
     public CertificateDto() {
-        setId("0");
+        setId(0L);
     }
 }
diff --git a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateSimpleDto.java b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateSimpleDto.java
index 883c0fda..52a9f8a5 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateSimpleDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateSimpleDto.java
@@ -18,13 +18,13 @@ import java.time.Instant;
 public class CertificateSimpleDto extends DomainObjectDto {
     @NotBlank
     @NotNull
-    private String userId;
+    private Long userId;
     @NotBlank
     @NotNull
     private Instant generatedAt;
     @NotBlank
     @NotNull
-    private String courseId;
+    private Long courseId;
     @NotBlank
     @NotNull
     private String certificateFile;
@@ -32,7 +32,7 @@ public class CertificateSimpleDto extends DomainObjectDto {
     @NotNull
     private String certificateFileName;
 
-    public CertificateSimpleDto(String id, String userId, Instant generatedAt, String courseId, String certificateFile, String certificateFileName) {
+    public CertificateSimpleDto(Long id, Long userId, Instant generatedAt, Long courseId, String certificateFile, String certificateFileName) {
         this.setId(id);
         this.userId = userId;
         this.generatedAt = generatedAt;
diff --git a/application/model/src/main/java/org/fuseri/model/dto/common/DomainObjectDto.java b/application/model/src/main/java/org/fuseri/model/dto/common/DomainObjectDto.java
index 2c1aff83..7824c73c 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/common/DomainObjectDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/common/DomainObjectDto.java
@@ -1,6 +1,5 @@
 package org.fuseri.model.dto.common;
 
-import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
@@ -9,7 +8,6 @@ import lombok.Setter;
 @Setter
 public abstract class DomainObjectDto {
 
-    @NotBlank
     @NotNull
-    private String id;
+    private Long id;
 }
diff --git a/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java b/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java
index 544d06f5..ee346fa4 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java
@@ -44,7 +44,7 @@ public class CourseDto extends DomainObjectDto {
     private List<String> studentIds;
 
     public CourseDto(String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) {
-        setId("0");
+        setId(0L);
         this.name = name;
         this.capacity = capacity;
         this.languageTypeDto = languageTypeDto;
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java b/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
index fce12aab..a4fb985f 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
@@ -21,7 +21,7 @@ public class UserDto extends DomainObjectDto {
 
 
     public UserDto(String username, String email, String firstName, String lastName, AddressDto address) {
-        setId("0");
+        setId(0L);
         this.username = username;
         this.email = email;
         this.firstName = firstName;
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/Certificate.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/Certificate.java
index cdefa730..3b9b0a94 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/Certificate.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/Certificate.java
@@ -15,12 +15,12 @@ public class Certificate implements Serializable {
     @Column(name = "id_certificate")
     private Long id;
     @Column(name = "id_user")
-    private String userId;
+    private Long userId;
     @Column(name = "generatedAt")
     @Temporal(TemporalType.TIMESTAMP)
     private Instant generatedAt;
     @Column(name = "id_course")
-    private String courseId;
+    private Long courseId;
     @Column(name = "certificate_file")
     private String certificateFile;
     @Column(name = "certificate_file_name")
@@ -29,7 +29,7 @@ public class Certificate implements Serializable {
     public Certificate() {
     }
 
-    public Certificate(String userId, Instant generatedAt, String courseId, String certificateFile, String certificateFileName) {
+    public Certificate(Long userId, Instant generatedAt, Long courseId, String certificateFile, String certificateFileName) {
         this.userId = userId;
         this.generatedAt = generatedAt;
         this.courseId = courseId;
@@ -41,11 +41,11 @@ public class Certificate implements Serializable {
         return id;
     }
 
-    public String getUserId() {
+    public Long getUserId() {
         return userId;
     }
 
-    public void setUserId(String userId) {
+    public void setUserId(Long userId) {
         this.userId = userId;
     }
 
@@ -57,11 +57,11 @@ public class Certificate implements Serializable {
         this.generatedAt = generatedAt;
     }
 
-    public String getCourseId() {
+    public Long getCourseId() {
         return courseId;
     }
 
-    public void setCourseId(String courseId) {
+    public void setCourseId(Long courseId) {
         this.courseId = courseId;
     }
 
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateController.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateController.java
index 173e7254..c31cd05a 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateController.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateController.java
@@ -57,8 +57,8 @@ public class CertificateController {
      * for specified User.
      */
     @GetMapping("/findForUser")
-    public List<CertificateDto> findForUser(@RequestParam String userId) {
-        return List.of(new CertificateDto());
+    public List<CertificateSimpleDto> findForUser(@RequestParam Long userId) {
+        return certificateFacade.findByUserId(userId);
     }
 
     /**
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateFacade.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateFacade.java
index 719e2343..fe2084cc 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateFacade.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateFacade.java
@@ -11,6 +11,8 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 @Service
 @Transactional
 public class CertificateFacade {
@@ -34,6 +36,12 @@ public class CertificateFacade {
     public CertificateSimpleDto generate(CertificateCreateDto certificateCreateDto) {
         return certificateMapper.mapToSimpleDto(certificateService.save(certificateMapper.mapToCertificate(certificateCreateDto)));
     }
+
+    @Cacheable(cacheNames = "certificates", key = "#userId")
+    @Transactional(readOnly = true)
+    public List<CertificateSimpleDto> findByUserId(Long userId) {
+        return certificateMapper.mapToList(certificateService.findByUserId(userId));
+    }
     //@Transactional(readOnly = true)
     //public Page<CertificateDto> findAll(Pageable pageable) {
         //return certificateMapper.mapToPageDto(certificateService.findAll(pageable));
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateMapper.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateMapper.java
index 4ec2332e..024b8c09 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateMapper.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateMapper.java
@@ -1,6 +1,7 @@
 package org.fuseri.modulecertificate.service;
 
 import org.fuseri.model.dto.certificate.CertificateCreateDto;
+import org.fuseri.model.dto.certificate.CertificateDto;
 import org.fuseri.model.dto.certificate.CertificateSimpleDto;
 import org.fuseri.modulecertificate.Certificate;
 import org.mapstruct.Mapper;
@@ -20,7 +21,7 @@ public interface CertificateMapper {
         }
 
         return new CertificateSimpleDto(
-                certificate.getId().toString(),
+                certificate.getId(),
                 certificate.getUserId(),
                 certificate.getGeneratedAt(),
                 certificate.getCourseId(),
@@ -41,7 +42,7 @@ public interface CertificateMapper {
                 null);
     }
 
-    //List<CertificateDto> mapToList(List<Certificate> certificates);
+    List<CertificateSimpleDto> mapToList(List<Certificate> certificates);
 
     //default Page<CertificateDto> mapToPageDto(Page<Certificate> certificates) {
         //return new PageImpl<>(mapToList(certificates.getContent()), certificates.getPageable(), certificates.getTotalPages());
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateRepository.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateRepository.java
index c5f5444e..14c6fbd7 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateRepository.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateRepository.java
@@ -2,10 +2,16 @@ package org.fuseri.modulecertificate.service;
 
 import org.fuseri.modulecertificate.Certificate;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 
 @Repository
 public interface CertificateRepository extends JpaRepository<Certificate, Long> {
 
+    @Query("SELECT c FROM Certificate c WHERE c.userId = ?1")
+    List<Certificate> findCertificateByUserId(Long userId);
 }
+
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateService.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateService.java
index d5371de7..baf8828b 100644
--- a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateService.java
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateService.java
@@ -7,6 +7,8 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 @Service
 public class CertificateService {
 
@@ -23,6 +25,11 @@ public class CertificateService {
                 .orElseThrow(() -> new ResourceNotFoundException("Certificate with id: " + id + " was not found."));
     }
 
+    @Transactional(readOnly = true)
+    public List<Certificate> findByUserId(Long userId) {
+        return certificateRepository.findCertificateByUserId(userId);
+    }
+
     @Transactional(readOnly = true)
     public Certificate save(Certificate certificate) {
         return certificateRepository.save(certificate);
diff --git a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateControllerTests.java b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateControllerTests.java
index 08ba4e44..75a08a33 100644
--- a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateControllerTests.java
+++ b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateControllerTests.java
@@ -72,9 +72,9 @@ class CertificateControllerTests {
                         .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
 
-        String id = objectMapper.readValue(response, CertificateDto.class).getId();
+        Long id = objectMapper.readValue(response, CertificateDto.class).getId();
 
-        mockMvc.perform(get("/certificates/find").param("id", id))
+        mockMvc.perform(get("/certificates/find").param("id", id.toString()))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.id").value(id));
     }
-- 
GitLab