diff --git a/pom.xml b/pom.xml index 952a462..140c18b 100644 --- a/pom.xml +++ b/pom.xml @@ -37,9 +37,9 @@ UTF-8 ${project.build.directory}/test-results 1.0.0 - 3.19.2 + 3.25.4 org.jboss.logmanager.LogManager - 3.19.2 + 3.25.4 3.7.0.1746 @@ -58,7 +58,7 @@ org.apache.pdfbox pdfbox - 3.0.4 + 3.0.5 @@ -76,7 +76,7 @@ io.quarkiverse.minio quarkus-minio - 3.7.7 + 3.8.4 @@ -123,7 +123,7 @@ org.ow2.asm asm - 9.6 + 9.7.1 test @@ -171,7 +171,7 @@ com.google.code.gson gson - 2.9.1 + 2.13.1 org.mapstruct @@ -193,13 +193,13 @@ io.rest-assured rest-assured - 5.5.1 + 5.5.6 test org.assertj assertj-core - 3.25.1 + 3.27.4 test diff --git a/src/main/java/fr/istic/domain/Answer2HybridGradedComment.java b/src/main/java/fr/istic/domain/Answer2HybridGradedComment.java index 63d4dbd..1f4ca3d 100644 --- a/src/main/java/fr/istic/domain/Answer2HybridGradedComment.java +++ b/src/main/java/fr/istic/domain/Answer2HybridGradedComment.java @@ -4,6 +4,8 @@ import io.quarkus.hibernate.orm.panache.PanacheQuery; import io.quarkus.runtime.annotations.RegisterForReflection; import java.io.Serializable; +import java.util.Set; + import jakarta.json.bind.annotation.JsonbTransient; import jakarta.persistence.*; import org.hibernate.annotations.Cache; @@ -124,6 +126,12 @@ public static long deleteAllAnswerHybridGradedCommentByCommentId(long commentId public static long deleteAllAnswerHybridGradedCommentByAnswerId(long responseId){ return delete("studentResponse.id", responseId); } + public static long deleteAllByQIds( Set qids){ + return delete("delete from Answer2HybridGradedComment ar where ar.studentResponse.question.id in ?1", qids); + } + public static long deleteAllAnswerHybridGradedCommentByCommentIds(Set commentIds){ + return delete("delete from Answer2HybridGradedComment ar where ar.hybridcomments.id in ?1", commentIds); + } diff --git a/src/main/java/fr/istic/domain/Comments.java b/src/main/java/fr/istic/domain/Comments.java index 59e8ad7..3f1c4e6 100644 --- a/src/main/java/fr/istic/domain/Comments.java +++ b/src/main/java/fr/istic/domain/Comments.java @@ -2,6 +2,7 @@ import io.quarkus.hibernate.orm.panache.PanacheEntityBase; import jakarta.json.bind.annotation.JsonbTransient; import io.quarkus.hibernate.orm.panache.PanacheQuery; +import io.quarkus.logging.Log; import io.quarkus.runtime.annotations.RegisterForReflection; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; diff --git a/src/main/java/fr/istic/domain/HybridGradedComment.java b/src/main/java/fr/istic/domain/HybridGradedComment.java index 1ddf6b2..e75ee1d 100644 --- a/src/main/java/fr/istic/domain/HybridGradedComment.java +++ b/src/main/java/fr/istic/domain/HybridGradedComment.java @@ -2,6 +2,7 @@ import io.quarkus.hibernate.orm.panache.PanacheEntityBase; import io.quarkus.hibernate.orm.panache.PanacheQuery; +import io.quarkus.logging.Log; import io.quarkus.runtime.annotations.RegisterForReflection; import java.io.Serializable; import java.util.HashSet; @@ -47,7 +48,7 @@ public class HybridGradedComment extends PanacheEntityBase implements Serializab @JsonbTransient public Question question; - @OneToMany(mappedBy = "hybridcomments") + @OneToMany(mappedBy = "hybridcomments", cascade = CascadeType.REMOVE, orphanRemoval = true) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public Set valueAnswers = new HashSet<>(); @@ -133,6 +134,10 @@ public static HybridGradedComment persistOrUpdate(HybridGradedComment hybridGrad public static PanacheQuery findByQuestionId( long qid) { return find("select hybridGradedComment from HybridGradedComment hybridGradedComment where hybridGradedComment.question.id =?1", qid); } + public static PanacheQuery findByExamId( long qid) { + return find("select hybridGradedComment from HybridGradedComment hybridGradedComment where hybridGradedComment.question.exam.id =?1", qid); + } + public static PanacheQuery canAccess(long commentId, String login) { return find("select ex from HybridGradedComment ex join ex.question.exam.course.profs as u where ex.id =?1 and u.login =?2", commentId, login); diff --git a/src/main/java/fr/istic/service/CourseService.java b/src/main/java/fr/istic/service/CourseService.java index a82c2b3..69a64ab 100644 --- a/src/main/java/fr/istic/service/CourseService.java +++ b/src/main/java/fr/istic/service/CourseService.java @@ -25,7 +25,6 @@ import java.util.stream.Collectors; @ApplicationScoped -@Transactional public class CourseService { private final Logger log = LoggerFactory.getLogger(CourseService.class); @@ -50,12 +49,37 @@ public CourseDTO persistOrUpdate(CourseDTO courseDTO) { * * @param id the id of the entity. */ - @Transactional + protected void prepareDelete(Long id) { + Course.findByIdOptional(id).ifPresent(course -> { + List exams = new ArrayList<>(); + exams.addAll(Exam.findExambyCourseId(id).list()); + exams.forEach(exam-> this.examService.delete(exam.id)); + }); + } + + + + /** + * Delete the Course by id. + * + * @param id the id of the entity. + */ public void delete(Long id) { log.debug("Request to delete Course : {}", id); + this.prepareDelete(id); + this.deleteinternal(id); + } + + + /** + * Delete the Course by id. + * + * @param id the id of the entity. + */ + @Transactional + protected void deleteinternal(Long id) { Course.findByIdOptional(id).ifPresent(course -> { - Exam.findExambyCourseId(id).list().forEach(exam-> this.examService.delete(exam.id)); Course c = Course.findById(id); c.groups.forEach(g -> { g.students.forEach(st -> { diff --git a/src/main/java/fr/istic/service/ExamService.java b/src/main/java/fr/istic/service/ExamService.java index e0f95c4..8978cc3 100644 --- a/src/main/java/fr/istic/service/ExamService.java +++ b/src/main/java/fr/istic/service/ExamService.java @@ -14,6 +14,7 @@ import fr.istic.domain.FinalResult; import fr.istic.domain.GradedComment; import fr.istic.domain.HybridGradedComment; +import fr.istic.domain.Prediction; import fr.istic.domain.Question; import fr.istic.domain.QuestionType; import fr.istic.domain.Scan; @@ -76,20 +77,29 @@ public ExamDTO persistOrUpdate(ExamDTO examDTO) { * * @param id the id of the entity. */ - @Transactional public void delete(Long id) { log.debug("Request to delete Exam : {}", id); - Exam.findByIdOptional(id).ifPresent(exam -> { - StudentResponse.getAll4ExamIdEvenOrphan(id).list().forEach(sr -> { + this.prepareDeleteExam(id); + this.deleteExam(id); + + + } + + @Transactional + public void prepareDeleteExam(long id){ + Exam.findByIdOptional(id).ifPresent(exam -> { + ExamSheet.getAll4ExamIdEvenOrphan(id).list().forEach(sr -> sr.cleanBeforDelete()); + /*StudentResponse.getAll4ExamIdEvenOrphan(id).list().forEach(sr -> { sr.clearComments(); Answer2HybridGradedComment.deleteAllAnswerHybridGradedCommentByAnswerId(sr.id); }); - ExamSheet.getAll4ExamIdEvenOrphan(id).list().forEach(sr -> sr.cleanBeforDelete()); StudentResponse.getAll4ExamIdEvenOrphan(id).list().forEach(sr -> sr.delete()); FinalResult.getAll4ExamId(id).list().forEach(f -> f.delete()); + var s = HybridGradedComment.deleteByQIds(e.questions.stream().map(q -> q.id).collect(Collectors.toSet())); + log.error("to remove" + s);*/ + this.deleteQuestionCommentAndZone(id); Exam e = Exam.findById(id); - HybridGradedComment.deleteByQIds(e.questions.stream().map(q -> q.id).collect(Collectors.toSet())); if (e.scanfile != null && this.fichierS3Service.isObjectExist("scan/" + e.scanfile.id + ".pdf")) { try { @@ -109,11 +119,18 @@ public void delete(Long id) { e1.printStackTrace(); } } - exam.delete(); Comments.deleteCommentByExamId("" + id); - this.cacheService.deleteFile(id); }); + + } + + + @Transactional + protected void deleteExam(long id){ + var e = Exam.findById(id); + e.delete(); + } @Transactional @@ -169,11 +186,18 @@ protected void cleanExamZone(Set zoneids) { @Transactional protected void cleanQuestion(long examId, Set qids) { - StudentResponse.deleteByQIds(qids); - TextComment.deleteByQIds(qids); - GradedComment.deleteByQIds(qids); + var s = Answer2HybridGradedComment.deleteAllByQIds(qids); + Set cids = HybridGradedComment.findByExamId(examId).list().stream().map(ex -> ex.id).collect(Collectors.toSet()); + s = Answer2HybridGradedComment.deleteAllAnswerHybridGradedCommentByCommentIds(cids); + s= StudentResponse.deleteByQIds(qids); + s= TextComment.deleteByQIds(qids); + s= GradedComment.deleteByQIds(qids); + s= HybridGradedComment.deleteByQIds(qids); + s=Prediction.deleteByQIds(qids); + } + @Transactional + protected void removeQuestion(long examId, Set qids) { Question.deleteAllExamId(examId); - } @Transactional @@ -187,16 +211,16 @@ protected void cleanFinalResult(long id) { * * @param id the id of the entity. */ - @Transactional - public void deleteQuestionCommentAndZone(Long id) { - log.debug("Request to delete Exam : {}", id); - Set qids = Question.findQuestionbyExamId(id).list().stream().map(ex -> ex.id).collect(Collectors.toSet()); + public void deleteQuestionCommentAndZone(Long examid) { + log.debug("Request to delete Exam : {}", examid); + Set qids = Question.findQuestionbyExamId(examid).list().stream().map(ex -> ex.id).collect(Collectors.toSet()); - this.cleanFinalResult(id); - Set zonesids = this.cleanExamZone(id); + this.cleanFinalResult(examid); + Set zonesids = this.cleanExamZone(examid); this.cleanExamZone(zonesids); // this.cleanStudentRssponse(id); - this.cleanQuestion(id, qids); + this.cleanQuestion(examid, qids); + this.removeQuestion(examid, qids); } diff --git a/src/main/java/fr/istic/service/FichierS3Service.java b/src/main/java/fr/istic/service/FichierS3Service.java index dd62f4c..ec17d73 100644 --- a/src/main/java/fr/istic/service/FichierS3Service.java +++ b/src/main/java/fr/istic/service/FichierS3Service.java @@ -1,9 +1,6 @@ package fr.istic.service; import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c725062..a824d6a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -187,10 +187,14 @@ quarkus.native.additional-build-args=\ quarkus.http.limits.max-body-size=10G upload.directory= /tmp/files -quarkus.minio.url=http://localhost:9000 +quarkus.minio.host=localhost +quarkus.minio.port=9000 + quarkus.minio.access-key=admin quarkus.minio.secret-key=minioadmin quarkus.minio.secure=false +quarkus.minio.devservices.enabled=false + # quarkus.minio.allow-empty=false