From 60fb713b442a1279dff55992bd31c895b274c19e Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 12:37:22 +0100 Subject: [PATCH 01/19] Start coding entity, not done --- .../codeexample/project/ProjectEntity.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 4d746ca..7793c84 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -1,4 +1,26 @@ package demo.codeexample.project; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor public class ProjectEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Setter(AccessLevel.NONE) + Long id; + + String title; + + } From 045c5e367422ed34c7e17abeee310ea867140df9 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:11:55 +0100 Subject: [PATCH 02/19] Create ProjectRepository --- .../java/demo/codeexample/project/ProjectRepository.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectRepository.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java new file mode 100644 index 0000000..44982f6 --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -0,0 +1,6 @@ +package demo.codeexample.project; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectRepository extends JpaRepository { +} From 439eb1040c2faaaf6f598d4aa93d0bf3cc32488b Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:19:55 +0100 Subject: [PATCH 03/19] Create ProjectService and add getAll() + getFromTitle. Returns ProjectEntity but must change to projectDTO when that is implemented --- .../project/ProjectRepository.java | 3 +++ .../codeexample/project/ProjectService.java | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectService.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java index 44982f6..de754e8 100644 --- a/src/main/java/demo/codeexample/project/ProjectRepository.java +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -2,5 +2,8 @@ import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface ProjectRepository extends JpaRepository { + Optional findByTitle(String title); } diff --git a/src/main/java/demo/codeexample/project/ProjectService.java b/src/main/java/demo/codeexample/project/ProjectService.java new file mode 100644 index 0000000..24899fe --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectService.java @@ -0,0 +1,21 @@ +package demo.codeexample.project; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class ProjectService { + + private final ProjectRepository repository; + + public List getAllProjects(){return repository.findAll();} + + public Optional getProjectFromTitle(String title){ + return repository.findByTitle(title); + } + +} From 73713c01c04c0e032e61c60c55f42e2d994ed409 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 12:37:22 +0100 Subject: [PATCH 04/19] Start coding entity, not done --- .../codeexample/project/ProjectEntity.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 4d746ca..7793c84 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -1,4 +1,26 @@ package demo.codeexample.project; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor public class ProjectEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Setter(AccessLevel.NONE) + Long id; + + String title; + + } From ea1d12e0f27959ca4ae2f72aea7d855409e232b5 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:11:55 +0100 Subject: [PATCH 05/19] Create ProjectRepository --- .../java/demo/codeexample/project/ProjectRepository.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectRepository.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java new file mode 100644 index 0000000..44982f6 --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -0,0 +1,6 @@ +package demo.codeexample.project; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectRepository extends JpaRepository { +} From 4f61a3a89a203e15159cf41ad9c42d86dc11df00 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:19:55 +0100 Subject: [PATCH 06/19] Create ProjectService and add getAll() + getFromTitle. Returns ProjectEntity but must change to projectDTO when that is implemented --- .../project/ProjectRepository.java | 3 +++ .../codeexample/project/ProjectService.java | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectService.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java index 44982f6..de754e8 100644 --- a/src/main/java/demo/codeexample/project/ProjectRepository.java +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -2,5 +2,8 @@ import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface ProjectRepository extends JpaRepository { + Optional findByTitle(String title); } diff --git a/src/main/java/demo/codeexample/project/ProjectService.java b/src/main/java/demo/codeexample/project/ProjectService.java new file mode 100644 index 0000000..24899fe --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectService.java @@ -0,0 +1,21 @@ +package demo.codeexample.project; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class ProjectService { + + private final ProjectRepository repository; + + public List getAllProjects(){return repository.findAll();} + + public Optional getProjectFromTitle(String title){ + return repository.findByTitle(title); + } + +} From 4420205a34556addbc37a555f4dfbd2fa1a227df Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sun, 29 Mar 2026 17:36:55 +0200 Subject: [PATCH 07/19] Add 2 DTO (one for existing and one for creating). Also add variable "releaseDate" --- .../codeexample/project/CreateProjectDto.java | 28 ++++++++++++++++ .../demo/codeexample/project/ProjectDto.java | 24 ++++++++++++++ .../codeexample/project/ProjectEntity.java | 33 ++++++++++++++----- 3 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 src/main/java/demo/codeexample/project/CreateProjectDto.java create mode 100644 src/main/java/demo/codeexample/project/ProjectDto.java diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java new file mode 100644 index 0000000..8d7b515 --- /dev/null +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -0,0 +1,28 @@ +package demo.codeexample.project; + +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CreateProjectDto { + @NotNull(message = "You must choose a title for the project") + String title; + + LocalDate releaseDate; + + @NotNull(message = "You must choose a category") + Category category; + + @NotNull(message = "You must choose a genre") + Genre genre; + + String imageURL; +} diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java new file mode 100644 index 0000000..dfe8837 --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -0,0 +1,24 @@ +package demo.codeexample.project; + +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectDto { + Long id; + String title; + LocalDate releaseDate; + Category category; + Genre genre; + String imageURL; +} diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 7793c84..b2bd5fd 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -1,13 +1,12 @@ package demo.codeexample.project; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import java.time.LocalDate; @Entity @Getter @@ -20,7 +19,25 @@ public class ProjectEntity { @Setter(AccessLevel.NONE) Long id; + @NotNull String title; + LocalDate releaseDate; + + @Enumerated(EnumType.STRING) + Category category; + + @Enumerated(EnumType.STRING) + Genre genre; + + String imageURL; + + public ProjectEntity(String title, LocalDate releaseDate, Category category, Genre genre, String imageURL){ + this.title = title; + this.releaseDate = releaseDate; + this.category = category; + this.genre = genre; + this.imageURL = imageURL; + } } From 1c80f750c8199185ca07ffcb65292f4163d74330 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 11:03:15 +0200 Subject: [PATCH 08/19] Refactor --- .../codeexample/project/CreateProjectDto.java | 5 +++-- .../demo/codeexample/project/ProjectDto.java | 7 ------- .../demo/codeexample/project/ProjectEntity.java | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index 8d7b515..24024c3 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -2,20 +2,21 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; +import jakarta.validation.constraints.Future; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.time.LocalDate; @Data -@AllArgsConstructor -@NoArgsConstructor public class CreateProjectDto { @NotNull(message = "You must choose a title for the project") String title; + @Future(message = "Movie can't be released in past") LocalDate releaseDate; @NotNull(message = "You must choose a category") diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java index dfe8837..6e84f93 100644 --- a/src/main/java/demo/codeexample/project/ProjectDto.java +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -2,18 +2,11 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.validation.constraints.NotNull; import lombok.*; import java.time.LocalDate; @Data -@AllArgsConstructor -@NoArgsConstructor public class ProjectDto { Long id; String title; diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index b2bd5fd..a062a29 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -5,8 +5,10 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; +import org.hibernate.proxy.HibernateProxy; import java.time.LocalDate; +import java.util.Objects; @Entity @Getter @@ -40,4 +42,19 @@ public ProjectEntity(String title, LocalDate releaseDate, Category category, Gen this.imageURL = imageURL; } + @Override + public final boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); + Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); + if (thisEffectiveClass != oEffectiveClass) return false; + ProjectEntity that = (ProjectEntity) o; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + } } From 53d7b72d5f3d82c93c20db00ac2c7b15321bd393 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 11:52:39 +0200 Subject: [PATCH 09/19] Refactor --- .../demo/codeexample/project/CreateProjectDto.java | 10 +++++++--- .../java/demo/codeexample/project/ProjectDto.java | 1 + .../java/demo/codeexample/project/ProjectEntity.java | 11 ++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index 24024c3..c16e75e 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -3,6 +3,7 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; import jakarta.validation.constraints.Future; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; @@ -13,16 +14,19 @@ @Data public class CreateProjectDto { - @NotNull(message = "You must choose a title for the project") + @NotBlank(message = "Choose a title for the project!") String title; @Future(message = "Movie can't be released in past") LocalDate releaseDate; - @NotNull(message = "You must choose a category") + @NotBlank(message = "Who is the producer?") + User producer; + + @NotBlank(message = "You must choose a category!") Category category; - @NotNull(message = "You must choose a genre") + @NotBlank(message = "You must choose a genre!") Genre genre; String imageURL; diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java index 6e84f93..19751a5 100644 --- a/src/main/java/demo/codeexample/project/ProjectDto.java +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -11,6 +11,7 @@ public class ProjectDto { Long id; String title; LocalDate releaseDate; + User producer; Category category; Genre genre; String imageURL; diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index a062a29..5177632 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -3,7 +3,6 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; import lombok.*; import org.hibernate.proxy.HibernateProxy; @@ -14,6 +13,7 @@ @Getter @Setter @NoArgsConstructor +@Table(name = "project") public class ProjectEntity { @Id @@ -21,11 +21,14 @@ public class ProjectEntity { @Setter(AccessLevel.NONE) Long id; - @NotNull + @Column(nullable = false) String title; LocalDate releaseDate; + @Column(nullable = false) + User producer; + @Enumerated(EnumType.STRING) Category category; @@ -34,7 +37,7 @@ public class ProjectEntity { String imageURL; - public ProjectEntity(String title, LocalDate releaseDate, Category category, Genre genre, String imageURL){ + public ProjectEntity(String title, LocalDate releaseDate, User producer, Category category, Genre genre, String imageURL){ this.title = title; this.releaseDate = releaseDate; this.category = category; @@ -57,4 +60,6 @@ public final boolean equals(Object o) { public final int hashCode() { return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); } + + } From 59f15ac3a68fcf4c0b1345ac68fe96a53b943b28 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 12:37:22 +0100 Subject: [PATCH 10/19] Start coding entity, not done --- .../codeexample/project/ProjectEntity.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 4d746ca..7793c84 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -1,4 +1,26 @@ package demo.codeexample.project; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor public class ProjectEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Setter(AccessLevel.NONE) + Long id; + + String title; + + } From dd4d52f4a98d2a9f9207174cdcf8d07e30bd45e2 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:11:55 +0100 Subject: [PATCH 11/19] Create ProjectRepository --- .../java/demo/codeexample/project/ProjectRepository.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectRepository.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java new file mode 100644 index 0000000..44982f6 --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -0,0 +1,6 @@ +package demo.codeexample.project; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectRepository extends JpaRepository { +} From ff72ce5356c370e65667648783212b4fe02b0955 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sat, 28 Mar 2026 13:19:55 +0100 Subject: [PATCH 12/19] Create ProjectService and add getAll() + getFromTitle. Returns ProjectEntity but must change to projectDTO when that is implemented --- .../project/ProjectRepository.java | 3 +++ .../codeexample/project/ProjectService.java | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/demo/codeexample/project/ProjectService.java diff --git a/src/main/java/demo/codeexample/project/ProjectRepository.java b/src/main/java/demo/codeexample/project/ProjectRepository.java index 44982f6..de754e8 100644 --- a/src/main/java/demo/codeexample/project/ProjectRepository.java +++ b/src/main/java/demo/codeexample/project/ProjectRepository.java @@ -2,5 +2,8 @@ import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface ProjectRepository extends JpaRepository { + Optional findByTitle(String title); } diff --git a/src/main/java/demo/codeexample/project/ProjectService.java b/src/main/java/demo/codeexample/project/ProjectService.java new file mode 100644 index 0000000..24899fe --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectService.java @@ -0,0 +1,21 @@ +package demo.codeexample.project; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class ProjectService { + + private final ProjectRepository repository; + + public List getAllProjects(){return repository.findAll();} + + public Optional getProjectFromTitle(String title){ + return repository.findByTitle(title); + } + +} From 37bbfd3c3a095aa53da3cbb38cd262abadf19fdb Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Sun, 29 Mar 2026 17:36:55 +0200 Subject: [PATCH 13/19] Add 2 DTO (one for existing and one for creating). Also add variable "releaseDate" --- .../codeexample/project/CreateProjectDto.java | 28 ++++++++++++++++ .../demo/codeexample/project/ProjectDto.java | 24 ++++++++++++++ .../codeexample/project/ProjectEntity.java | 33 ++++++++++++++----- 3 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 src/main/java/demo/codeexample/project/CreateProjectDto.java create mode 100644 src/main/java/demo/codeexample/project/ProjectDto.java diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java new file mode 100644 index 0000000..8d7b515 --- /dev/null +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -0,0 +1,28 @@ +package demo.codeexample.project; + +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CreateProjectDto { + @NotNull(message = "You must choose a title for the project") + String title; + + LocalDate releaseDate; + + @NotNull(message = "You must choose a category") + Category category; + + @NotNull(message = "You must choose a genre") + Genre genre; + + String imageURL; +} diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java new file mode 100644 index 0000000..dfe8837 --- /dev/null +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -0,0 +1,24 @@ +package demo.codeexample.project; + +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectDto { + Long id; + String title; + LocalDate releaseDate; + Category category; + Genre genre; + String imageURL; +} diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 7793c84..b2bd5fd 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -1,13 +1,12 @@ package demo.codeexample.project; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import demo.codeexample.enums.Category; +import demo.codeexample.enums.Genre; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import java.time.LocalDate; @Entity @Getter @@ -20,7 +19,25 @@ public class ProjectEntity { @Setter(AccessLevel.NONE) Long id; + @NotNull String title; + LocalDate releaseDate; + + @Enumerated(EnumType.STRING) + Category category; + + @Enumerated(EnumType.STRING) + Genre genre; + + String imageURL; + + public ProjectEntity(String title, LocalDate releaseDate, Category category, Genre genre, String imageURL){ + this.title = title; + this.releaseDate = releaseDate; + this.category = category; + this.genre = genre; + this.imageURL = imageURL; + } } From 090b396cfb206b2f302e782116c63dff1858929a Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 11:03:15 +0200 Subject: [PATCH 14/19] Refactor --- .../codeexample/project/CreateProjectDto.java | 5 +++-- .../demo/codeexample/project/ProjectDto.java | 7 ------- .../demo/codeexample/project/ProjectEntity.java | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index 8d7b515..24024c3 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -2,20 +2,21 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; +import jakarta.validation.constraints.Future; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.time.LocalDate; @Data -@AllArgsConstructor -@NoArgsConstructor public class CreateProjectDto { @NotNull(message = "You must choose a title for the project") String title; + @Future(message = "Movie can't be released in past") LocalDate releaseDate; @NotNull(message = "You must choose a category") diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java index dfe8837..6e84f93 100644 --- a/src/main/java/demo/codeexample/project/ProjectDto.java +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -2,18 +2,11 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.validation.constraints.NotNull; import lombok.*; import java.time.LocalDate; @Data -@AllArgsConstructor -@NoArgsConstructor public class ProjectDto { Long id; String title; diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index b2bd5fd..a062a29 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -5,8 +5,10 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; +import org.hibernate.proxy.HibernateProxy; import java.time.LocalDate; +import java.util.Objects; @Entity @Getter @@ -40,4 +42,19 @@ public ProjectEntity(String title, LocalDate releaseDate, Category category, Gen this.imageURL = imageURL; } + @Override + public final boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); + Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); + if (thisEffectiveClass != oEffectiveClass) return false; + ProjectEntity that = (ProjectEntity) o; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + } } From 88ab131f7550ab3c28b6c268dfc6c46523d11735 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 11:52:39 +0200 Subject: [PATCH 15/19] Refactor --- .../demo/codeexample/project/CreateProjectDto.java | 10 +++++++--- .../java/demo/codeexample/project/ProjectDto.java | 1 + .../java/demo/codeexample/project/ProjectEntity.java | 11 ++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index 24024c3..c16e75e 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -3,6 +3,7 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; import jakarta.validation.constraints.Future; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; @@ -13,16 +14,19 @@ @Data public class CreateProjectDto { - @NotNull(message = "You must choose a title for the project") + @NotBlank(message = "Choose a title for the project!") String title; @Future(message = "Movie can't be released in past") LocalDate releaseDate; - @NotNull(message = "You must choose a category") + @NotBlank(message = "Who is the producer?") + User producer; + + @NotBlank(message = "You must choose a category!") Category category; - @NotNull(message = "You must choose a genre") + @NotBlank(message = "You must choose a genre!") Genre genre; String imageURL; diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java index 6e84f93..19751a5 100644 --- a/src/main/java/demo/codeexample/project/ProjectDto.java +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -11,6 +11,7 @@ public class ProjectDto { Long id; String title; LocalDate releaseDate; + User producer; Category category; Genre genre; String imageURL; diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index a062a29..5177632 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -3,7 +3,6 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; import lombok.*; import org.hibernate.proxy.HibernateProxy; @@ -14,6 +13,7 @@ @Getter @Setter @NoArgsConstructor +@Table(name = "project") public class ProjectEntity { @Id @@ -21,11 +21,14 @@ public class ProjectEntity { @Setter(AccessLevel.NONE) Long id; - @NotNull + @Column(nullable = false) String title; LocalDate releaseDate; + @Column(nullable = false) + User producer; + @Enumerated(EnumType.STRING) Category category; @@ -34,7 +37,7 @@ public class ProjectEntity { String imageURL; - public ProjectEntity(String title, LocalDate releaseDate, Category category, Genre genre, String imageURL){ + public ProjectEntity(String title, LocalDate releaseDate, User producer, Category category, Genre genre, String imageURL){ this.title = title; this.releaseDate = releaseDate; this.category = category; @@ -57,4 +60,6 @@ public final boolean equals(Object o) { public final int hashCode() { return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); } + + } From 760ad4be5743e305424c06bb19d6ab4065c74d76 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 13:51:14 +0200 Subject: [PATCH 16/19] Refactor --- .../codeexample/project/CreateProjectDto.java | 13 ++++++------ .../demo/codeexample/project/ProjectDto.java | 15 +++++++------- .../codeexample/project/ProjectEntity.java | 20 +++++++++++-------- .../codeexample/project/ProjectService.java | 16 ++++++++++++--- .../demo/codeexample/task/TaskEntity.java | 3 +++ 5 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index c16e75e..dad27de 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -4,24 +4,23 @@ import demo.codeexample.enums.Genre; import jakarta.validation.constraints.Future; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; + import java.time.LocalDate; @Data public class CreateProjectDto { @NotBlank(message = "Choose a title for the project!") - String title; + private String title; @Future(message = "Movie can't be released in past") - LocalDate releaseDate; + private LocalDate releaseDate; + + //private List tasks; @NotBlank(message = "Who is the producer?") - User producer; + private Long producerId; @NotBlank(message = "You must choose a category!") Category category; diff --git a/src/main/java/demo/codeexample/project/ProjectDto.java b/src/main/java/demo/codeexample/project/ProjectDto.java index 19751a5..40adbd2 100644 --- a/src/main/java/demo/codeexample/project/ProjectDto.java +++ b/src/main/java/demo/codeexample/project/ProjectDto.java @@ -8,11 +8,12 @@ @Data public class ProjectDto { - Long id; - String title; - LocalDate releaseDate; - User producer; - Category category; - Genre genre; - String imageURL; + private Long id; + private String title; + private LocalDate releaseDate; + //private Set taskList; + private Long producerId; + private Category category; + private Genre genre; + private String imageURL; } diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 5177632..702afa9 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -19,27 +19,31 @@ public class ProjectEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Setter(AccessLevel.NONE) - Long id; + private Long id; @Column(nullable = false) - String title; + private String title; - LocalDate releaseDate; + private LocalDate releaseDate; + +// @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) +// private Set taskList = new HashSet<>(); @Column(nullable = false) - User producer; + private Long producerId; @Enumerated(EnumType.STRING) - Category category; + private Category category; @Enumerated(EnumType.STRING) - Genre genre; + private Genre genre; - String imageURL; + private String imageURL; - public ProjectEntity(String title, LocalDate releaseDate, User producer, Category category, Genre genre, String imageURL){ + public ProjectEntity(String title, LocalDate releaseDate, Long producerId, Category category, Genre genre, String imageURL){ this.title = title; this.releaseDate = releaseDate; + this.producerId = producerId; this.category = category; this.genre = genre; this.imageURL = imageURL; diff --git a/src/main/java/demo/codeexample/project/ProjectService.java b/src/main/java/demo/codeexample/project/ProjectService.java index 24899fe..62b3761 100644 --- a/src/main/java/demo/codeexample/project/ProjectService.java +++ b/src/main/java/demo/codeexample/project/ProjectService.java @@ -1,7 +1,9 @@ package demo.codeexample.project; import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; +import org.springframework.web.servlet.HandlerMapping; import java.util.List; import java.util.Optional; @@ -11,11 +13,19 @@ public class ProjectService { private final ProjectRepository repository; + private final ModelMapper modelMapper; - public List getAllProjects(){return repository.findAll();} + public List getAllProjects(){ + return repository.findAll().stream() + .map(project -> modelMapper.map(project, ProjectDto.class)) + .toList(); + } - public Optional getProjectFromTitle(String title){ - return repository.findByTitle(title); + public Optional getProjectFromTitle(String title){ + return repository.findByTitle(title) + .map(project -> modelMapper.map(project, ProjectDto.class)); } + + } diff --git a/src/main/java/demo/codeexample/task/TaskEntity.java b/src/main/java/demo/codeexample/task/TaskEntity.java index 31c7021..217ed15 100644 --- a/src/main/java/demo/codeexample/task/TaskEntity.java +++ b/src/main/java/demo/codeexample/task/TaskEntity.java @@ -1,4 +1,7 @@ package demo.codeexample.task; +import jakarta.persistence.JoinColumn; + public class TaskEntity { + } From fcdc5dc265d97618c3d4c55e14a1e8a0a4d14aff Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 13:54:46 +0200 Subject: [PATCH 17/19] Refactor --- src/main/java/demo/codeexample/project/CreateProjectDto.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/demo/codeexample/project/CreateProjectDto.java b/src/main/java/demo/codeexample/project/CreateProjectDto.java index dad27de..8cc1bf0 100644 --- a/src/main/java/demo/codeexample/project/CreateProjectDto.java +++ b/src/main/java/demo/codeexample/project/CreateProjectDto.java @@ -4,6 +4,7 @@ import demo.codeexample.enums.Genre; import jakarta.validation.constraints.Future; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -22,10 +23,10 @@ public class CreateProjectDto { @NotBlank(message = "Who is the producer?") private Long producerId; - @NotBlank(message = "You must choose a category!") + @NotNull(message = "You must choose a category!") Category category; - @NotBlank(message = "You must choose a genre!") + @NotNull(message = "You must choose a genre!") Genre genre; String imageURL; From c9b3f5297744895231427bc86c0e15ed267ad25f Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 13:59:37 +0200 Subject: [PATCH 18/19] Refactor --- src/main/java/demo/codeexample/task/TaskEntity.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 src/main/java/demo/codeexample/task/TaskEntity.java diff --git a/src/main/java/demo/codeexample/task/TaskEntity.java b/src/main/java/demo/codeexample/task/TaskEntity.java deleted file mode 100644 index 217ed15..0000000 --- a/src/main/java/demo/codeexample/task/TaskEntity.java +++ /dev/null @@ -1,7 +0,0 @@ -package demo.codeexample.task; - -import jakarta.persistence.JoinColumn; - -public class TaskEntity { - -} From 9fb96f65e5154e22af9c5c8c6aba2dd98533ce32 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Mon, 30 Mar 2026 14:05:51 +0200 Subject: [PATCH 19/19] Refactor --- src/main/java/demo/codeexample/project/ProjectEntity.java | 7 +++++-- src/main/java/demo/codeexample/task/TaskEntity.java | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/demo/codeexample/project/ProjectEntity.java b/src/main/java/demo/codeexample/project/ProjectEntity.java index 702afa9..5819745 100644 --- a/src/main/java/demo/codeexample/project/ProjectEntity.java +++ b/src/main/java/demo/codeexample/project/ProjectEntity.java @@ -2,12 +2,15 @@ import demo.codeexample.enums.Category; import demo.codeexample.enums.Genre; +import demo.codeexample.task.TaskEntity; import jakarta.persistence.*; import lombok.*; import org.hibernate.proxy.HibernateProxy; import java.time.LocalDate; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; @Entity @Getter @@ -26,8 +29,8 @@ public class ProjectEntity { private LocalDate releaseDate; -// @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) -// private Set taskList = new HashSet<>(); + @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) + private Set taskList = new HashSet<>(); @Column(nullable = false) private Long producerId; diff --git a/src/main/java/demo/codeexample/task/TaskEntity.java b/src/main/java/demo/codeexample/task/TaskEntity.java index 12ca8f0..8c0d1e2 100644 --- a/src/main/java/demo/codeexample/task/TaskEntity.java +++ b/src/main/java/demo/codeexample/task/TaskEntity.java @@ -31,9 +31,9 @@ public class TaskEntity { private LocalDateTime deadline; -// @ManyToOne -// @JoinColumn (name = "projectId") -// ProjectEntity project; + @ManyToOne + @JoinColumn (name = "project_id") + ProjectEntity project; @ManyToOne @JoinColumn(name = "userId")