diff --git a/upsmf-entity/pom.xml b/upsmf-entity/pom.xml index 4748eeb4494ce76ec09a722d4cd05dfa326ba985..f283d5836c19d5f2c9fd70dbeb24e1a92ce1f3d4 100644 --- a/upsmf-entity/pom.xml +++ b/upsmf-entity/pom.xml @@ -92,6 +92,14 @@ <artifactId>modelmapper</artifactId> <version>3.0.0</version> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> <dependency> <groupId>org.upsmf</groupId> <artifactId>upsmf-es-utils</artifactId> diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/StudentController.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/StudentController.java index 571000fb7a1e60725e3cde90de2144f3f4e76358..743f2958728d66d4334426bc4aec90d95eef52c6 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/StudentController.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/StudentController.java @@ -8,6 +8,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.validation.Valid; import java.io.IOException; @@ -17,7 +19,7 @@ import java.util.Optional; @RestController @RequestMapping("/students") public class StudentController { - + private final Logger logger = LoggerFactory.getLogger(StudentController.class); @Autowired private StudentService studentService; @@ -56,7 +58,27 @@ public class StudentController { return ResponseEntity.badRequest().build(); } } + @PutMapping("/closePendingFor14Days") + public ResponseEntity<?> updateStudentStatusToClosed() { + try { + List<Student> updatedStudents = studentService.updateStudentStatusToClosed(); + return ResponseEntity.ok(updatedStudents); + } catch (Exception e) { + logger.error("Error updating student status based on days", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred while updating student status."); + } + } + @GetMapping("/pendingFor21Days") + public ResponseEntity<?> getStudentsPendingFor21Days() { + try { + List<Student> students = studentService.getStudentsPendingForMoreThan21Days(); + return ResponseEntity.ok(students); + } catch (Exception e) { + logger.error("Error fetching students pending for 21 days", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred while fetching students."); + } + } @DeleteMapping("/{id}") public ResponseEntity<Void> deleteStudent(@PathVariable Long id) { try { @@ -68,9 +90,10 @@ public class StudentController { } @PutMapping("/{studentId}/verify") - public ResponseEntity<Student> verifyStudent(@PathVariable Long studentId, @RequestParam("status") VerificationStatus status) { + public ResponseEntity<Student> verifyStudent(@PathVariable Long studentId, @RequestParam("status") VerificationStatus status, @RequestParam("remarks") String remarks) { Student student = studentService.findById(studentId); student.setVerificationStatus(status); + student.setAdminRemarks(remarks); studentService.save(student); return ResponseEntity.ok(student); } diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/Student.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/Student.java index fef013f978b5a37ccb64c4ab5fb7fc6219c6f5d9..4a2562881448220b2e3e8e5f0407415b276e87b5 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/Student.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/Student.java @@ -51,8 +51,13 @@ public class Student { private String highSchoolYearOfPassing; private String intermediateRollNo; private String intermediateYearOfPassing; + @Enumerated(EnumType.STRING) private VerificationStatus verificationStatus = VerificationStatus.PENDING; private String provisionalEnrollmentNumber; + private String adminRemarks; + private LocalDate enrollmentDate; + private LocalDate verificationDate; + @ManyToOne @JoinColumn(name = "course_id") private Course course; diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/VerificationStatus.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/VerificationStatus.java index a2ae26474f4cc3d3eaf121339bb44ab0b8f73f17..c6371d305cde69ca9e3afb8a2b4c1bc609c844b6 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/VerificationStatus.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/VerificationStatus.java @@ -1,5 +1,5 @@ package com.tarento.upsmf.examsAndAdmissions.model; public enum VerificationStatus { - PENDING, VERIFIED, REJECTED + PENDING, VERIFIED, REJECTED, CLOSED } diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/StudentDto.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/StudentDto.java index d68eec73a34284c3b6f6c776d6d6d0a1d0a2aebe..3d2ac67b82f2e81908b13bc5804b787199565dfc 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/StudentDto.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/StudentDto.java @@ -39,6 +39,8 @@ public class StudentDto { private String highSchoolYearOfPassing; private String intermediateRollNo; private String intermediateYearOfPassing; + private String adminRemarks; + private MultipartFile highSchoolMarksheet; private MultipartFile highSchoolCertificate; diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentRepository.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentRepository.java index d478f90b16d530bbb204a9d0523884ed0f1c674a..3ebb1639d13e97dc8fb31961a9cce6b9355b64c3 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentRepository.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentRepository.java @@ -5,10 +5,14 @@ import com.tarento.upsmf.examsAndAdmissions.model.VerificationStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.time.LocalDate; import java.util.List; @Repository public interface StudentRepository extends JpaRepository<Student, Long> { List<Student> findByVerificationStatus(VerificationStatus status); + List<Student> findByVerificationDateBeforeAndVerificationStatusNot(LocalDate date, VerificationStatus status); + List<Student> findByVerificationDateBeforeAndVerificationStatus(LocalDate date, VerificationStatus status); + } diff --git a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentService.java b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentService.java index 2ab1bc6b8c6b0b625bc62ff96a3fabca9d7a5038..a1013f1a4673c56d9ac94abf3efa050a4a0d5a17 100644 --- a/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentService.java +++ b/upsmf-entity/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentService.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.LocalDate; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -130,6 +131,23 @@ public class StudentService { return studentRepository.save(existingStudent); } + public List<Student> updateStudentStatusToClosed() { + LocalDate cutoffDate = LocalDate.now().minusDays(14); + List<Student> studentsToClose = studentRepository.findByVerificationDateBeforeAndVerificationStatusNot(cutoffDate, VerificationStatus.CLOSED); + + logger.info("Students found to close: " + studentsToClose.size()); + + for (Student student : studentsToClose) { + student.setVerificationStatus(VerificationStatus.CLOSED); + } + + return studentRepository.saveAll(studentsToClose); + } + + public List<Student> getStudentsPendingForMoreThan21Days() { + LocalDate twentyOneDaysAgo = LocalDate.now().minusDays(21); + return studentRepository.findByVerificationDateBeforeAndVerificationStatus(twentyOneDaysAgo, VerificationStatus.PENDING); + } private void deleteFile(String filePath) { if (filePath == null || filePath.isEmpty()) {