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));
     }