diff --git a/apps/java-api/pom.xml b/apps/java-api/pom.xml index 9099a0be..f9384ea8 100644 --- a/apps/java-api/pom.xml +++ b/apps/java-api/pom.xml @@ -18,6 +18,13 @@ + + + com.fasterxml.jackson.core + jackson-core + 2.13.2 + + io.micrometer diff --git a/apps/java-api/src/main/java/org/scoalaonline/api/model/Lecture.java b/apps/java-api/src/main/java/org/scoalaonline/api/model/Lecture.java index b62b59d2..adf262e9 100644 --- a/apps/java-api/src/main/java/org/scoalaonline/api/model/Lecture.java +++ b/apps/java-api/src/main/java/org/scoalaonline/api/model/Lecture.java @@ -4,15 +4,28 @@ import org.springframework.data.neo4j.core.schema.Id; import org.springframework.data.neo4j.core.schema.Node; import org.springframework.data.neo4j.core.schema.Property; +import org.springframework.data.neo4j.core.schema.Relationship; import org.springframework.data.neo4j.core.support.UUIDStringGenerator; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; import java.util.Objects; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + /** * Represents the Lecture node from the graph database. * It contains a title property. */ @Node("Lecture") +@Data +@NoArgsConstructor +@AllArgsConstructor +// @Builder public class Lecture { @Id @@ -21,12 +34,9 @@ public class Lecture { @Property("title") private String title; - //TODO: add @Relationships - - //region Constructors - public Lecture(){ - - } + + @Relationship(type = "HAS_MATERIAL", direction = Relationship.Direction.OUTGOING) + List lectureMaterials; public Lecture(String id) { this.id = id; @@ -35,41 +45,14 @@ public Lecture(String id) { public Lecture(String id, String title) { this.id = id; this.title = title; - } - //endregion - - //region Getters - public String getId() { - return id; - } - - public String getTitle() { - return title; - } - //endregion Getters - - //region Setters - public void setId(String id) { - this.id = id; - } - - public void setTitle(String title) { - this.title = title; - } - //endregion Setters + } - //region Equals & Hashcode - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Lecture lecture = (Lecture) o; - return Objects.equals(getId(), lecture.id) && Objects.equals(getTitle(), lecture.title); + public List getLectureMaterials() { + return new ArrayList<>(lectureMaterials); } - @Override - public int hashCode() { - return Objects.hash(getId(), getTitle()); + //List won't update + public void setLectureMaterials(List lectureMaterials) { + this.lectureMaterials = new ArrayList<>(lectureMaterials); } - //endregion } diff --git a/apps/java-api/src/main/java/org/scoalaonline/api/model/LectureMaterial.java b/apps/java-api/src/main/java/org/scoalaonline/api/model/LectureMaterial.java index d4bf09d2..48529241 100644 --- a/apps/java-api/src/main/java/org/scoalaonline/api/model/LectureMaterial.java +++ b/apps/java-api/src/main/java/org/scoalaonline/api/model/LectureMaterial.java @@ -22,7 +22,7 @@ public class LectureMaterial { private String document; //@Relationships - + //region Constructors public LectureMaterial(){} diff --git a/apps/java-api/src/main/java/org/scoalaonline/api/service/LectureService.java b/apps/java-api/src/main/java/org/scoalaonline/api/service/LectureService.java index 2c487c93..64ac452e 100644 --- a/apps/java-api/src/main/java/org/scoalaonline/api/service/LectureService.java +++ b/apps/java-api/src/main/java/org/scoalaonline/api/service/LectureService.java @@ -3,11 +3,15 @@ import org.scoalaonline.api.exception.lecture.LectureInvalidTitleException; import org.scoalaonline.api.exception.lecture.LectureNotFoundException; +import org.scoalaonline.api.exception.lectureMaterial.LectureMaterialNotFoundException; import org.scoalaonline.api.model.Lecture; +import org.scoalaonline.api.model.LectureMaterial; +import org.scoalaonline.api.repository.LectureMaterialRepository; import org.scoalaonline.api.repository.LectureRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -19,6 +23,8 @@ public class LectureService implements ServiceInterface { @Autowired LectureRepository lectureRepository; + @Autowired + LectureMaterialRepository lectureMaterialRepository; /** * Retrieves a list of all Lecture entries found in the DB. * @return the list of Lecture entries. @@ -56,6 +62,16 @@ public Lecture add(Lecture entry) throws LectureInvalidTitleException { lecture.setTitle(entry.getTitle()); else throw new LectureInvalidTitleException("Method add: Title field can't be invalid."); + lecture.setLectureMaterials(entry.getLectureMaterials()); + + List lectureMaterialsToSet = new ArrayList(); + for(LectureMaterial lectureMaterial : entry.getLectureMaterials()) { + LectureMaterial lectureToAdd = lectureMaterialRepository.findById(lectureMaterial.getId()).orElse(null); + if(lectureToAdd != null) + lectureMaterialsToSet.add(lectureToAdd); + } + if (!lectureMaterialsToSet.isEmpty()) + lecture.setLectureMaterials(lectureMaterialsToSet); return lectureRepository.save(lecture); } @@ -75,12 +91,17 @@ public Lecture update(String id, Lecture entry) throws LectureNotFoundException, Lecture lectureToUpdate = lectureRepository.findById(id).orElseThrow( () -> new LectureNotFoundException("Method update: Lecture not found.") ); - if (entry.getTitle() != null && !entry.getTitle().equals("")) { + if (entry.getTitle() != null && !entry.getTitle().equals("")) lectureToUpdate.setTitle(entry.getTitle()); - } else { - throw new LectureInvalidTitleException("Method update: Title field can't be invalid."); - } + List lectureMaterialsToSet = new ArrayList(); + for(LectureMaterial lectureMaterial : entry.getLectureMaterials()) { + LectureMaterial lectureToAdd = lectureMaterialRepository.findById(lectureMaterial.getId()).orElse(null); + if(lectureToAdd != null) + lectureMaterialsToSet.add(lectureToAdd); + } + if (!lectureMaterialsToSet.isEmpty()) + lectureToUpdate.setLectureMaterials(lectureMaterialsToSet); return lectureRepository.save(lectureToUpdate); }