From 5d4e9c74ccb3f47386c50e74f2683f31b7b1a65d Mon Sep 17 00:00:00 2001 From: VIHANGAGIT Date: Wed, 4 Dec 2024 03:09:47 +0530 Subject: [PATCH 1/2] Session check API modification --- .../exam_management/CandidateExamAnswerResponse.java | 6 ++++++ .../Testify_Backend/service/ExamManagementServiceImpl.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/com/testify/Testify_Backend/responses/exam_management/CandidateExamAnswerResponse.java b/src/main/java/com/testify/Testify_Backend/responses/exam_management/CandidateExamAnswerResponse.java index 4969151..a136378 100644 --- a/src/main/java/com/testify/Testify_Backend/responses/exam_management/CandidateExamAnswerResponse.java +++ b/src/main/java/com/testify/Testify_Backend/responses/exam_management/CandidateExamAnswerResponse.java @@ -1,14 +1,20 @@ package com.testify.Testify_Backend.responses.exam_management; +import com.testify.Testify_Backend.enums.ExamType; import lombok.AllArgsConstructor; import lombok.Data; +import java.time.LocalDateTime; import java.util.List; @Data @AllArgsConstructor public class CandidateExamAnswerResponse { private Long examId; + private String examName; + private ExamType examType; + private Long sessionId; + private LocalDateTime endTime; private List answers; @Data diff --git a/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java b/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java index b738ab6..c5c9985 100644 --- a/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java +++ b/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java @@ -1128,6 +1128,10 @@ public CandidateExamAnswerResponse getCandidateAnswers(Long candidateId) { return new CandidateExamAnswerResponse( session.getExam().getId(), + session.getExam().getTitle(), + session.getExam().getExamType(), + session.getId(), + session.getEndTime(), answerDetails ); } From b67f33d6e11ffd3ab464fe6d1cdd1b7047556a42 Mon Sep 17 00:00:00 2001 From: VIHANGAGIT Date: Wed, 4 Dec 2024 05:48:53 +0530 Subject: [PATCH 2/2] Grading fetch candidate --- .../controller/CandidateController.java | 6 ++++ .../ExamCandidateGradeRepository.java | 4 +++ .../CandidateExamDetailsDTO.java | 13 +++++++ .../service/CandidateService.java | 2 ++ .../service/CandidateServiceImpl.java | 35 ++++++++++++++++--- .../service/ExamManagementServiceImpl.java | 2 ++ .../service/GradingServiceImpl.java | 5 +++ 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/testify/Testify_Backend/requests/exam_management/CandidateExamDetailsDTO.java diff --git a/src/main/java/com/testify/Testify_Backend/controller/CandidateController.java b/src/main/java/com/testify/Testify_Backend/controller/CandidateController.java index 43fdde0..0fec4a3 100644 --- a/src/main/java/com/testify/Testify_Backend/controller/CandidateController.java +++ b/src/main/java/com/testify/Testify_Backend/controller/CandidateController.java @@ -4,6 +4,7 @@ import com.testify.Testify_Backend.model.Organization; import com.testify.Testify_Backend.repository.CandidateRepository; import com.testify.Testify_Backend.requests.exam_management.CandidateExamAnswerRequest; +import com.testify.Testify_Backend.requests.exam_management.CandidateExamDetailsDTO; import com.testify.Testify_Backend.responses.GenericResponse; import com.testify.Testify_Backend.responses.candidate_management.CandidateExam; import com.testify.Testify_Backend.responses.candidate_management.CandidateResponse; @@ -104,4 +105,9 @@ public CandidateExamAnswerResponse getCandidateAnswers(@RequestBody CandidateExa return examManagementService.getCandidateAnswers(request.getCandidateId()); } + @GetMapping("/{id}/exam-details") + public List getCandidateExamDetails(@PathVariable String id) { + return candidateService.getCandidateExamDetails(id); + } + } diff --git a/src/main/java/com/testify/Testify_Backend/repository/ExamCandidateGradeRepository.java b/src/main/java/com/testify/Testify_Backend/repository/ExamCandidateGradeRepository.java index 4190c7c..3351427 100644 --- a/src/main/java/com/testify/Testify_Backend/repository/ExamCandidateGradeRepository.java +++ b/src/main/java/com/testify/Testify_Backend/repository/ExamCandidateGradeRepository.java @@ -4,6 +4,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; + @Repository public interface ExamCandidateGradeRepository extends JpaRepository { + List findByCandidateID(String candidateId); } \ No newline at end of file diff --git a/src/main/java/com/testify/Testify_Backend/requests/exam_management/CandidateExamDetailsDTO.java b/src/main/java/com/testify/Testify_Backend/requests/exam_management/CandidateExamDetailsDTO.java new file mode 100644 index 0000000..f20cf12 --- /dev/null +++ b/src/main/java/com/testify/Testify_Backend/requests/exam_management/CandidateExamDetailsDTO.java @@ -0,0 +1,13 @@ +package com.testify.Testify_Backend.requests.exam_management; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class CandidateExamDetailsDTO { + private String grade; + private String score; + private String examName; + private String organizationName; +} diff --git a/src/main/java/com/testify/Testify_Backend/service/CandidateService.java b/src/main/java/com/testify/Testify_Backend/service/CandidateService.java index 840874e..95a1000 100644 --- a/src/main/java/com/testify/Testify_Backend/service/CandidateService.java +++ b/src/main/java/com/testify/Testify_Backend/service/CandidateService.java @@ -2,6 +2,7 @@ import com.testify.Testify_Backend.model.Candidate; import com.testify.Testify_Backend.model.Organization; +import com.testify.Testify_Backend.requests.exam_management.CandidateExamDetailsDTO; import com.testify.Testify_Backend.responses.candidate_management.CandidateExam; import com.testify.Testify_Backend.responses.candidate_management.CandidateResponse; import com.testify.Testify_Backend.responses.candidate_management.CandidateProfile; @@ -18,4 +19,5 @@ public interface CandidateService { public CandidateProfile getCandidateProfile(); public String updateCandidateProfile(Candidate candidate); public String deleteCandidateProfile(long id); + List getCandidateExamDetails(String candidateId); } diff --git a/src/main/java/com/testify/Testify_Backend/service/CandidateServiceImpl.java b/src/main/java/com/testify/Testify_Backend/service/CandidateServiceImpl.java index fa133d7..7f2eab5 100644 --- a/src/main/java/com/testify/Testify_Backend/service/CandidateServiceImpl.java +++ b/src/main/java/com/testify/Testify_Backend/service/CandidateServiceImpl.java @@ -1,11 +1,9 @@ package com.testify.Testify_Backend.service; import com.testify.Testify_Backend.enums.ExamStatus; -import com.testify.Testify_Backend.model.Candidate; -import com.testify.Testify_Backend.model.CandidateExamSession; -import com.testify.Testify_Backend.model.Exam; -import com.testify.Testify_Backend.model.Organization; +import com.testify.Testify_Backend.model.*; import com.testify.Testify_Backend.repository.*; +import com.testify.Testify_Backend.requests.exam_management.CandidateExamDetailsDTO; import com.testify.Testify_Backend.responses.GenericResponse; import com.testify.Testify_Backend.responses.candidate_management.CandidateExam; import com.testify.Testify_Backend.responses.candidate_management.CandidateResponse; @@ -56,6 +54,8 @@ public class CandidateServiceImpl implements CandidateService { @Autowired private final ExamSessionRepository examSessionRepository; + private final ExamCandidateGradeRepository examCandidateGradeRepository; + @Override public List getCandidateExams(String status) { String currentUserEmail = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -233,4 +233,31 @@ public String deleteCandidateProfile(long id){ } } + @Override + @Transactional + public List getCandidateExamDetails(String candidateId) { + // Retrieve all grade details for the candidate + List grades = examCandidateGradeRepository.findByCandidateID(candidateId); + + // Map the results to CandidateExamDetailsDTO + return grades.stream().map(candidateGrade -> { + Optional examOptional = examRepository.findById(Long.valueOf(candidateGrade.getExamID())); + + if (examOptional.isPresent()) { + Exam exam = examOptional.get(); + Organization organization = exam.getOrganization(); + + // Return the data in the DTO format + return new CandidateExamDetailsDTO( + candidateGrade.getGrade(), + candidateGrade.getScore(), + exam.getTitle(), + organization != null ? organization.getFirstName() : "No Organization" + ); + } + + return null; // Or handle cases where the exam is not found + }).collect(Collectors.toList()); + } + } \ No newline at end of file diff --git a/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java b/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java index c5c9985..55e662a 100644 --- a/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java +++ b/src/main/java/com/testify/Testify_Backend/service/ExamManagementServiceImpl.java @@ -1136,6 +1136,8 @@ public CandidateExamAnswerResponse getCandidateAnswers(Long candidateId) { ); } + + public ResponseEntity addProctorsToExam(long examId, List proctorEmails) { Optional optionalExam = examRepository.findById(examId); GenericAddOrUpdateResponse response = new GenericAddOrUpdateResponse(); diff --git a/src/main/java/com/testify/Testify_Backend/service/GradingServiceImpl.java b/src/main/java/com/testify/Testify_Backend/service/GradingServiceImpl.java index b9ea707..739ad6c 100644 --- a/src/main/java/com/testify/Testify_Backend/service/GradingServiceImpl.java +++ b/src/main/java/com/testify/Testify_Backend/service/GradingServiceImpl.java @@ -2,6 +2,7 @@ import com.testify.Testify_Backend.model.*; import com.testify.Testify_Backend.repository.*; +import com.testify.Testify_Backend.requests.exam_management.CandidateExamDetailsDTO; import com.testify.Testify_Backend.requests.exam_management.ExamCandidateGradeRequest; import com.testify.Testify_Backend.responses.EssayDetailsResponse; import jakarta.transaction.Transactional; @@ -12,6 +13,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -24,6 +26,7 @@ public class GradingServiceImpl implements GradingService { private final GradeRepository gradeRepository; private final ExamSessionRepository examSessionRepository; private final ExamCandidateGradeRepository examCandidateGradeRepository; + private final ExamRepository examRepository; @Override @Transactional @@ -121,4 +124,6 @@ public String setExamCandidateGrade(ExamCandidateGradeRequest examCandidateGrad } + + }