From e7a1978d54db65949a5758320a72b3254443ec93 Mon Sep 17 00:00:00 2001
From: evilimkova <evilimkova@onpointserv.com>
Date: Sun, 30 Apr 2023 11:23:59 +0200
Subject: [PATCH] Adding CourseCertificateDto - do not pass students

---
 .../dto/certificate/CertificateCreateDto.java |  6 +--
 .../dto/course/CourseCertificateDto.java      | 46 +++++++++++++++++++
 .../CertificateControllerTests.java           |  4 +-
 .../CertificateFacadeTests.java               |  4 +-
 .../CertificateMapperTests.java               |  4 +-
 5 files changed, 55 insertions(+), 9 deletions(-)
 create mode 100644 application/model/src/main/java/org/fuseri/model/dto/course/CourseCertificateDto.java

diff --git a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateCreateDto.java b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateCreateDto.java
index cf2c9c98..e85e72ae 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateCreateDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/certificate/CertificateCreateDto.java
@@ -4,7 +4,7 @@ import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.fuseri.model.dto.course.CourseDto;
+import org.fuseri.model.dto.course.CourseCertificateDto;
 import org.fuseri.model.dto.user.UserDto;
 
 
@@ -20,9 +20,9 @@ public class CertificateCreateDto {
     private UserDto user;
     @NotNull
     @Valid
-    private CourseDto course;
+    private CourseCertificateDto course;
 
-    public CertificateCreateDto(UserDto user, CourseDto course) {
+    public CertificateCreateDto(UserDto user, CourseCertificateDto course) {
         this.user = user;
         this.course = course;
     }
diff --git a/application/model/src/main/java/org/fuseri/model/dto/course/CourseCertificateDto.java b/application/model/src/main/java/org/fuseri/model/dto/course/CourseCertificateDto.java
new file mode 100644
index 00000000..d3266456
--- /dev/null
+++ b/application/model/src/main/java/org/fuseri/model/dto/course/CourseCertificateDto.java
@@ -0,0 +1,46 @@
+package org.fuseri.model.dto.course;
+
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import org.fuseri.model.dto.common.DomainObjectDto;
+
+/**
+ * This class represents a Data Transfer Object (DTO) for Course entities.
+ * It is used for passing Course data to Certificate module.
+ * It extends the DomainObjectDto class and includes additional Course-specific fields.
+ */
+@Getter
+@Setter
+@EqualsAndHashCode(callSuper = false)
+public class CourseCertificateDto extends DomainObjectDto {
+
+    @NotBlank(message = "Course name is required")
+    @Size(max = 63, message = "Course name must not exceed {max} characters")
+    private String name;
+
+    @NotNull(message = "Lecture capacity cannot be null")
+    @Min(value = 1, message = "Lecture capacity must be at least 1")
+    private Integer capacity;
+
+    @NotNull(message = "Language type is required")
+    @Valid
+    private LanguageTypeDto language;
+
+    @NotNull(message = "Proficiency level is required")
+    @Valid
+    private ProficiencyLevelDto proficiency;
+
+    public CourseCertificateDto(String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) {
+        this.name = name;
+        this.capacity = capacity;
+        this.language = languageTypeDto;
+        this.proficiency = proficiencyLevelDto;
+    }
+
+}
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 7f9d7ba7..6733239b 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
@@ -3,7 +3,7 @@ package org.fuseri.modulecertificate;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.fuseri.model.dto.certificate.CertificateCreateDto;
 import org.fuseri.model.dto.certificate.CertificateSimpleDto;
-import org.fuseri.model.dto.course.CourseDto;
+import org.fuseri.model.dto.course.CourseCertificateDto;
 import org.fuseri.model.dto.course.LanguageTypeDto;
 import org.fuseri.model.dto.course.ProficiencyLevelDto;
 import org.fuseri.model.dto.user.AddressDto;
@@ -36,7 +36,7 @@ class CertificateControllerTests {
 
     private final UserDto USER = new UserDto("novakovat",
             "novakova@gamil.com", "Tereza", "Nováková", new AddressDto(), UserType.STUDENT);
-    private final CourseDto COURSE = new CourseDto("AJ1", 10,
+    private final CourseCertificateDto COURSE = new CourseCertificateDto("AJ1", 10,
             LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
     private final CertificateCreateDto certificateCreateDto = new CertificateCreateDto(USER, COURSE);
     private final CertificateSimpleDto certificateDto = new CertificateSimpleDto(0L, USER.getId(),
diff --git a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateFacadeTests.java b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateFacadeTests.java
index 7ef75612..99784c04 100644
--- a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateFacadeTests.java
+++ b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateFacadeTests.java
@@ -2,7 +2,7 @@ package org.fuseri.modulecertificate;
 
 import org.fuseri.model.dto.certificate.CertificateCreateDto;
 import org.fuseri.model.dto.certificate.CertificateSimpleDto;
-import org.fuseri.model.dto.course.CourseDto;
+import org.fuseri.model.dto.course.CourseCertificateDto;
 import org.fuseri.model.dto.course.LanguageTypeDto;
 import org.fuseri.model.dto.course.ProficiencyLevelDto;
 import org.fuseri.model.dto.user.AddressDto;
@@ -35,7 +35,7 @@ import static org.mockito.Mockito.when;
 final class CertificateFacadeTests {
     private final UserDto USER = new UserDto("novakovat",
             "novakova@gamil.com", "Tereza", "Nováková", new AddressDto(), UserType.STUDENT);
-    private final CourseDto COURSE = new CourseDto("AJ1", 10,
+    private final CourseCertificateDto COURSE = new CourseCertificateDto("AJ1", 10,
             LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
     private final CertificateCreateDto certificateCreateDto = new CertificateCreateDto(USER, COURSE);
     private final CertificateSimpleDto certificateDto = new CertificateSimpleDto(0L, USER.getId(),
diff --git a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateMapperTests.java b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateMapperTests.java
index b683de8a..7f66f907 100644
--- a/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateMapperTests.java
+++ b/application/module-certificate/src/test/java/org/fuseri/modulecertificate/CertificateMapperTests.java
@@ -2,7 +2,7 @@ package org.fuseri.modulecertificate;
 
 import org.fuseri.model.dto.certificate.CertificateCreateDto;
 import org.fuseri.model.dto.certificate.CertificateSimpleDto;
-import org.fuseri.model.dto.course.CourseDto;
+import org.fuseri.model.dto.course.CourseCertificateDto;
 import org.fuseri.model.dto.course.LanguageTypeDto;
 import org.fuseri.model.dto.course.ProficiencyLevelDto;
 import org.fuseri.model.dto.user.AddressDto;
@@ -27,7 +27,7 @@ final class CertificateMapperTests {
 
     private final UserDto USER = new UserDto("novakovat",
             "novakova@gamil.com", "Tereza", "Nováková", new AddressDto(), UserType.STUDENT);
-    private final CourseDto COURSE = new CourseDto("AJ1", 10,
+    private final CourseCertificateDto COURSE = new CourseCertificateDto("AJ1", 10,
             LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
     private final Instant instant = Instant.now();
     private final String fileName = "fileName";
-- 
GitLab