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
new file mode 100644
index 0000000000000000000000000000000000000000..52a9f8a59e233654d399ef2f03d69f9c45ac7928
--- /dev/null
+++ b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateSimpleDto.java
@@ -0,0 +1,43 @@
+package org.fuseri.model.dto.certificate;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import org.fuseri.model.dto.common.DomainObjectDto;
+
+import java.time.Instant;
+
+/**
+ * This class represents a Data Transfer Object (DTO) for Certificate entities.
+ * It is used to transfer Certificate data between different layers of the application.
+ * It extends the DomainObjectDto class and includes additional Certificate-specific fields.
+ */
+@Getter
+@Setter
+public class CertificateSimpleDto extends DomainObjectDto {
+    @NotBlank
+    @NotNull
+    private Long userId;
+    @NotBlank
+    @NotNull
+    private Instant generatedAt;
+    @NotBlank
+    @NotNull
+    private Long courseId;
+    @NotBlank
+    @NotNull
+    private String certificateFile;
+    @NotBlank
+    @NotNull
+    private 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;
+        this.courseId = courseId;
+        this.certificateFile = certificateFile;
+        this.certificateFileName = certificateFileName;
+    }
+}
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/pom.xml b/application/module-certificate/pom.xml
index 2513ce45c90524fd4f223700e24447c54e867d36..9ab80d528d4f1ca8c3487a1df99a9cdf450cba7d 100644
--- a/application/module-certificate/pom.xml
+++ b/application/module-certificate/pom.xml
@@ -61,6 +61,18 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
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
new file mode 100644
index 0000000000000000000000000000000000000000..3b9b0a94666ab63b462e85c64e177f467769cb20
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/Certificate.java
@@ -0,0 +1,104 @@
+package org.fuseri.modulecertificate;
+
+import jakarta.persistence.*;
+
+import java.io.Serializable;
+import java.time.Instant;
+import java.util.Objects;
+
+@Entity
+@Table(name = "certificate")
+public class Certificate implements Serializable {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id_certificate")
+    private Long id;
+    @Column(name = "id_user")
+    private Long userId;
+    @Column(name = "generatedAt")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Instant generatedAt;
+    @Column(name = "id_course")
+    private Long courseId;
+    @Column(name = "certificate_file")
+    private String certificateFile;
+    @Column(name = "certificate_file_name")
+    private String certificateFileName;
+
+    public Certificate() {
+    }
+
+    public Certificate(Long userId, Instant generatedAt, Long courseId, String certificateFile, String certificateFileName) {
+        this.userId = userId;
+        this.generatedAt = generatedAt;
+        this.courseId = courseId;
+        this.certificateFile = certificateFile;
+        this.certificateFileName = certificateFileName;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Instant getGeneratedAt() {
+        return generatedAt;
+    }
+
+    public void setGeneratedAt(Instant generatedAt) {
+        this.generatedAt = generatedAt;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCertificateFile() {
+        return certificateFile;
+    }
+
+    public void setCertificateFile(String certificateFile) {
+        this.certificateFile = certificateFile;
+    }
+
+    public String getCertificateFileName() {
+        return certificateFileName;
+    }
+
+    public void setCertificateFileName(String certificateFileName) {
+        this.certificateFileName = certificateFileName;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof Certificate certificate)) {
+            return false;
+        }
+        return Objects.equals(getUserId(), certificate.getUserId())
+                && Objects.equals(getGeneratedAt(), certificate.getGeneratedAt())
+                && Objects.equals(getCourseId(), certificate.getCourseId())
+                && Objects.equals(getCertificateFile(), certificate.getCertificateFile())
+                && Objects.equals(getCertificateFileName(), certificate.getCertificateFileName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getUserId(), getGeneratedAt(), getCourseId(), getCertificateFile(), getCertificateFileName());
+    }
+}
+
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 bfb6447306aeb78f47b1dd3878e114c955c5c8e9..d0643d2529989fed6a1bd9a671d27df285cb2d2b 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
@@ -3,8 +3,11 @@ package org.fuseri.modulecertificate.service;
 import jakarta.validation.Valid;
 import org.fuseri.model.dto.certificate.CertificateCreateDto;
 import org.fuseri.model.dto.certificate.CertificateDto;
+import org.fuseri.model.dto.certificate.CertificateSimpleDto;
 import org.fuseri.model.dto.common.Result;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -18,10 +21,14 @@ import java.util.List;
 @RequestMapping("/certificates")
 public class CertificateController {
 
+    private final CertificateFacade certificateFacade;
+
     @Autowired
-    public CertificateController() {
+    public CertificateController(CertificateFacade certificateFacade) {
+        this.certificateFacade = certificateFacade;
     }
 
+
     /**
      * Generates certificate for specified user and course.
      *
@@ -29,8 +36,8 @@ public class CertificateController {
      * @return CertificateDto with data of generated certificate
      */
     @PostMapping("/generate")
-    public CertificateDto generate(@Valid @RequestBody CertificateCreateDto certificateCreateDto) {
-        return new CertificateDto();
+    public CertificateSimpleDto generate(@Valid @RequestBody CertificateCreateDto certificateCreateDto) {
+        return certificateFacade.generate(certificateCreateDto);
     }
 
     /**
@@ -40,8 +47,8 @@ public class CertificateController {
      * @return CertificateDto with data of previously generated certificate with specified ID
      */
     @GetMapping("/find")
-    public CertificateDto find(@RequestParam String id) {
-        return new CertificateDto();
+    public CertificateSimpleDto find(@RequestParam Long id) {
+        return certificateFacade.findById(id);
     }
 
     /**
@@ -52,8 +59,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);
     }
 
     /**
@@ -62,11 +69,11 @@ public class CertificateController {
      * @param userId   ID of user to retrieve certificates for.
      * @param courseId ID of course to retrieve certificates for.
      * @return List of CertificateDto objects with previously generated certificates
-     * for specified User.
+     * for specified User and Course.
      */
-    @GetMapping("/getId")
-    public String getId(@RequestParam String userId, @RequestParam String courseId) {
-        return "0";
+    @GetMapping("/findForUserAndCourse")
+    public List<CertificateSimpleDto> findForUserAndCourse(@RequestParam Long userId, @RequestParam Long courseId) {
+        return certificateFacade.findByUserIdAndCourseId(userId, courseId);
     }
 
     /**
@@ -75,17 +82,17 @@ public class CertificateController {
      * @param id Id of certificate to be deleted.
      */
     @DeleteMapping("/delete")
-    public void delete(@RequestParam String id) {
+    public void delete(@RequestParam Long id) {
+        certificateFacade.deleteCertificate(id);
     }
 
     /**
      * Find certificates and return them in a paginated format
      *
-     * @param page the page number of the certificates to retrieve
      * @return a Result object containing a list of CertificateDto objects and pagination information
      */
     @GetMapping("/findAll")
-    public Result<CertificateDto> findAllCertificates(@RequestParam int page) {
-        return new Result<>();
+    public Page<CertificateSimpleDto> findAllCertificates(@RequestBody Pageable pageable) {
+        return certificateFacade.findAll(pageable);
     }
 }
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
new file mode 100644
index 0000000000000000000000000000000000000000..bbe5bc9f50d8a93042a2e6615d0aecf599655786
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateFacade.java
@@ -0,0 +1,61 @@
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.domain.Page;
+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 {
+
+    private final CertificateService certificateService;
+    private final CertificateMapper certificateMapper;
+
+    @Autowired
+    public CertificateFacade(CertificateService certificateService, CertificateMapper certificateMapper) {
+        this.certificateService = certificateService;
+        this.certificateMapper = certificateMapper;
+    }
+
+    @Cacheable(cacheNames = "certificates", key = "#id")
+    @Transactional(readOnly = true)
+    public CertificateSimpleDto findById(Long id) {
+        return certificateMapper.mapToSimpleDto(certificateService.findById(id));
+    }
+
+    @Transactional()
+    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));
+    }
+
+    @Cacheable(cacheNames = "certificates", key = "#userId")
+    @Transactional(readOnly = true)
+    public List<CertificateSimpleDto> findByUserIdAndCourseId(Long userId, Long courseId) {
+        return certificateMapper.mapToList(certificateService.findByUserIdAndCourseId(userId, courseId));
+    }
+
+    @Transactional(readOnly = true)
+    public Page<CertificateSimpleDto> findAll(Pageable pageable) {
+        return certificateMapper.mapToPageDto(certificateService.findAll(pageable));
+    }
+
+    @Transactional(readOnly = true)
+    public void deleteCertificate(Long certificateId) {
+        certificateService.delete(certificateId);
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..f6738c4428f97b4bb6cacf0b2806491aabf00e8b
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateMapper.java
@@ -0,0 +1,50 @@
+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;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+
+import java.time.Instant;
+import java.util.List;
+
+@Mapper(componentModel = "spring")
+public interface CertificateMapper {
+
+    default CertificateSimpleDto mapToSimpleDto(Certificate certificate)
+    {
+        if ( certificate == null ) {
+            return null;
+        }
+
+        return new CertificateSimpleDto(
+                certificate.getId(),
+                certificate.getUserId(),
+                certificate.getGeneratedAt(),
+                certificate.getCourseId(),
+                certificate.getCertificateFile(),
+                certificate.getCertificateFileName());
+    }
+
+    default Certificate mapToCertificate(CertificateCreateDto certificateCreateDto)
+    {
+        if ( certificateCreateDto == null ) {
+            return null;
+        }
+
+        return new Certificate(certificateCreateDto.getUser().getId(),
+                Instant.now(),
+                certificateCreateDto.getCourse().getId(),
+                null,
+                null);
+    }
+
+    List<CertificateSimpleDto> mapToList(List<Certificate> certificates);
+
+    default Page<CertificateSimpleDto> 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
new file mode 100644
index 0000000000000000000000000000000000000000..832d2d22d002b82e3a93287f4382cfa66273b56d
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateRepository.java
@@ -0,0 +1,21 @@
+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);
+
+    @Query("SELECT c FROM Certificate c WHERE c.userId = ?1 and c.courseId = ?2")
+    List<Certificate> findCertificateByUserIdAndCourseId(Long userId, Long courseId);
+
+}
+
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
new file mode 100644
index 0000000000000000000000000000000000000000..133fa1b9e472ab973e80f1aded54b1624717630d
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/CertificateService.java
@@ -0,0 +1,53 @@
+package org.fuseri.modulecertificate.service;
+
+import org.fuseri.modulecertificate.Certificate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+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 {
+
+    private final CertificateRepository certificateRepository;
+
+    @Autowired
+    public CertificateService(CertificateRepository certificateRepository) {
+        this.certificateRepository = certificateRepository;
+    }
+
+    @Transactional(readOnly = true)
+    public Certificate findById(Long id) {
+        return certificateRepository.findById(id)
+                .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 List<Certificate> findByUserIdAndCourseId(Long userId, Long courseId) {
+        return certificateRepository.findCertificateByUserIdAndCourseId(userId, courseId);
+    }
+
+    @Transactional(readOnly = true)
+    public Certificate save(Certificate certificate) {
+        return certificateRepository.save(certificate);
+    }
+
+    @Transactional(readOnly = true)
+    public void delete(Long certificateId) {
+        certificateRepository.deleteById(certificateId);
+    }
+
+    @Transactional(readOnly = true)
+    public Page<Certificate> findAll(Pageable pageable) {
+        return certificateRepository.findAll(pageable);
+    }
+}
+
diff --git a/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/ResourceNotFoundException.java b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/ResourceNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..d24c445da1fcc4ba826a0e614778823400a4c719
--- /dev/null
+++ b/application/module-certificate/src/main/java/org/fuseri/modulecertificate/service/ResourceNotFoundException.java
@@ -0,0 +1,22 @@
+package org.fuseri.modulecertificate.service;
+
+public class ResourceNotFoundException extends RuntimeException {
+    public ResourceNotFoundException() {
+    }
+
+    public ResourceNotFoundException(String message) {
+        super(message);
+    }
+
+    public ResourceNotFoundException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ResourceNotFoundException(Throwable cause) {
+        super(cause);
+    }
+
+    public ResourceNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}
diff --git a/application/module-certificate/src/main/resources/application.properties b/application/module-certificate/src/main/resources/application.properties
index 17abda7ad394e3595b5f09d64de61a54cf12235e..21fb3ce44a10a9d8eb2c663388416536d4ddaf53 100644
--- a/application/module-certificate/src/main/resources/application.properties
+++ b/application/module-certificate/src/main/resources/application.properties
@@ -1 +1,10 @@
-server.port=5001
\ No newline at end of file
+server.port=5001
+
+spring.jpa.open-in-view=false
+spring.datasource.url=jdbc:h2:mem:social-network;MODE=PostgreSQL
+spring.datasource.driverClassName=org.h2.Driver
+spring.datasource.username=SedaQ-app
+spring.datasource.password=$argon2id$v=19$m=16,t=2,p=1$YmF0bWFuYmF0bWFu$MdHYB359HdivAb9J6CaILw
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+# showing SQL is generally good practice for running project locally to check whether there is not an issue with implementation of JPA methods.
+spring.jpa.show-sql=true
\ No newline at end of file
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..20a1ec68448a8b0d97f6373a006c25708151a01e 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
@@ -9,12 +9,16 @@ import org.fuseri.model.dto.course.ProficiencyLevelDto;
 import org.fuseri.model.dto.user.AddressDto;
 import org.fuseri.model.dto.user.UserDto;
 import org.junit.jupiter.api.Test;
+import org.springdoc.core.converters.models.Pageable;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 
+import java.util.List;
+
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
@@ -72,9 +76,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));
     }
@@ -101,30 +105,30 @@ class CertificateControllerTests {
 
     @Test
     void findCertificateIdForUserAndCourse() throws Exception {
-        mockMvc.perform(get("/certificates/getId")
+        mockMvc.perform(get("/certificates/findForUserAndCourse")
                         .param("userId", "0")
                         .param("courseId", "0"))
                 .andExpect(status().isOk())
-                .andExpect(content().string("0"));
+                .andExpect(content().string("[]"));
     }
 
     @Test
     void findCertificateIdWithoutUserId() throws Exception {
-        mockMvc.perform(get("/certificates/getId")
+        mockMvc.perform(get("/certificates/findForUserAndCourse")
                         .param("courseId", "0"))
                 .andExpect(status().is4xxClientError());
     }
 
     @Test
     void findCertificateIdWithoutCourseId() throws Exception {
-        mockMvc.perform(get("/certificates/getId")
+        mockMvc.perform(get("/certificates/findForUserAndCourse")
                         .param("userId", "0"))
                 .andExpect(status().is4xxClientError());
     }
 
     @Test
     void findCertificateIdWithoutParams() throws Exception {
-        mockMvc.perform(get("/certificates/getId"))
+        mockMvc.perform(get("/certificates/findForUserAndCourse"))
                 .andExpect(status().is4xxClientError());
     }
 
@@ -144,8 +148,14 @@ class CertificateControllerTests {
 
     @Test
     void findAllCertificates() throws Exception {
+        mockMvc.perform(post("/certificates/generate")
+                        .content(asJsonString(new CertificateCreateDto(USER, COURSE)))
+                        .contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
+
         mockMvc.perform(get("/certificates/findAll")
-                        .param("page", "1"))
+                .content("{ \"page\": 0, \"size\": 1, \"sort\": []}")
+                .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk());
     }
 
diff --git a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateApplicationTests.java b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateApplicationTests.java
deleted file mode 100644
index a0c63b18d2153bee27df6cc4cf7306a2d8aa4bb4..0000000000000000000000000000000000000000
--- a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.fuseri.modulecertificate;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class ModuleCertificateApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-}
diff --git a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateCertificateControllerTests.java b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateCertificateControllerTests.java
deleted file mode 100644
index b6bf1c8694f821b1b4116761894d4566530f237f..0000000000000000000000000000000000000000
--- a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/ModuleCertificateCertificateControllerTests.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.fuseri.modulecertificate;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.fuseri.model.dto.certificate.CertificateCreateDto;
-import org.fuseri.model.dto.certificate.CertificateDto;
-import org.fuseri.model.dto.course.CourseDto;
-import org.fuseri.model.dto.course.LanguageTypeDto;
-import org.fuseri.model.dto.course.ProficiencyLevelDto;
-import org.fuseri.model.dto.user.AddressDto;
-import org.fuseri.model.dto.user.UserDto;
-import org.fuseri.modulecertificate.service.CertificateController;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.MockMvc;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-
-@SpringBootTest
-@AutoConfigureMockMvc
-class ModuleCertificateCertificateControllerTests {
-
-    @Autowired
-    private MockMvc mockMvc;
-
-    @Autowired
-    ObjectMapper objectMapper;
-
-    @Test
-    void generateCertificate() throws Exception {
-        CertificateDto expectedResponse = new CertificateDto();
-        String response = mockMvc.perform(post("/certificates/generate")
-                .content(asJsonString(new CertificateCreateDto(
-                        new UserDto("novakovat","novakova@gamil.com", "Tereza",
-                                "Nováková", new AddressDto()),
-                        new CourseDto("AJ1", 10, LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1))))
-                .contentType(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andReturn().getResponse().getContentAsString();
-        CertificateController certificateController = objectMapper.readValue(response, CertificateController.class);
-        assertThat("response", certificateController.find("0"), is(instanceOf(expectedResponse.getClass())));
-    }
-
-
-    @Test
-    void deleteCertificate() throws Exception {
-        String response = mockMvc.perform(delete("/certificates/delete")
-                            .param("id", "1"))
-                            .andExpect(status().isOk())
-                            .andReturn().getResponse().getContentAsString();
-    }
-
-    public static String asJsonString(final Object obj) {
-        try {
-            return new ObjectMapper().writeValueAsString(obj);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-}