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 52597af3c50c48aa3adc8136f134aaf05b6f35b7..6d55d5774ba75ebd158a05b9541c943bd2dbc4ac 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 883c0fda306babfc06f3f63f7ba8c679198dc92b..52a9f8a59e233654d399ef2f03d69f9c45ac7928 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 2c1aff83f7461224ef599deeadb8426945f7e416..7824c73ce2a163dd543b3dd4f17b70d44fb3e74a 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 544d06f5da178415352ad7c8c826b0bffc3e0fe9..ee346fa43f276593bff53fb9de7817fd7d7c75f7 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 fce12aabfb8baadbeb620c531ffcc84a92c4bb77..a4fb985f2a6396828b6b3628f40b720fc1bd87c2 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 cdefa7305b0d4fc0ef0c6d2a86dc1160e4004799..3b9b0a94666ab63b462e85c64e177f467769cb20 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 173e7254a68fa8768677cb3aa9ccaec0a23a9eab..c31cd05af51aa9fad8d7faa4e36370a48886bbd2 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 719e23432625062edca59375a51178f6c1ad0f45..fe2084ccad5057c0f169f0f2d3fd696130402a94 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 4ec2332e001d95f62efb52a3670f527d6e9664da..024b8c09b92a11723d87f33f2dd7c2b3ed7dc47c 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 c5f5444eca51147d3fd7754a5181f08547dd9598..14c6fbd7a4bcd4c02f9954e9fa581d5eac1e43e3 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 d5371de72a8e8a788a7611f0f023449f183502cd..baf8828b808be912bd6fb688ce93b28d761ffe51 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 08ba4e44f5b195272667539b3a663c28baf003fb..75a08a33a885ece0796fc1a81ae00fb4fe50fcb0 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)); }