diff --git a/.gitea/workflows/backend.yaml b/.gitea/workflows/backend.yaml index a330b5c..fa91896 100644 --- a/.gitea/workflows/backend.yaml +++ b/.gitea/workflows/backend.yaml @@ -18,15 +18,3 @@ jobs: - uses: gradle/gradle-build-action@v3 - name: building run: ./gradlew backend:build -x test - # Test-backend: - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-java@v3 - # with: - # java-version: '21' - # distribution: 'temurin' - # - run: curl -fsSL https://get.docker.com | sh - # - uses: gradle/gradle-build-action@v3 - # - name: testing - # run: ./gradlew backend:test diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 31425c2..57407dc 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -39,13 +39,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 - with: - java-version: '21' - distribution: 'temurin' - - uses: gradle/gradle-build-action@v3 - - name: building - run: ./gradlew backend:build -x test - name: pushing to the server run: | echo "${{ secrets.SSH_KEY }}" > key @@ -53,5 +46,5 @@ jobs: scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r * ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:api/ - name: restarting the backend run: | - ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/backend && docker build -t clyde/backend . && docker rm clyde_backend_prod -f || true && docker run --rm -d -u $(id -u clyde):$(id -g clyde) -v /var/run/postgresql:/var/run/postgresql --name clyde_backend_prod -p 4000:8080 clyde/backend && docker image prune -f' + ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/ && sed -i compose.yaml -e "s/8080:8080/4001:8080/" -e "s/8000:8080/4000:8080/" && docker-compose up --force-recreate --build -d' - run: echo "The backend has been deployed. running at https://clyde.herisson.ovh/api" diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java index 36c485e..69edb71 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java @@ -1,6 +1,5 @@ package ovh.herisson.Clyde.EndPoints; -import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; @@ -53,6 +52,7 @@ public class ApplicationsController { //if unAuthed authorizedApps.add(Applications.Login); authorizedApps.add(Applications.ListResearches); + authorizedApps.add(Applications.Schedule); User user = authServ.getUserFromToken(token); if(user == null) @@ -66,6 +66,8 @@ public class ApplicationsController { authorizedApps.add(Applications.Rdv); } + if(!authServ.isNotIn(new Role[]{Role.Teacher,Role.Admin},token)) + authorizedApps.add(Applications.ManageOwnedLessons); //if Teacher or Secretary or Admin add ManageCourses App if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) authorizedApps.add(Applications.ManageCourses); @@ -74,12 +76,18 @@ public class ApplicationsController { authorizedApps.add(Applications.Requests); authorizedApps.add(Applications.StudentsList);} - if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ - authorizedApps.add(Applications.CreateUser); - authorizedApps.add(Applications.UsersList);} - if (researchesServ.getResearcherByUser(user) != null) authorizedApps.add(Applications.ManageResearcherProfile); + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.UsersList); + authorizedApps.add(Applications.ManageSchedules); + authorizedApps.add(Applications.LessonRequests); + authorizedApps.add(Applications.CreateUser); + } + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin, Role.InscriptionService},token)){ + authorizedApps.add(Applications.Payments);} return authorizedApps; } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java.orig b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java.orig new file mode 100644 index 0000000..b8d293f --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java.orig @@ -0,0 +1,101 @@ +package ovh.herisson.Clyde.EndPoints; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; +import ovh.herisson.Clyde.Tables.Applications; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ApplicationsController { + + AuthenticatorService authServ; + + ResearchesService researchesServ; + + public ApplicationsController(AuthenticatorService authServ, ResearchesService researchesServ){ + this.researchesServ = researchesServ; + this.authServ = authServ; + } + + + /** return a list of authorized applications. + * depends on the token + */ + @GetMapping("/apps") + public ResponseEntity> getAuthorizedApps(@RequestHeader("Authorization") String token){ + return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK); + } + + @GetMapping("/apps/{identifier}") + public ResponseEntity getAppAuthorization(@PathVariable Applications identifier, @RequestHeader("Authorization") String token){ + + if (getAuthorizedApplications(token).contains(identifier)){ + return new ResponseEntity<>(true, HttpStatus.OK); + } + return new ResponseEntity<>(false, HttpStatus.OK); + } + + public ArrayList getAuthorizedApplications(String token){ + ArrayList authorizedApps = new ArrayList<>(); + + //if unAuthed + authorizedApps.add(Applications.Login); +<<<<<<< HEAD + authorizedApps.add(Applications.ListResearches); +======= + authorizedApps.add(Applications.Schedule); +>>>>>>> origin/master + + User user = authServ.getUserFromToken(token); + if(user == null) + return authorizedApps; + // if authed + authorizedApps.add(Applications.Profile); + + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) { + authorizedApps.add(Applications.Msg); + authorizedApps.add(Applications.Forum); + authorizedApps.add(Applications.Rdv); + } + + if(!authServ.isNotIn(new Role[]{Role.Teacher,Role.Admin},token)) + authorizedApps.add(Applications.ManageOwnedLessons); + //if Teacher or Secretary or Admin add ManageCourses App + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) + authorizedApps.add(Applications.ManageCourses); + + if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin, Role.Teacher},token)){ + authorizedApps.add(Applications.Requests); + authorizedApps.add(Applications.StudentsList);} + +<<<<<<< HEAD + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.CreateUser); + authorizedApps.add(Applications.UsersList);} + + if (researchesServ.getResearcherByUser(user) != null) + authorizedApps.add(Applications.ManageResearcherProfile); +======= + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.UsersList); + authorizedApps.add(Applications.ManageSchedules); + authorizedApps.add(Applications.LessonRequests);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin, Role.InscriptionService},token)){ + authorizedApps.add(Applications.Payments);} +>>>>>>> origin/master + return authorizedApps; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BACKUP_12704.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BACKUP_12704.java new file mode 100644 index 0000000..b8d293f --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BACKUP_12704.java @@ -0,0 +1,101 @@ +package ovh.herisson.Clyde.EndPoints; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; +import ovh.herisson.Clyde.Tables.Applications; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ApplicationsController { + + AuthenticatorService authServ; + + ResearchesService researchesServ; + + public ApplicationsController(AuthenticatorService authServ, ResearchesService researchesServ){ + this.researchesServ = researchesServ; + this.authServ = authServ; + } + + + /** return a list of authorized applications. + * depends on the token + */ + @GetMapping("/apps") + public ResponseEntity> getAuthorizedApps(@RequestHeader("Authorization") String token){ + return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK); + } + + @GetMapping("/apps/{identifier}") + public ResponseEntity getAppAuthorization(@PathVariable Applications identifier, @RequestHeader("Authorization") String token){ + + if (getAuthorizedApplications(token).contains(identifier)){ + return new ResponseEntity<>(true, HttpStatus.OK); + } + return new ResponseEntity<>(false, HttpStatus.OK); + } + + public ArrayList getAuthorizedApplications(String token){ + ArrayList authorizedApps = new ArrayList<>(); + + //if unAuthed + authorizedApps.add(Applications.Login); +<<<<<<< HEAD + authorizedApps.add(Applications.ListResearches); +======= + authorizedApps.add(Applications.Schedule); +>>>>>>> origin/master + + User user = authServ.getUserFromToken(token); + if(user == null) + return authorizedApps; + // if authed + authorizedApps.add(Applications.Profile); + + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) { + authorizedApps.add(Applications.Msg); + authorizedApps.add(Applications.Forum); + authorizedApps.add(Applications.Rdv); + } + + if(!authServ.isNotIn(new Role[]{Role.Teacher,Role.Admin},token)) + authorizedApps.add(Applications.ManageOwnedLessons); + //if Teacher or Secretary or Admin add ManageCourses App + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) + authorizedApps.add(Applications.ManageCourses); + + if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin, Role.Teacher},token)){ + authorizedApps.add(Applications.Requests); + authorizedApps.add(Applications.StudentsList);} + +<<<<<<< HEAD + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.CreateUser); + authorizedApps.add(Applications.UsersList);} + + if (researchesServ.getResearcherByUser(user) != null) + authorizedApps.add(Applications.ManageResearcherProfile); +======= + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.UsersList); + authorizedApps.add(Applications.ManageSchedules); + authorizedApps.add(Applications.LessonRequests);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin, Role.InscriptionService},token)){ + authorizedApps.add(Applications.Payments);} +>>>>>>> origin/master + return authorizedApps; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BASE_12704.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BASE_12704.java new file mode 100644 index 0000000..d4fdaa0 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_BASE_12704.java @@ -0,0 +1,75 @@ +package ovh.herisson.Clyde.EndPoints; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Tables.Applications; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ApplicationsController { + + AuthenticatorService authServ; + + public ApplicationsController(AuthenticatorService authServ){ + this.authServ = authServ; + } + + + /** return a list of authorized applications. + * depends on the token + */ + @GetMapping("/apps") + public ResponseEntity> getAuthorizedApps(@RequestHeader("Authorization") String token){ + return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK); + } + + @GetMapping("/apps/{identifier}") + public ResponseEntity getAppAuthorization(@PathVariable Applications identifier, @RequestHeader("Authorization") String token){ + + if (getAuthorizedApplications(token).contains(identifier)){ + return new ResponseEntity<>(true, HttpStatus.OK); + } + return new ResponseEntity<>(false, HttpStatus.OK); + } + + public ArrayList getAuthorizedApplications(String token){ + ArrayList authorizedApps = new ArrayList<>(); + + //if unAuthed + authorizedApps.add(Applications.Login); + + User user = authServ.getUserFromToken(token); + if(user == null) + return authorizedApps; + // if authed + authorizedApps.add(Applications.Profile); + + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) { + authorizedApps.add(Applications.Msg); + authorizedApps.add(Applications.Forum); + authorizedApps.add(Applications.Rdv); + } + + //if Teacher or Secretary or Admin add ManageCourses App + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) + authorizedApps.add(Applications.ManageCourses); + + if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin, Role.Teacher},token)){ + authorizedApps.add(Applications.Requests); + authorizedApps.add(Applications.StudentsList);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.UsersList);} + return authorizedApps; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_LOCAL_12704.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_LOCAL_12704.java new file mode 100644 index 0000000..36c485e --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_LOCAL_12704.java @@ -0,0 +1,85 @@ +package ovh.herisson.Clyde.EndPoints; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; +import ovh.herisson.Clyde.Tables.Applications; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ApplicationsController { + + AuthenticatorService authServ; + + ResearchesService researchesServ; + + public ApplicationsController(AuthenticatorService authServ, ResearchesService researchesServ){ + this.researchesServ = researchesServ; + this.authServ = authServ; + } + + + /** return a list of authorized applications. + * depends on the token + */ + @GetMapping("/apps") + public ResponseEntity> getAuthorizedApps(@RequestHeader("Authorization") String token){ + return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK); + } + + @GetMapping("/apps/{identifier}") + public ResponseEntity getAppAuthorization(@PathVariable Applications identifier, @RequestHeader("Authorization") String token){ + + if (getAuthorizedApplications(token).contains(identifier)){ + return new ResponseEntity<>(true, HttpStatus.OK); + } + return new ResponseEntity<>(false, HttpStatus.OK); + } + + public ArrayList getAuthorizedApplications(String token){ + ArrayList authorizedApps = new ArrayList<>(); + + //if unAuthed + authorizedApps.add(Applications.Login); + authorizedApps.add(Applications.ListResearches); + + User user = authServ.getUserFromToken(token); + if(user == null) + return authorizedApps; + // if authed + authorizedApps.add(Applications.Profile); + + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) { + authorizedApps.add(Applications.Msg); + authorizedApps.add(Applications.Forum); + authorizedApps.add(Applications.Rdv); + } + + //if Teacher or Secretary or Admin add ManageCourses App + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) + authorizedApps.add(Applications.ManageCourses); + + if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin, Role.Teacher},token)){ + authorizedApps.add(Applications.Requests); + authorizedApps.add(Applications.StudentsList);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.CreateUser); + authorizedApps.add(Applications.UsersList);} + + if (researchesServ.getResearcherByUser(user) != null) + authorizedApps.add(Applications.ManageResearcherProfile); + return authorizedApps; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_REMOTE_12704.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_REMOTE_12704.java new file mode 100644 index 0000000..74f76fa --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController_REMOTE_12704.java @@ -0,0 +1,83 @@ +package ovh.herisson.Clyde.EndPoints; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Tables.Applications; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ApplicationsController { + + AuthenticatorService authServ; + + public ApplicationsController(AuthenticatorService authServ){ + this.authServ = authServ; + } + + + /** return a list of authorized applications. + * depends on the token + */ + @GetMapping("/apps") + public ResponseEntity> getAuthorizedApps(@RequestHeader("Authorization") String token){ + return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK); + } + + @GetMapping("/apps/{identifier}") + public ResponseEntity getAppAuthorization(@PathVariable Applications identifier, @RequestHeader("Authorization") String token){ + + if (getAuthorizedApplications(token).contains(identifier)){ + return new ResponseEntity<>(true, HttpStatus.OK); + } + return new ResponseEntity<>(false, HttpStatus.OK); + } + + public ArrayList getAuthorizedApplications(String token){ + ArrayList authorizedApps = new ArrayList<>(); + + //if unAuthed + authorizedApps.add(Applications.Login); + authorizedApps.add(Applications.Schedule); + + User user = authServ.getUserFromToken(token); + if(user == null) + return authorizedApps; + // if authed + authorizedApps.add(Applications.Profile); + + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) { + authorizedApps.add(Applications.Msg); + authorizedApps.add(Applications.Forum); + authorizedApps.add(Applications.Rdv); + } + + if(!authServ.isNotIn(new Role[]{Role.Teacher,Role.Admin},token)) + authorizedApps.add(Applications.ManageOwnedLessons); + //if Teacher or Secretary or Admin add ManageCourses App + if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token)) + authorizedApps.add(Applications.ManageCourses); + + if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin, Role.Teacher},token)){ + authorizedApps.add(Applications.Requests); + authorizedApps.add(Applications.StudentsList);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){ + authorizedApps.add(Applications.UsersList); + authorizedApps.add(Applications.ManageSchedules); + authorizedApps.add(Applications.LessonRequests);} + + if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin, Role.InscriptionService},token)){ + authorizedApps.add(Applications.Payments);} + return authorizedApps; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java index 474e2cb..e3c3e0e 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java @@ -3,15 +3,14 @@ package ovh.herisson.Clyde.EndPoints; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository; import ovh.herisson.Clyde.Responses.UnauthorizedResponse; -import ovh.herisson.Clyde.Services.AuthenticatorService; -import ovh.herisson.Clyde.Services.CourseService; -import ovh.herisson.Clyde.Services.ProtectionService; -import ovh.herisson.Clyde.Services.TeacherCourseService; -import ovh.herisson.Clyde.Tables.Course; -import ovh.herisson.Clyde.Tables.Role; -import ovh.herisson.Clyde.Tables.User; +import ovh.herisson.Clyde.Services.*; +import ovh.herisson.Clyde.Tables.*; + +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @RestController @@ -24,10 +23,23 @@ public class CourseController { private final AuthenticatorService authServ; - public CourseController(CourseService courseServ, TeacherCourseService teacherCourseServ, AuthenticatorService authServ) { + private final UserService userService; + + private final CurriculumService curriculumService; + + private final UserCurriculumService userCurriculumService; + + private final CurriculumCourseRepository curriculumCourseRepository; + private final CurriculumCourseService curriculumCourseService; + public CourseController(CourseService courseServ, TeacherCourseService teacherCourseServ, AuthenticatorService authServ, UserService userService, CurriculumService curriculumService, UserCurriculumService userCurriculumService, CurriculumCourseRepository curriculumCourseRepository, CurriculumCourseService curriculumCourseService) { this.courseServ = courseServ; this.teacherCourseServ = teacherCourseServ; this.authServ = authServ; + this.userService = userService; + this.curriculumService = curriculumService; + this.userCurriculumService = userCurriculumService; + this.curriculumCourseRepository = curriculumCourseRepository; + this.curriculumCourseService = curriculumCourseService; } @GetMapping("/course/{id}") @@ -70,19 +82,18 @@ public class CourseController { } - @PostMapping("/course") + @PostMapping("/course/curriculum/{id}") public ResponseEntity> postCourse(@RequestHeader("Authorization") String token, - @RequestBody Course course) + @RequestBody Course course,@PathVariable long id) { - System.out.println(course); - System.out.println(token); if (authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)) return new UnauthorizedResponse<>(null); - Course createdCourse = courseServ.save(course); - if (createdCourse == null) + Curriculum curriculum = curriculumService.findById(id); + if (createdCourse == null || curriculum == null) return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST); - + CurriculumCourse curriculumCourse = new CurriculumCourse(curriculum,course); + curriculumCourseService.save(curriculumCourse); return new ResponseEntity<>(ProtectionService.courseWithoutPassword(createdCourse), HttpStatus.CREATED); } @@ -136,4 +147,28 @@ public class CourseController { return new ResponseEntity<>(HttpStatus.OK); } + + //Get all the courses followed by an user + @GetMapping("/usercourses") + public ResponseEntity> getAllUserCourses(@RequestHeader("Authorization") String token){ + User u = authServ.getUserFromToken(token); + + //We get all the actual curriculums of the user + List userCurricula = userCurriculumService.findByStudentAndActual(u, true); + List toReturn = new ArrayList<>(); + + //We iterate through all the curriculums and we extract the courses + for (int i = 0; i < userCurricula.size(); i++){ + curriculumCourseRepository.findCoursesByCurriculum(userCurricula.get(i).getCurriculum()).forEach((item) -> { + //We need this to eliminate clones because a course can belong to several curriculums + if(!toReturn.contains(item)){ + toReturn.add(item); + } + }); + } + + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } + + } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java index efe34e6..cd11055 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java @@ -19,6 +19,7 @@ public class CurriculumController { private final CurriculumService curriculumServ; + private final CourseService courseServ; private final AuthenticatorService authServ; private final UserCurriculumService userCurriculumServ; @@ -27,8 +28,9 @@ public class CurriculumController { private final UserService userServ; private final ExternalCurriculumRepository ecr; - public CurriculumController(CurriculumService curriculumServ, AuthenticatorService authServ, UserCurriculumService userCurriculumServ, CurriculumCourseService curriculumCourseServ, InscriptionRepository ir, UserService userServ, ExternalCurriculumRepository ecr){ + public CurriculumController(CurriculumService curriculumServ, CourseService courseServ, AuthenticatorService authServ, UserCurriculumService userCurriculumServ, CurriculumCourseService curriculumCourseServ, InscriptionRepository ir, UserService userServ, ExternalCurriculumRepository ecr){ this.curriculumServ = curriculumServ; + this.courseServ = courseServ; this.authServ = authServ; this.userCurriculumServ = userCurriculumServ; this.curriculumCourseServ = curriculumCourseServ; @@ -60,6 +62,18 @@ public class CurriculumController { return new ResponseEntity<>(curriculumCourseServ.getDepthCurriculum(curriculum),HttpStatus.OK); } + @GetMapping("/course/curriculum/{id}") + public ResponseEntity> getCurriculumsByCourse(@RequestHeader("Authorization") String token, @PathVariable long id){ + if(authServ.isNotIn(new Role[]{Role.Admin, Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + Course course = courseServ.findById(id); + if(course == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + Iterable curriculum = curriculumCourseServ.findCurriculumByCourses(course); + return new ResponseEntity<>(curriculum, HttpStatus.OK); + } + + //Return the list of all curicullums of an user @GetMapping("/onescurriculum/{userId}") @@ -91,17 +105,20 @@ public class CurriculumController { } @PostMapping("/curriculum/{id}") - public ResponseEntity postCoursesToCurriculum(@RequestHeader("Authorization") String token, - @RequestBody Iterable coursesIds, - @PathVariable long id) - { + public ResponseEntity postCourseToCurriculum(@RequestHeader("Authorization") String token, + @RequestBody long coursesId, + @PathVariable long id){ if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) return new UnauthorizedResponse<>(null); - if (!curriculumCourseServ.saveAll(coursesIds, curriculumServ.findById(id))) + CurriculumCourse curriculumCourse = new CurriculumCourse(curriculumServ.findById(id), courseServ.findById(coursesId)); + if(curriculumCourse.getCourse() == null || curriculumCourse.getCurriculum() == null) return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + curriculumCourseServ.save(curriculumCourse); + return new ResponseEntity<>(HttpStatus.OK); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/ExternalCurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/ExternalCurriculumController.java index e88c759..7b396d6 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/ExternalCurriculumController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/ExternalCurriculumController.java @@ -30,9 +30,16 @@ public class ExternalCurriculumController { //everyone can post some externalcurriculums (the validity of the elements is assured by the inscription service) @PostMapping("/externalcurriculum") public ResponseEntity postExternalCurriculum(@RequestBody Map externalCurrInfos){ - InscriptionRequest ir = inscriptionRepository.findById((Integer) externalCurrInfos.get("inscriptionRequestId")); + //An external curriculum can either be linked to an User or to an InscriptionRequest + InscriptionRequest ir = null; + User user = null; + if (externalCurrInfos.get("inscriptionRequestId") != null){ + ir = inscriptionRepository.findById((Integer) externalCurrInfos.get("inscriptionRequestId")); + }else{ + user = userRepository.findById((Integer) externalCurrInfos.get("userRegNo")); + } - ExternalCurriculum toSave = new ExternalCurriculum(ir, (String) externalCurrInfos.get("school"),(String) externalCurrInfos.get("formation"),(String) externalCurrInfos.get("completion"), (Integer)externalCurrInfos.get("startYear"), (Integer)externalCurrInfos.get("endYear"), (String)externalCurrInfos.get("justifDocUrl"), null); + ExternalCurriculum toSave = new ExternalCurriculum(ir, (String) externalCurrInfos.get("school"),(String) externalCurrInfos.get("formation"),(String) externalCurrInfos.get("completion"), (Integer)externalCurrInfos.get("startYear"), (Integer)externalCurrInfos.get("endYear"), (String)externalCurrInfos.get("justifdocUrl"), user); return new ResponseEntity<>(ecr.save(toSave), HttpStatus.OK); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/InscriptionController.java index 60f4585..8caf2d9 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/InscriptionController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/InscriptionController.java @@ -3,10 +3,12 @@ package ovh.herisson.Clyde.EndPoints.Inscription; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Repositories.CurriculumRepository; import ovh.herisson.Clyde.Responses.UnauthorizedResponse; import ovh.herisson.Clyde.Services.AuthenticatorService; import ovh.herisson.Clyde.Services.Inscription.InscriptionService; import ovh.herisson.Clyde.Services.ProtectionService; +import ovh.herisson.Clyde.Tables.Curriculum; import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; import ovh.herisson.Clyde.Tables.RequestState; import ovh.herisson.Clyde.Tables.Role; @@ -19,17 +21,18 @@ public class InscriptionController { private final InscriptionService inscriptionServ; private final AuthenticatorService authServ; - - public InscriptionController(InscriptionService inscriptionServ, AuthenticatorService authServ){ + private final CurriculumRepository curriculumRepository; + public InscriptionController(InscriptionService inscriptionServ, AuthenticatorService authServ, CurriculumRepository curriculumRepository){ this.inscriptionServ = inscriptionServ; this.authServ = authServ; + this.curriculumRepository = curriculumRepository; } @GetMapping("/requests/register") public ResponseEntity>> getAllRequests(@RequestHeader("Authorization") String token){ - if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService, Role.Teacher},token)) return new UnauthorizedResponse<>(null); Iterable inscriptionRequests = inscriptionServ.getAll(); @@ -41,7 +44,7 @@ public class InscriptionController { @GetMapping("/request/register/{id}") public ResponseEntity> getById(@RequestHeader("Authorization") String token, @PathVariable long id){ - if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService, Role.Teacher},token)) return new UnauthorizedResponse<>(null); InscriptionRequest foundInscriptionRequest = inscriptionServ.getById(id); @@ -87,6 +90,12 @@ public class InscriptionController { return new UnauthorizedResponse<>(null); InscriptionRequest toEdit = inscriptionServ.getById(id); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (toEdit.getEquivalenceState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + toEdit.setEquivalenceState(newstate); inscriptionServ.save(toEdit); @@ -97,4 +106,31 @@ public class InscriptionController { } return new ResponseEntity<>(HttpStatus.OK); } + + @PatchMapping("/request/registerequivimpose/{id}/{cursusid}") + public ResponseEntity editRegisterEquiv(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable long cursusid){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher}, token)) + return new UnauthorizedResponse<>(null); + + InscriptionRequest toEdit = inscriptionServ.getById(id); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (toEdit.getEquivalenceState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + //We impose a curriculum + Curriculum curriculum = curriculumRepository.findById(cursusid); + + toEdit.setCurriculumId(curriculum.getCurriculumId()); + toEdit.setEquivalenceState(RequestState.Accepted); + + inscriptionServ.save(toEdit); + + if (toEdit.getState() == RequestState.Accepted && (toEdit.getEquivalenceState() == RequestState.Accepted || toEdit.getEquivalenceState() == RequestState.Unrequired)) + { + inscriptionServ.createUser(toEdit); + } + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/PaymentController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/PaymentController.java index b70ad59..9a16fb2 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/PaymentController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/PaymentController.java @@ -34,4 +34,12 @@ public class PaymentController { return new ResponseEntity<>(toReturn, HttpStatus.OK); } + @GetMapping("/payment") + public ResponseEntity> getAllPayments(){ + ArrayList toReturn = new ArrayList(); + + + paymentRepository.findAll().forEach(toReturn::add); + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/RequestsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/RequestsController.java index 61489bf..65cbe4d 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/RequestsController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Inscription/RequestsController.java @@ -4,18 +4,22 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ovh.herisson.Clyde.Repositories.CourseRepository; -import ovh.herisson.Clyde.Repositories.Inscription.ExemptionsRequestRepository; -import ovh.herisson.Clyde.Repositories.Inscription.ScholarshipRequestRepository; -import ovh.herisson.Clyde.Repositories.Inscription.UninscriptionRequestRepository; +import ovh.herisson.Clyde.Repositories.CurriculumRepository; +import ovh.herisson.Clyde.Repositories.Inscription.*; +import ovh.herisson.Clyde.Repositories.UserCurriculumRepository; import ovh.herisson.Clyde.Repositories.UserRepository; import ovh.herisson.Clyde.Responses.UnauthorizedResponse; import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.TokenService; +import ovh.herisson.Clyde.Services.UserService; import ovh.herisson.Clyde.Tables.*; import ovh.herisson.Clyde.Tables.Inscription.ExemptionsRequest; +import ovh.herisson.Clyde.Tables.Inscription.Minerval; import ovh.herisson.Clyde.Tables.Inscription.ScholarshipRequest; -import ovh.herisson.Clyde.Tables.Inscription.UninscriptionRequest; +import ovh.herisson.Clyde.Tables.Inscription.UnregisterRequest; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.Map; @@ -23,20 +27,32 @@ import java.util.Map; @CrossOrigin(originPatterns = "*", allowCredentials = "true") public class RequestsController { + public final TokenService tokenService; public final ExemptionsRequestRepository err; public final ScholarshipRequestRepository srr; public final UserRepository userRepository; public final AuthenticatorService authServ; - public final UninscriptionRequestRepository uninscriptionRequestRepository; + public final UnregisterRequestRepository unregisterRequestRepository; public final CourseRepository courseRepository; + public final UserService userService; + public final UserCurriculumRepository userCurriculumRepository; + public final CurriculumRepository curriculumRepository; + public final MinervalRepository minervalRepository; + public final ChangeCurriculumRequestRepository changeCurriculumRequestRepository; - public RequestsController(ExemptionsRequestRepository err, ScholarshipRequestRepository srr, UserRepository userRepository, AuthenticatorService authServ, UninscriptionRequestRepository uninscriptionRequestRepository, CourseRepository courseRepository) { + public RequestsController(TokenService tokenService, ExemptionsRequestRepository err, ScholarshipRequestRepository srr, UserRepository userRepository, AuthenticatorService authServ, UnregisterRequestRepository unregisterRequestRepository, CourseRepository courseRepository, UserService userService, UserCurriculumRepository userCurriculumRepository, CurriculumRepository curriculumRepository, MinervalRepository minervalRepository, ChangeCurriculumRequestRepository changeCurriculumRequestRepository) { + this.tokenService = tokenService; this.err = err; this.srr = srr; this.userRepository = userRepository; this.authServ = authServ; - this.uninscriptionRequestRepository = uninscriptionRequestRepository; + this.unregisterRequestRepository = unregisterRequestRepository; this.courseRepository = courseRepository; + this.userService = userService; + this.userCurriculumRepository = userCurriculumRepository; + this.curriculumRepository = curriculumRepository; + this.minervalRepository = minervalRepository; + this.changeCurriculumRequestRepository = changeCurriculumRequestRepository; } @PostMapping(value="/exemptionreq") @@ -64,7 +80,7 @@ public class RequestsController { //Get all the exemptions Request @GetMapping(value = "/exemptionsreq") public ResponseEntity> getAllExemptionsRequests(@RequestHeader("Authorization") String token){ - if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.InscriptionService},token)) + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService, Role.Teacher},token)) return new UnauthorizedResponse<>(null); ArrayList toReturn = new ArrayList<>(); @@ -74,6 +90,33 @@ public class RequestsController { return new ResponseEntity<>(toReturn, HttpStatus.OK); } + @GetMapping(value = "/exemptionsreq/{id}") + public ResponseEntity getExemptionRequestbyId(@RequestHeader("Authorization") String token, @PathVariable long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ExemptionsRequest exemptionsRequest = err.findById(id); + + return new ResponseEntity<>(exemptionsRequest, HttpStatus.OK); + } + + @PatchMapping(value = "/exemptionsreq/{id}/{newstate}") + public ResponseEntity changeExemptionReqState(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable RequestState newstate){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + + ExemptionsRequest exemptionsRequest = err.findById(id); + + if (exemptionsRequest.getState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + exemptionsRequest.setState(newstate); + err.save(exemptionsRequest); + + return new ResponseEntity<>(HttpStatus.OK); + } + //Get all the scholarships requests @GetMapping(value = "/scholarshipreq") public ResponseEntity> getAllScholarshipRequests(@RequestHeader("Authorization") String token){ @@ -87,11 +130,244 @@ public class RequestsController { return new ResponseEntity<>(toReturn, HttpStatus.OK); } - @PostMapping(value = "/uninscriptionreq") + @PostMapping(value = "/unregister") public ResponseEntity postUnregReq(@RequestBody Map uninscr){ User u = userRepository.findById((int) uninscr.get("userId")); - UninscriptionRequest ur = new UninscriptionRequest(RequestState.Pending, (String) uninscr.get("reason"), new Date(), u); - uninscriptionRequestRepository.save(ur); + Curriculum c; + + if (uninscr.get("curriculumId") == null){ + c = null; + }else{ + c = curriculumRepository.findById((Integer) uninscr.get("curriculumId")); + } + + UnregisterRequest ur = new UnregisterRequest(RequestState.Pending, (String) uninscr.get("reason"), new Date(), u.getRegNo(), u.getFirstName(), u.getLastName(), u.getEmail(), c); + unregisterRequestRepository.save(ur); return new ResponseEntity<>(HttpStatus.OK); } + + @PatchMapping(value = "/scholarshipreq/") + public ResponseEntity editScholReq(@RequestHeader("Authorization") String token, @RequestBody Map infos){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ScholarshipRequest scholarshipRequest = srr.findById((Integer) infos.get("id")); + + User u = scholarshipRequest.getUser(); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (scholarshipRequest.getState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + if (infos.get("state").equals("Accepted")){ + scholarshipRequest.setState(RequestState.Accepted); + scholarshipRequest.setAmount((int) infos.get("amount")); + + //We then deduce then amount from the minerval + ArrayList minerval = minervalRepository.getMinervalsByStudentRegNoOrderByYearDesc(u.getRegNo()); + minerval.get(0).setPaidAmount(minerval.get(0).getPaidAmount() + scholarshipRequest.getAmount()); + minerval.get(0).setToPay(minerval.get(0).getToPay() - scholarshipRequest.getAmount()); + minervalRepository.save(minerval.get(0)); + }else{ + scholarshipRequest.setState(RequestState.Refused); + } + + srr.save(scholarshipRequest); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping(value = "/scholarshipreq/{id}") + public ResponseEntity getScholReqbyId(@RequestHeader("Authorization") String token, @PathVariable long id){ + if (authServ.isNotIn(new Role[]{Role.Admin, Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ScholarshipRequest toReturn = srr.findById(id); + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } + + @GetMapping(value = "/unregister") + public ResponseEntity> getAllUnregReq(@RequestHeader("Authorization") String token){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ArrayList toReturn = new ArrayList<>(); + unregisterRequestRepository.findAll().forEach(toReturn::add); + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } + + @GetMapping(value = "/unregister/{id}") + public ResponseEntity getUnregbyId(@RequestHeader("Authorization") String token, @PathVariable long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + UnregisterRequest unregisterRequest = unregisterRequestRepository.findById(id); + return new ResponseEntity<>(unregisterRequest, HttpStatus.OK); + } + + @PatchMapping(value = "/unregister/{id}/{newstate}") + public ResponseEntity pathUnregReq(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable RequestState newstate){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + UnregisterRequest unregisterRequest = unregisterRequestRepository.findById(id); + User u = userRepository.findById(unregisterRequest.getRegNo()); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (unregisterRequest.getState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + unregisterRequest.setState(newstate); + unregisterRequestRepository.save(unregisterRequest); + if (newstate == RequestState.Accepted){ + if (unregisterRequest.getCurriculum() == null){ + ArrayList userCurricula = userCurriculumRepository.findByUserOrderByCurriculum(u); + for (int i = 0; i < userCurricula.size(); i++){ + userCurricula.get(i).setActual(false); + } + userCurriculumRepository.saveAll(userCurricula); + }else{ + //This usercurriculum will contain the usercurriculum to set false + UserCurriculum userCurriculum = userCurriculumRepository.findByUserAndCurriculumAndActual(u, unregisterRequest.getCurriculum(), true); + userCurriculum.setActual(false); + userCurriculumRepository.save(userCurriculum); + } + } + return new ResponseEntity<>(HttpStatus.OK); + } + + //We look in the usercursus table if the student has already the previous year of a curriculum + public boolean studentHasPrevYear(Curriculum curriculum, User user){ + ArrayList userCurrList = userCurriculumRepository.findByUserOrderByCurriculum(user); + for (int i = 0; i < userCurrList.size(); i++){ + if (userCurrList.get(i).getCurriculum().getOption().equals(curriculum.getOption()) && userCurrList.get(i).getCurriculum().getYear() == curriculum.getYear()-1){ + return true; + } + } + return false; + } + @PostMapping("/changecurriculumreq") + public ResponseEntity addChangeCurrReq(@RequestBody Map reqInfos){ + User user = userRepository.findById((Integer) reqInfos.get("userId")); + + Curriculum actualCurriculum; + + //If null then it means we are in a supplementary cursus case + if (reqInfos.get("actualcursus") == null){ + actualCurriculum = null; + }else{ + actualCurriculum = curriculumRepository.findById((Integer) reqInfos.get("actualcursus")); + } + + Curriculum destinationCurriculum = curriculumRepository.findById((Integer) reqInfos.get("newcursus")); + + ChangeCurriculumRequest changeCurriculumRequest = new ChangeCurriculumRequest(user, actualCurriculum, destinationCurriculum, new Date(), RequestState.Pending, RequestState.Unrequired); + + //Si l'année du cursus est plus grande que 1 et que l'étudiant n'a pas dans sa liste de cursus l'année d'en dessous alors on demande l'accord du prof + if (destinationCurriculum.getYear() > 1 && !studentHasPrevYear(destinationCurriculum, user)){ + changeCurriculumRequest.setTeacherApprovalState(RequestState.Pending); + } + changeCurriculumRequestRepository.save(changeCurriculumRequest); + + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/changecurriculumreq") + public ResponseEntity> getAllChangeCurrReq(@RequestHeader("Authorization") String token){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService, Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + + ArrayList toReturn = new ArrayList<>(); + + changeCurriculumRequestRepository.findAll().forEach(toReturn::add); + + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } + + @GetMapping("/changecurriculumreq/{id}") + public ResponseEntity getCCrbyId(@RequestHeader("Authorization") String token, @PathVariable long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ChangeCurriculumRequest toReturn = changeCurriculumRequestRepository.findById(id); + return new ResponseEntity<>(toReturn, HttpStatus.OK); + } + + @PatchMapping("/changecurriculumreq/{id}/{newState}") + public ResponseEntity editCCReq(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable RequestState newState){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token)) + return new UnauthorizedResponse<>(null); + + ChangeCurriculumRequest toEdit = changeCurriculumRequestRepository.findById(id); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (toEdit.getState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + toEdit.setState(newState); + changeCurriculumRequestRepository.save(toEdit); + if (newState == RequestState.Accepted && (toEdit.getTeacherApprovalState() == RequestState.Accepted || toEdit.getTeacherApprovalState() == RequestState.Unrequired)){ + //If actual curriculum is not null then we need to set that the user doesn't follow it anymore + acceptProcedure(toEdit); + } + + return new ResponseEntity<>(HttpStatus.OK); + } + + @PatchMapping("/changecurriculumreqteacher/{id}/{newteacherstate}") + public ResponseEntity editCCReqTeacherState(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable RequestState newteacherstate){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + + ChangeCurriculumRequest toEdit = changeCurriculumRequestRepository.findById(id); + + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (toEdit.getTeacherApprovalState() == RequestState.Accepted){ + return new ResponseEntity<>(HttpStatus.OK); + } + + toEdit.setState(newteacherstate); + changeCurriculumRequestRepository.save(toEdit); + + if (newteacherstate == RequestState.Accepted && toEdit.getState() == RequestState.Accepted){ + //If actual curriculum is not null then we need to set that the user doesn't follow it anymore + acceptProcedure(toEdit); + } + return new ResponseEntity<>(HttpStatus.OK); + } + + private void acceptProcedure(ChangeCurriculumRequest toEdit) { + User u = toEdit.getUser(); + if (toEdit.getActualCurriculum() != null){ + ArrayList listcurr = userCurriculumRepository.findByUserOrderByCurriculum(u); + + for (int i = 0; i < listcurr.size(); i++){ + if (listcurr.get(i).getCurriculum() == toEdit.getActualCurriculum()){ + listcurr.get(i).setActual(false); + } + } + + userCurriculumRepository.saveAll(listcurr); + } + + Calendar c = Calendar.getInstance(); + UserCurriculum userCurriculum = new UserCurriculum(u, toEdit.getDestinationCurriculum(), c.get(Calendar.YEAR), true); + userCurriculumRepository.save(userCurriculum); + } + + @GetMapping("/exemptionreq/{userId}") + public ResponseEntity> getExReqByuser(@RequestHeader("Authorization") String token, @PathVariable long userId){ + User currentUser = tokenService.getUserFromToken(token); + + //Only admin, teacher, secretary and the student himself can access a student's data here + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher, Role.Secretary},token) && currentUser.getRegNo() != userId) + return new UnauthorizedResponse<>(null); + + User u = userRepository.findById(userId); + + ArrayList exList = err.findByUser(u); + return new ResponseEntity<>(exList, HttpStatus.OK); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java new file mode 100644 index 0000000..72a05b1 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java @@ -0,0 +1,129 @@ +package ovh.herisson.Clyde.EndPoints; + +/****************************************************** + * @file LessonController.java + * @author William Karpinski + * @scope Extension Horaire + * + * Controller of Lessons API + ******************************************************/ + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.LessonService; +import ovh.herisson.Clyde.Services.ProtectionService; +import ovh.herisson.Clyde.Services.ScheduleLessonService; +import ovh.herisson.Clyde.Tables.Lesson; +import ovh.herisson.Clyde.Tables.Role; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class LessonController { + private final LessonService lessonServ; + + private final ScheduleLessonService scheduleLessonServ; + private final AuthenticatorService authServ; + + public LessonController(LessonService lessonServ, ScheduleLessonService scheduleLessonService, AuthenticatorService authServ) { + this.lessonServ = lessonServ; + this.scheduleLessonServ = scheduleLessonService; + this.authServ = authServ; + } + + /** + * Return a lesson via its id + */ + @GetMapping("/lesson/{id}") + public ResponseEntity> getLesson(@PathVariable long id){ + Lesson lesson = lessonServ.findById(id); + + if(lesson == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(ProtectionService.lessonWithoutPassword(lesson),HttpStatus.OK); + } + + /** + * Return all the lessons + */ + @GetMapping("/lessons") + public ResponseEntity>> getAllLessons(@RequestHeader("Authorization") String token){ + if(authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + return new ResponseEntity<>(ProtectionService.lessonsWithoutPassword(lessonServ.findAll()),HttpStatus.OK); + } + + /** + * Return all the lessons of a teacher's courses + */ + @GetMapping("/lessons/owned") + public ResponseEntity>> getOwnedLessons(@RequestHeader("Authorization") String token){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)){ + return new UnauthorizedResponse<>(null);} + return new ResponseEntity<>(ProtectionService.lessonsWithoutPassword(lessonServ.findAllOwnedLesson(authServ.getUserFromToken(token))),HttpStatus.OK); + } + + /** + ⋅* Return all the lessons of a student + */ + @GetMapping("/lessons/OwnCurriculum") + public ResponseEntity>> getOnesLessons(@RequestHeader("Authorization") String token){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Student},token)){ + return new UnauthorizedResponse<>(null);} + return new ResponseEntity<>(ProtectionService.lessonsWithoutPassword(lessonServ.findOnesLessons(authServ.getUserFromToken(token))),HttpStatus.OK); + } + + /** + * Post a new lesson + */ + @PostMapping("/lesson") + public ResponseEntity> postLesson(@RequestHeader("Authorization") String token, + @RequestBody Map lessonInfos){ + if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)) + return new UnauthorizedResponse<>(null); + + + Lesson lesson = lessonServ.createLesson(lessonInfos); + Lesson createdLesson = lessonServ.save(lesson); + scheduleLessonServ.saveToAllSchedule(lesson); + + if(createdLesson==null) + return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(ProtectionService.lessonWithoutPassword(createdLesson), HttpStatus.OK); + } + /** + * Modify a lesson + */ + @PatchMapping("/lesson/{id}") + public ResponseEntity patchLesson(@RequestHeader("Authorization") String token, + @RequestBody Map updates, + @PathVariable long id){ + if(authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + if(!lessonServ.modifyData(id, updates)){ + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + return new ResponseEntity<>(HttpStatus.OK); + } + /** + * Delete a lesson + */ + @DeleteMapping("lesson/{id}") + public ResponseEntity deleteLesson(@RequestHeader("Authorization") String token, + @PathVariable Long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + Lesson toDelete = lessonServ.findById(id); + if(toDelete == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + lessonServ.delete(toDelete); + return new ResponseEntity<>(HttpStatus.OK); + + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonRequestsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonRequestsController.java new file mode 100644 index 0000000..68eeeeb --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonRequestsController.java @@ -0,0 +1,150 @@ +package ovh.herisson.Clyde.EndPoints; + +/****************************************************** + * @file LessonRequestsController.java + * @author William Karpinski + * @scope Extension Horaire + * + * Controller of lesson requests API + ******************************************************/ + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.LessonRequestService; +import ovh.herisson.Clyde.Services.LessonService; +import ovh.herisson.Clyde.Services.ProtectionService; +import ovh.herisson.Clyde.Tables.LessonChangesRequest; +import ovh.herisson.Clyde.Tables.RequestState; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; + +import java.util.Map; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class LessonRequestsController { + private final LessonRequestService lessonRequestServ; + private final AuthenticatorService authServ; + + private final LessonService lessonServ; + public LessonRequestsController(LessonRequestService lessonRequestServer, AuthenticatorService authServ, LessonService lessonServ) { + this.lessonRequestServ = lessonRequestServer; + this.authServ = authServ; + this.lessonServ = lessonServ; + } + /** + * Return a lesson request via its id + */ + @GetMapping("/requests/lessonRequest/{id}") + public ResponseEntity> getById(@RequestHeader("Authorization") String token, @PathVariable long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + + LessonChangesRequest lessonRequest= lessonRequestServ.findById(id); + + return new ResponseEntity<>(ProtectionService.lessonRequestWithoutPassword(lessonRequest), HttpStatus.OK); + } + /** + * return all the requests made by a user + */ + @GetMapping("/requests/lessonRequests/owned") + public ResponseEntity>> getOwnedRequests(@RequestHeader("Authorization") String token){ + if(authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + User user = authServ.getUserFromToken(token); + Iterable lessonChangesRequests = lessonRequestServ.findOwnRequests(user); + return new ResponseEntity<>(ProtectionService.lessonRequestsWithoutPassword(lessonChangesRequests),HttpStatus.OK); + + } + /** + * Return all the lesson requests + */ + @GetMapping("/requests/lessonRequests") + public ResponseEntity>> getAllRequests(@RequestHeader("Authorization") String token){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + + Iterable lessonRequests= lessonRequestServ.getAll(); + + return new ResponseEntity<>(ProtectionService.lessonRequestsWithoutPassword(lessonRequests), HttpStatus.OK); + } + /** + * Post a lesson request + */ + @PostMapping("/requests/lessonRequest") + public ResponseEntity> makeRequest(@RequestHeader("Authorization") String token, @RequestBody Map lessonRequestInfos){ + if(authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + LessonChangesRequest lessonChangesRequest = lessonRequestServ.createLessonRequest(lessonRequestInfos); + LessonChangesRequest createdRequest = lessonRequestServ.save(lessonChangesRequest); + if(createdRequest == null) + return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(ProtectionService.lessonRequestWithoutPassword(lessonChangesRequest),HttpStatus.OK); + } + /** + * Modify a lesson Request + */ + @PatchMapping("/requests/lessonRequest/{id}") + public ResponseEntity changeRequestState(@PathVariable long id, + @RequestHeader("Authorization") String token, + @RequestBody Map infos){ + if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)) + return new UnauthorizedResponse<>(null); + + LessonChangesRequest lessonRequest = lessonRequestServ.findById(id); + String local = ""; + RequestState state = null; + for (Map.Entry entry : infos.entrySet()) { + switch (entry.getKey()) { + case "local": + local = (String) entry.getValue(); + break; + case "state": + state = RequestState.valueOf((String)entry.getValue()); + } + } + + if (state == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + if(lessonRequest.getRequestType() == 0 ) { + if (!lessonRequestServ.modifyCreateRequestState(lessonRequest, state, local)) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + + else if(lessonRequest.getRequestType() == 1){ + infos.put("lessonStart", lessonRequest.getLessonStart()); + infos.put("lessonEnd", lessonRequest.getLessonEnd()); + infos.put("lessonType",lessonRequest.getLessonType()); + if(!lessonRequestServ.modifyChangeRequestState(infos,lessonRequest.getLessonId(),state)) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + lessonRequest.setState(state); + } + + else{ + lessonRequestServ.modifyDeleteRequest(lessonRequest, state); + lessonRequest.setState(state); + + } + lessonRequestServ.save(lessonRequest); + return new ResponseEntity<>(HttpStatus.OK); + + } + + /** + * Delete a lesson request + */ + @DeleteMapping("/requests/lessonRequest/{id}") + public ResponseEntity deleteRequest(@RequestHeader("Authorization") String token, @PathVariable long id){ + if(authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.Teacher},token)) + return new UnauthorizedResponse<>(null); + LessonChangesRequest lessonChangesRequest = lessonRequestServ.findById(id); + if (lessonChangesRequest == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + lessonRequestServ.delete(lessonChangesRequest); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java index ad6f18f..d71e159 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java @@ -1,11 +1,11 @@ package ovh.herisson.Clyde.EndPoints; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; import ovh.herisson.Clyde.Repositories.*; import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository; import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository; import ovh.herisson.Clyde.Repositories.Inscription.ScholarshipRequestRepository; +import ovh.herisson.Clyde.Repositories.Inscription.UnregisterRequestRepository; import ovh.herisson.Clyde.Services.*; import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; import ovh.herisson.Clyde.Tables.*; @@ -18,14 +18,14 @@ import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum; import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; import ovh.herisson.Clyde.Tables.Inscription.Minerval; import ovh.herisson.Clyde.Tables.Inscription.ScholarshipRequest; +import ovh.herisson.Clyde.Tables.Inscription.*; import java.util.*; @RestController @CrossOrigin(originPatterns = "*", allowCredentials = "true") public class MockController { - private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - + public final UserService userService; public final UserRepository userRepo; public final TokenRepository tokenRepo; public final TokenService tokenService; @@ -35,13 +35,21 @@ public class MockController { public final ExternalCurriculumRepository externalCurriculumRepository; public final InscriptionService inscriptionService; + public final LessonService lessonService; + public final ScheduleService scheduleService; + public final ScheduleLessonService scheduleLessonService; + + public final LessonRequestService lessonRequestService; + ArrayList mockUsers; + public final ResearchesService researchesService; public final UserCurriculumRepository ucr; public final MinervalRepository minervalRepository; public final ScholarshipRequestRepository scholarshipRequestRepository; - - ArrayList mockUsers; - public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, ResearchesService researchesService, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){ + + public final UnregisterRequestRepository uninscriptionRequestRepository; + public MockController(UserService userService, UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, ResearchesService researchesService, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository, UnregisterRequestRepository unregisterRequestRepository, LessonService lessonService, ScheduleService scheduleService, ScheduleLessonService scheduleLessonService, LessonRequestService lessonRequestService){ + this.userService = userService; this.tokenRepo = tokenRepo; this.userRepo = userRepo; this.tokenService = tokenService; @@ -51,9 +59,14 @@ public class MockController { this.externalCurriculumRepository = externalCurriculumRepository; this.inscriptionService = inscriptionService; this.researchesService = researchesService; + this.lessonService = lessonService; + this.scheduleService = scheduleService; + this.scheduleLessonService = scheduleLessonService; + this.lessonRequestService = lessonRequestService; this.ucr = ucr; this.minervalRepository = minervalRepository; this.scholarshipRequestRepository = scholarshipRequestRepository; + this.uninscriptionRequestRepository = unregisterRequestRepository; } /** Saves an example of each user type by : @@ -65,47 +78,55 @@ public class MockController { @PostMapping("/mock") public void postMock() { - // user part - User herobrine = new User("brine", "hero", "admin@admin.com", "behind", "ShadowsLand", new Date(0), null, Role.Admin, passwordEncoder.encode("admin")); - User joe = new User("Mama", "Joe", "student@student.com", "roundabout", "England", new Date(0), null, Role.Student, passwordEncoder.encode("student")); - User meh = new User("Polo", "Marco", "secretary@secretary.com", "a Box", "Monaco", new Date(0), null, Role.Secretary, passwordEncoder.encode("secretary")); - User joke = new User("Gaillard", "Corentin", "teacher@teacher.com", "lab", "faculty", new Date(0), null, Role.Teacher, passwordEncoder.encode("teacher")); - User jojo = new User("Bridoux", "Justin", "teacher2@teacher2.com", "lab", "faculty", new Date(0), null, Role.Teacher, passwordEncoder.encode("teacher")); - User lena = new User("Louille", "Lena", "inscriptionService@InscriptionService.com", "no", "yes", new Date(0), null, Role.InscriptionService, passwordEncoder.encode("inscriptionService")); - User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi")); - mockUsers = new ArrayList<>(Arrays.asList(herobrine, joe, meh, joke, lena, jojo, popo)); - userRepo.saveAll(mockUsers); + // user part + User herobrine = new User("brine","hero","admin@admin.com","behind","ShadowsLand",new Date(0), null,Role.Admin,"admin"); + User joe = new User("Mama","Joe","student@student.com","roundabout","England",new Date(0), null,Role.Student,"student"); + User meh = new User("Polo","Marco","secretary@secretary.com","a Box","Monaco",new Date(0), null,Role.Secretary,"secretary"); + User joke = new User("Gaillard","Corentin","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,"teacher"); + User jojo = new User("Bridoux","Justin","teacher2@teacher2.com","lab","faculty",new Date(0), null,Role.Teacher,"teacher"); + User lena = new User("Louille","Lena","inscriptionService@InscriptionService.com","no","yes",new Date(0), null,Role.InscriptionService,"inscriptionService"); + User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, "jesuispaulleroi"); + mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo)); + + userService.saveAll(mockUsers); + + ExternalCurriculum externalCurriculum = new ExternalCurriculum(null, "HEH", "Bachelier en ingénieur", "completed", 2015, 2017, null, joe); + externalCurriculumRepository.save(externalCurriculum); Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023); minervalRepository.save(minerval); // Course / Curriculum part - Curriculum infoBab1 = new Curriculum(1, "info"); - Curriculum chemistryBab1 = new Curriculum(1, "chemistry"); - Curriculum psychologyBab1 = new Curriculum(1, "psychology"); - Curriculum infoBab2 = new Curriculum(2, "info"); - Curriculum masterinfo1 = new Curriculum(4, "info"); - Curriculum masterinfo2 = new Curriculum(5, "info"); + Curriculum infoBab1 = new Curriculum(1,"info", false); + Curriculum chemistryBab1 = new Curriculum(1,"chemistry", false); + Curriculum psychologyBab1 = new Curriculum(1,"psychology", false); + Curriculum infoBab2 = new Curriculum(2,"info", false); + Curriculum masterinfo1 = new Curriculum(4, "info", false); + Curriculum masterinfo2 = new Curriculum(5, "info", false); + Curriculum chemistryBab2 = new Curriculum(2, "chemistry", false); + Curriculum ingebab1 = new Curriculum(1, "ingénieur", true); - curriculumService.save(infoBab1); - curriculumService.save(chemistryBab1); - curriculumService.save(psychologyBab1); - curriculumService.save(infoBab2); - curriculumService.save(masterinfo1); - curriculumService.save(masterinfo2); + curriculumService.save(infoBab1); + curriculumService.save(chemistryBab1); + curriculumService.save(psychologyBab1); + curriculumService.save(infoBab2); + curriculumService.save(masterinfo1); + curriculumService.save(masterinfo2); + curriculumService.save(chemistryBab2); + curriculumService.save(ingebab1); - ucr.save(new UserCurriculum(joe, infoBab1, 2022)); - ucr.save(new UserCurriculum(joe, chemistryBab1, 2023)); - ucr.save(new UserCurriculum(joe, infoBab1, 2023)); - ucr.save(new UserCurriculum(joe, psychologyBab1, 2020)); - ucr.save(new UserCurriculum(popo, infoBab1, 2022)); - ucr.save(new UserCurriculum(popo, infoBab2, 2023)); + ucr.save(new UserCurriculum(joe, infoBab1, 2022, false)); + ucr.save(new UserCurriculum(joe, chemistryBab1, 2023, true)); + ucr.save(new UserCurriculum(joe, infoBab1, 2023, true)); + ucr.save(new UserCurriculum(joe, psychologyBab1, 2020, false)); + ucr.save(new UserCurriculum(popo, infoBab1, 2022, false)); + ucr.save(new UserCurriculum(popo, infoBab2, 2023, true)); - Course progra1 = new Course(5, "Programmation et algorithmique 1", joke); - Course chemistry1 = new Course(12, "Thermochimie", joke); - Course psycho1 = new Course(21, "Neuroreaction of isolated brain cells", joke); - Course commun = new Course(2, "cours commun", joke); + Course progra1 = new Course(5,"Programmation et algorithmique 1",joke); + Course chemistry1 = new Course(12, "Thermochimie",jojo); + Course psycho1 = new Course(21, "Neuroreaction of isolated brain cells",joke); + Course commun = new Course(2, "cours commun",joke); courseService.save(progra1); courseService.save(chemistry1); @@ -115,18 +136,19 @@ public class MockController { ScholarshipRequest ssr1 = new ScholarshipRequest(joe, RequestState.Pending, 0, new Date(), "test", "test"); scholarshipRequestRepository.save(ssr1); - CurriculumCourseService.save(new CurriculumCourse(infoBab1, progra1)); - CurriculumCourseService.save(new CurriculumCourse(infoBab1, commun)); - CurriculumCourseService.save(new CurriculumCourse(infoBab1, psycho1)); - CurriculumCourseService.save(new CurriculumCourse(psychologyBab1, psycho1)); - CurriculumCourseService.save(new CurriculumCourse(psychologyBab1, commun)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1,progra1)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1,commun)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1, psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1,psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1,commun)); + CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, chemistry1)); CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, commun)); CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, chemistry1)); - InscriptionRequest inscriptionRequest = new InscriptionRequest("helen", "prenom", "non", "helen@gmail.com", "america", new Date(), (long) 4, RequestState.Pending, "yes.png", "password", null, new Date(), RequestState.Pending); + InscriptionRequest inscriptionRequest = new InscriptionRequest("helen","prenom","non","helen@gmail.com","america",new Date(),(long) 4,RequestState.Pending,"yes.png","password", null, new Date(), RequestState.Pending, null); inscriptionService.save(inscriptionRequest); ExternalCurriculum externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null); @@ -161,6 +183,55 @@ public class MockController { researchesService.saveResearch(privateResearch); researchesService.saveResearch(jojoResearch); + + //Schedule part + + Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 22 2024 08:15", "Mon Apr 22 2024 10:15","rgb(0,50,100)","A0B2","Course"); + Lesson lesson_0_chemistry1 = new Lesson(chemistry1, "Wed Mar 27 2024 08:15", "Wed Mar 27 2024 09:15","rgb(100,50,0)","A0B2","TP"); + Lesson lesson_0_psycho1 = new Lesson(psycho1, "Sun Mar 24 2024 10:30 ","Sun Mar 24 2024 12:30 ","rgb(100,50,100)", "A0B2","TD"); + Lesson lesson_1_progra1 = new Lesson(progra1, "Mon Apr 02 2024 13:30", "Mon Apr 02 2024 15:30","rgb(0,50,100)","A0B2","TP"); + Lesson lesson_0_commun = new Lesson(commun, "Mon Apr 01 2024 10:30", "Mon Apr 01 2024 12:30","rgb(0,50,100)","A0B2","Course"); + + LessonChangesRequest request1 = new LessonChangesRequest(joke,RequestState.Pending,null,null,null,null,2,null,1); + LessonChangesRequest request2 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 10:30 ","Fri Apr 19 2024 12:30 ",null,null,1,null,2); + LessonChangesRequest request3 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 13:30 ","Fri Apr 19 2024 15:30 ","Course",progra1,0,"rgb(27,49,100)",4); + + + Schedule infoBab1Schedule = new Schedule(infoBab1); + Schedule chemistryBab1Schedule = new Schedule(chemistryBab1); + Schedule psychoBab1Schedule = new Schedule(psychologyBab1); + + + scheduleService.save(infoBab1Schedule); + scheduleService.save(chemistryBab1Schedule); + scheduleService.save(psychoBab1Schedule); + + lessonService.save(lesson_0_progra1); + lessonService.save(lesson_0_chemistry1); + lessonService.save(lesson_0_commun); + lessonService.save(lesson_0_psycho1); + lessonService.save(lesson_1_progra1); + + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_0_progra1)); + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_1_progra1)); + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_0_commun)); + + scheduleLessonService.save(new ScheduleLesson(chemistryBab1Schedule,lesson_0_chemistry1)); + scheduleLessonService.save(new ScheduleLesson(chemistryBab1Schedule,lesson_0_commun)); + + scheduleLessonService.save(new ScheduleLesson(psychoBab1Schedule,lesson_0_psycho1)); + scheduleLessonService.save(new ScheduleLesson(psychoBab1Schedule,lesson_0_commun)); + + + lessonRequestService.save(request1); + lessonRequestService.save(request2); + lessonRequestService.save(request3); + + UnregisterRequest unregisterRequest = new UnregisterRequest(RequestState.Pending, "je veux partir", new Date(), joe.getRegNo(), joe.getFirstName(), joe.getLastName(), joe.getEmail(), null); + uninscriptionRequestRepository.save(unregisterRequest); + + externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null); + externalCurriculumRepository.save(externalCurriculum); } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java.orig b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java.orig new file mode 100644 index 0000000..e1faa8c --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java.orig @@ -0,0 +1,307 @@ +package ovh.herisson.Clyde.EndPoints; + +import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Repositories.*; +import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository; +import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository; +import ovh.herisson.Clyde.Repositories.Inscription.ScholarshipRequestRepository; +import ovh.herisson.Clyde.Repositories.Inscription.UnregisterRequestRepository; +import ovh.herisson.Clyde.Services.*; +import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; +import ovh.herisson.Clyde.Tables.*; +<<<<<<< HEAD +import ovh.herisson.Clyde.Tables.ScientificPublications.Access; +import ovh.herisson.Clyde.Tables.ScientificPublications.PaperType; +import ovh.herisson.Clyde.Tables.ScientificPublications.Research; +import ovh.herisson.Clyde.Tables.ScientificPublications.Researcher; +import ovh.herisson.Clyde.Services.Inscription.InscriptionService; +import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum; +import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; +import ovh.herisson.Clyde.Tables.Inscription.Minerval; +import ovh.herisson.Clyde.Tables.Inscription.ScholarshipRequest; +======= +import ovh.herisson.Clyde.Tables.Inscription.*; +>>>>>>> origin/master + +import java.util.*; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class MockController { + public final UserService userService; + public final UserRepository userRepo; + public final TokenRepository tokenRepo; + public final TokenService tokenService; + public final CurriculumCourseService CurriculumCourseService; + public final CurriculumService curriculumService; + public final CourseService courseService; + public final ExternalCurriculumRepository externalCurriculumRepository; + public final InscriptionService inscriptionService; +<<<<<<< HEAD +======= + + public final LessonService lessonService; + public final ScheduleService scheduleService; + public final ScheduleLessonService scheduleLessonService; + + public final LessonRequestService lessonRequestService; + ArrayList mockUsers; +>>>>>>> origin/master + + public final ResearchesService researchesService; + public final UserCurriculumRepository ucr; + public final MinervalRepository minervalRepository; + public final ScholarshipRequestRepository scholarshipRequestRepository; + +<<<<<<< HEAD + ArrayList mockUsers; + public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, ResearchesService researchesService, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){ +======= + public final UnregisterRequestRepository uninscriptionRequestRepository; + public MockController(UserService userService, UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository, UnregisterRequestRepository unregisterRequestRepository, LessonService lessonService, ScheduleService scheduleService, ScheduleLessonService scheduleLessonService, LessonRequestService lessonRequestService){ + this.userService = userService; +>>>>>>> origin/master + this.tokenRepo = tokenRepo; + this.userRepo = userRepo; + this.tokenService = tokenService; + this.CurriculumCourseService = CurriculumCourseService; + this.curriculumService = curriculumService; + this.courseService = courseService; + this.externalCurriculumRepository = externalCurriculumRepository; + this.inscriptionService = inscriptionService; +<<<<<<< HEAD + this.researchesService = researchesService; +======= + this.lessonService = lessonService; + this.scheduleService = scheduleService; + this.scheduleLessonService = scheduleLessonService; + this.lessonRequestService = lessonRequestService; +>>>>>>> origin/master + this.ucr = ucr; + this.minervalRepository = minervalRepository; + this.scholarshipRequestRepository = scholarshipRequestRepository; + this.uninscriptionRequestRepository = unregisterRequestRepository; + } + + /** Saves an example of each user type by : + * email : FooRole@FooRole.com, password : FooRole and token : FooRole + * For example the admin as "admin@admin.com" as email and "admin" as both password and token + * They all have silly names + */ + + @PostMapping("/mock") + public void postMock() { + +<<<<<<< HEAD + // user part + User herobrine = new User("brine", "hero", "admin@admin.com", "behind", "ShadowsLand", new Date(0), null, Role.Admin, passwordEncoder.encode("admin")); + User joe = new User("Mama", "Joe", "student@student.com", "roundabout", "England", new Date(0), null, Role.Student, passwordEncoder.encode("student")); + User meh = new User("Polo", "Marco", "secretary@secretary.com", "a Box", "Monaco", new Date(0), null, Role.Secretary, passwordEncoder.encode("secretary")); + User joke = new User("Gaillard", "Corentin", "teacher@teacher.com", "lab", "faculty", new Date(0), null, Role.Teacher, passwordEncoder.encode("teacher")); + User jojo = new User("Bridoux", "Justin", "teacher2@teacher2.com", "lab", "faculty", new Date(0), null, Role.Teacher, passwordEncoder.encode("teacher")); + User lena = new User("Louille", "Lena", "inscriptionService@InscriptionService.com", "no", "yes", new Date(0), null, Role.InscriptionService, passwordEncoder.encode("inscriptionService")); + User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi")); + mockUsers = new ArrayList<>(Arrays.asList(herobrine, joe, meh, joke, lena, jojo, popo)); + + userRepo.saveAll(mockUsers); +======= + // user part + User herobrine = new User("brine","hero","admin@admin.com","behind","ShadowsLand",new Date(0), null,Role.Admin,"admin"); + User joe = new User("Mama","Joe","student@student.com","roundabout","England",new Date(0), null,Role.Student,"student"); + User meh = new User("Polo","Marco","secretary@secretary.com","a Box","Monaco",new Date(0), null,Role.Secretary,"secretary"); + User joke = new User("Gaillard","Corentin","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,"teacher"); + User jojo = new User("Bridoux","Justin","teacher2@teacher2.com","lab","faculty",new Date(0), null,Role.Teacher,"teacher"); + User lena = new User("Louille","Lena","inscriptionService@InscriptionService.com","no","yes",new Date(0), null,Role.InscriptionService,"inscriptionService"); + User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, "jesuispaulleroi"); + mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo)); + + userService.saveAll(mockUsers); + + ExternalCurriculum externalCurriculum = new ExternalCurriculum(null, "HEH", "Bachelier en ingénieur", "completed", 2015, 2017, null, joe); + externalCurriculumRepository.save(externalCurriculum); +>>>>>>> origin/master + + Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023); + minervalRepository.save(minerval); + // Course / Curriculum part + +<<<<<<< HEAD + Curriculum infoBab1 = new Curriculum(1, "info"); + Curriculum chemistryBab1 = new Curriculum(1, "chemistry"); + Curriculum psychologyBab1 = new Curriculum(1, "psychology"); + Curriculum infoBab2 = new Curriculum(2, "info"); + Curriculum masterinfo1 = new Curriculum(4, "info"); + Curriculum masterinfo2 = new Curriculum(5, "info"); + + curriculumService.save(infoBab1); + curriculumService.save(chemistryBab1); + curriculumService.save(psychologyBab1); + curriculumService.save(infoBab2); + curriculumService.save(masterinfo1); + curriculumService.save(masterinfo2); + + ucr.save(new UserCurriculum(joe, infoBab1, 2022)); + ucr.save(new UserCurriculum(joe, chemistryBab1, 2023)); + ucr.save(new UserCurriculum(joe, infoBab1, 2023)); + ucr.save(new UserCurriculum(joe, psychologyBab1, 2020)); + ucr.save(new UserCurriculum(popo, infoBab1, 2022)); + ucr.save(new UserCurriculum(popo, infoBab2, 2023)); + + Course progra1 = new Course(5, "Programmation et algorithmique 1", joke); + Course chemistry1 = new Course(12, "Thermochimie", joke); + Course psycho1 = new Course(21, "Neuroreaction of isolated brain cells", joke); + Course commun = new Course(2, "cours commun", joke); +======= + Curriculum infoBab1 = new Curriculum(1,"info", false); + Curriculum chemistryBab1 = new Curriculum(1,"chemistry", false); + Curriculum psychologyBab1 = new Curriculum(1,"psychology", false); + Curriculum infoBab2 = new Curriculum(2,"info", false); + Curriculum masterinfo1 = new Curriculum(4, "info", false); + Curriculum masterinfo2 = new Curriculum(5, "info", false); + Curriculum chemistryBab2 = new Curriculum(2, "chemistry", false); + Curriculum ingebab1 = new Curriculum(1, "ingénieur", true); + + curriculumService.save(infoBab1); + curriculumService.save(chemistryBab1); + curriculumService.save(psychologyBab1); + curriculumService.save(infoBab2); + curriculumService.save(masterinfo1); + curriculumService.save(masterinfo2); + curriculumService.save(chemistryBab2); + curriculumService.save(ingebab1); + + ucr.save(new UserCurriculum(joe, infoBab1, 2022, false)); + ucr.save(new UserCurriculum(joe, chemistryBab1, 2023, true)); + ucr.save(new UserCurriculum(joe, infoBab1, 2023, true)); + ucr.save(new UserCurriculum(joe, psychologyBab1, 2020, false)); + ucr.save(new UserCurriculum(popo, infoBab1, 2022, false)); + ucr.save(new UserCurriculum(popo, infoBab2, 2023, true)); + + Course progra1 = new Course(5,"Programmation et algorithmique 1",joke); + Course chemistry1 = new Course(12, "Thermochimie",jojo); + Course psycho1 = new Course(21, "Neuroreaction of isolated brain cells",joke); + Course commun = new Course(2, "cours commun",joke); +>>>>>>> origin/master + + courseService.save(progra1); + courseService.save(chemistry1); + courseService.save(psycho1); + courseService.save(commun); + + ScholarshipRequest ssr1 = new ScholarshipRequest(joe, RequestState.Pending, 0, new Date(), "test", "test"); + scholarshipRequestRepository.save(ssr1); + +<<<<<<< HEAD + CurriculumCourseService.save(new CurriculumCourse(infoBab1, progra1)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1, commun)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1, psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1, psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1, commun)); + +======= + CurriculumCourseService.save(new CurriculumCourse(infoBab1,progra1)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1,commun)); + CurriculumCourseService.save(new CurriculumCourse(infoBab1, psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1,psycho1)); + CurriculumCourseService.save(new CurriculumCourse(psychologyBab1,commun)); + CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, chemistry1)); +>>>>>>> origin/master + + CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, commun)); + CurriculumCourseService.save(new CurriculumCourse(chemistryBab1, chemistry1)); + +<<<<<<< HEAD + + InscriptionRequest inscriptionRequest = new InscriptionRequest("helen", "prenom", "non", "helen@gmail.com", "america", new Date(), (long) 4, RequestState.Pending, "yes.png", "password", null, new Date(), RequestState.Pending); +======= + InscriptionRequest inscriptionRequest = new InscriptionRequest("helen","prenom","non","helen@gmail.com","america",new Date(),(long) 4,RequestState.Pending,"yes.png","password", null, new Date(), RequestState.Pending, null); +>>>>>>> origin/master + + inscriptionService.save(inscriptionRequest); + ExternalCurriculum externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null); + externalCurriculumRepository.save(externalCurriculum); + + /////////////////////////// + // extension Publications Scientifiques + Researcher jojoResearcherAccount = new Researcher(jojo, "3363-22555-AB33-T", null, "IT"); + + Researcher joResearchAccount = new Researcher(joe,"N555-321213-BED-DD",null, "Physics"); + + + Researcher output = researchesService.saveResearcher(jojoResearcherAccount); + Researcher joOutput = researchesService.saveResearcher(joResearchAccount); + + Set coAuthor = new HashSet<>(); + coAuthor.add(joOutput); + + Research jojoResearch = new Research("Graphs : Advanced Search Algorithms", output, new Date(0), + PaperType.Article, "test.pdf", null, "english", + Access.OpenSource, "IT", "This Article's title speaks for itself \n We'll discuss about advanced Graph search Algorithms",coAuthor); + Research restrictedResearch = new Research("just another Name", output, new Date(1111111111), + PaperType.Article, "restricted", null, "english", + Access.Restricted, "Restricted", "This Article's title speaks for itself\n We'll discuss about advanced Graph search Algorithms", new HashSet<>()); + + Research privateResearch = new Research("the great Potato War", output, new Date(), + PaperType.Article, "private", null, "english", + Access.Private, "private", "This Article's title speaks for itself\n We'll discuss about advanced Graph search Algorithms",null); + + + researchesService.saveResearch(restrictedResearch); + researchesService.saveResearch(privateResearch); + researchesService.saveResearch(jojoResearch); + +<<<<<<< HEAD +======= + + //Schedule part + + Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 22 2024 08:15", "Mon Apr 22 2024 10:15","rgb(0,50,100)","A0B2","Course"); + Lesson lesson_0_chemistry1 = new Lesson(chemistry1, "Wed Mar 27 2024 08:15", "Wed Mar 27 2024 09:15","rgb(100,50,0)","A0B2","TP"); + Lesson lesson_0_psycho1 = new Lesson(psycho1, "Sun Mar 24 2024 10:30 ","Sun Mar 24 2024 12:30 ","rgb(100,50,100)", "A0B2","TD"); + Lesson lesson_1_progra1 = new Lesson(progra1, "Mon Apr 02 2024 13:30", "Mon Apr 02 2024 15:30","rgb(0,50,100)","A0B2","TP"); + Lesson lesson_0_commun = new Lesson(commun, "Mon Apr 01 2024 10:30", "Mon Apr 01 2024 12:30","rgb(0,50,100)","A0B2","Course"); + + LessonChangesRequest request1 = new LessonChangesRequest(joke,RequestState.Pending,null,null,null,null,2,null,1); + LessonChangesRequest request2 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 10:30 ","Fri Apr 19 2024 12:30 ",null,null,1,null,2); + LessonChangesRequest request3 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 13:30 ","Fri Apr 19 2024 15:30 ","Course",progra1,0,"rgb(27,49,100)",4); + + + Schedule infoBab1Schedule = new Schedule(infoBab1); + Schedule chemistryBab1Schedule = new Schedule(chemistryBab1); + Schedule psychoBab1Schedule = new Schedule(psychologyBab1); + + + scheduleService.save(infoBab1Schedule); + scheduleService.save(chemistryBab1Schedule); + scheduleService.save(psychoBab1Schedule); + + lessonService.save(lesson_0_progra1); + lessonService.save(lesson_0_chemistry1); + lessonService.save(lesson_0_commun); + lessonService.save(lesson_0_psycho1); + lessonService.save(lesson_1_progra1); + + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_0_progra1)); + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_1_progra1)); + scheduleLessonService.save(new ScheduleLesson(infoBab1Schedule,lesson_0_commun)); + + scheduleLessonService.save(new ScheduleLesson(chemistryBab1Schedule,lesson_0_chemistry1)); + scheduleLessonService.save(new ScheduleLesson(chemistryBab1Schedule,lesson_0_commun)); + + scheduleLessonService.save(new ScheduleLesson(psychoBab1Schedule,lesson_0_psycho1)); + scheduleLessonService.save(new ScheduleLesson(psychoBab1Schedule,lesson_0_commun)); + + + lessonRequestService.save(request1); + lessonRequestService.save(request2); + lessonRequestService.save(request3); + + UnregisterRequest unregisterRequest = new UnregisterRequest(RequestState.Pending, "je veux partir", new Date(), joe.getRegNo(), joe.getFirstName(), joe.getLastName(), joe.getEmail(), null); + uninscriptionRequestRepository.save(unregisterRequest); + + externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null); + externalCurriculumRepository.save(externalCurriculum); +>>>>>>> origin/master + } +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Msg/ForumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Msg/ForumController.java new file mode 100644 index 0000000..d14265d --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/Msg/ForumController.java @@ -0,0 +1,113 @@ +package ovh.herisson.Clyde.EndPoints.Msg; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.websocket.server.PathParam; +import lombok.AllArgsConstructor; +import ovh.herisson.Clyde.Repositories.CourseRepository; +import ovh.herisson.Clyde.Repositories.Msg.AnswerRepository; +import ovh.herisson.Clyde.Repositories.Msg.ForumRepository; +import ovh.herisson.Clyde.Repositories.Msg.TopicRepository; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.CourseService; +import ovh.herisson.Clyde.Services.Msg.ForumService; +import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.Token; +import ovh.herisson.Clyde.Tables.User; +import ovh.herisson.Clyde.Tables.Msg.Answer; +import ovh.herisson.Clyde.Tables.Msg.Forum; +import ovh.herisson.Clyde.Tables.Msg.Topic; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +@AllArgsConstructor +public class ForumController { + + private CourseRepository courseRepo; + private AuthenticatorService authServ; + private ForumService forumServ; + private ForumRepository forumRepo; + private TopicRepository topicRepo; + + //// Endpoints to get and create new forums + + @GetMapping("/forums/{id}") + public ResponseEntity> getForumFromCourseId(@RequestHeader("Authorization") String token, @PathVariable long id){ + User u = authServ.getUserFromToken(token); + if(u == null){ + return new UnauthorizedResponse<>(null); + } + return new ResponseEntity<>(courseRepo.findById(id).getForums(), HttpStatus.OK); + } + + @PostMapping("/forums/{id}") + public ResponseEntity createForumOfCourse(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Forum data){ + User u = authServ.getUserFromToken(token); + Course c = courseRepo.findById(id); + if(!(c.getOwner().equals(u) || u.getRole() == Role.Admin)){ + return new UnauthorizedResponse<>(null); + } + forumServ.createForum(c, data); + return new ResponseEntity<>(HttpStatus.ACCEPTED); + } + + //// Endpoints to get and create forum's topic + + @GetMapping("/forum/{id}") + public ResponseEntity> getTopicsFromForumId(@RequestHeader("Authorization") String token, @PathVariable long id){ + User u = authServ.getUserFromToken(token); + if(u == null){ + return new UnauthorizedResponse<>(null); + } + return new ResponseEntity<>(forumRepo.findById(id).orElse(null).getTopics(), HttpStatus.OK); + } + + @PostMapping("/forum/{id}") + public ResponseEntity postTopicToForum(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Topic data){ + User u = authServ.getUserFromToken(token); + Forum f = forumRepo.findById(id).orElse(null); + if(!(f.getWriters().contains(u) || f.getCourse().getOwner().equals(u) || u.getRole() == Role.Admin)){ + return new UnauthorizedResponse<>(null); + } + forumServ.createTopic(f, data); + return new ResponseEntity<>(HttpStatus.ACCEPTED); + } + + //// Endpoints related to topics and messages + + @GetMapping("/forum/post/{id}") + public ResponseEntity getPost(@RequestHeader("Authorization") String token, @PathVariable long id){ + User u = authServ.getUserFromToken(token); + if(u == null){ + return new UnauthorizedResponse<>(null); + } + Topic t = topicRepo.findById(id).orElse(null); + return new ResponseEntity<>(t, HttpStatus.OK); + } + + @PostMapping("/forum/post/{id}") + public ResponseEntity postTopicToForum(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Answer data){ + User u = authServ.getUserFromToken(token); + Topic t = topicRepo.findById(id).orElse(null); + if(t.isLocked() && u.getRole() != Role.Admin){ + return new UnauthorizedResponse<>(null); + } + System.out.println(data); + forumServ.answerTopic(t, data, u); + return new ResponseEntity<>(HttpStatus.ACCEPTED); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/NotificationController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/NotificationController.java new file mode 100644 index 0000000..106b48a --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/NotificationController.java @@ -0,0 +1,61 @@ +package ovh.herisson.Clyde.EndPoints; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import lombok.AllArgsConstructor; +import ovh.herisson.Clyde.Repositories.NotificationRepository; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Tables.Notification; +import ovh.herisson.Clyde.Tables.User; +import ovh.herisson.Clyde.Tables.Notification.Status; + +@RestController +@AllArgsConstructor +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class NotificationController { + + private AuthenticatorService authServ; + private NotificationRepository notifRepo; + + @GetMapping("/notifications") + public ResponseEntity> getNotifications(@RequestHeader("Authorization") String token){ + User u = authServ.getUserFromToken(token); + if(u == null){ + return new UnauthorizedResponse<>(null); + } + ArrayList ret = new ArrayList<>(); + for (Notification n : u.getNotifications()) { + if(!n.getStatus().equals(Status.Archived)){ + ret.add(n); + } + } + return new ResponseEntity<>(ret, HttpStatus.OK); + + } + + @PostMapping("/notifications/{id}") + public ResponseEntity archiveNotification(@RequestHeader("Authorization") String token, @PathVariable long id){ + User u = authServ.getUserFromToken(token); + Notification n = notifRepo.findById(id).orElse(null); + if(u == null || n.getUser() != u){ + return new UnauthorizedResponse<>(null); + } + + n.setStatus(Status.Archived); + notifRepo.save(n); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java new file mode 100644 index 0000000..113b513 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java @@ -0,0 +1,116 @@ +package ovh.herisson.Clyde.EndPoints; + +/****************************************************** + * @file ScheduleController.java + * @author William Karpinski + * @scope Extension Horaire + * + * Controller of Schedule API + ******************************************************/ + + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.AuthenticatorService; +import ovh.herisson.Clyde.Services.ScheduleLessonService; +import ovh.herisson.Clyde.Services.ScheduleService; +import ovh.herisson.Clyde.Services.UserCurriculumService; +import ovh.herisson.Clyde.Services.CurriculumService; +import ovh.herisson.Clyde.Tables.*; +import ovh.herisson.Clyde.Services.LessonService; + +import java.util.Map; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +public class ScheduleController { + + private final ScheduleService scheduleServ; + private final LessonService lessonServ; + + private final CurriculumService curriculumServ; + private final AuthenticatorService authServ; + + private final ScheduleLessonService scheduleLessonServ; + + public ScheduleController(ScheduleService scheduleServ, AuthenticatorService authServ, ScheduleLessonService scheduleLessonServ, CurriculumService curriculumServ,LessonService lessonServ) { + this.scheduleServ = scheduleServ; + this.authServ = authServ; + this.scheduleLessonServ = scheduleLessonServ; + this.curriculumServ = curriculumServ; + this.lessonServ = lessonServ; + } + /** + * Return schedule via its id + */ + @GetMapping("/schedule/{id}") + public ResponseEntity> findById(@PathVariable long id){ + Schedule schedule = scheduleServ.findById(id); + + if(schedule == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(scheduleLessonServ.getDepthScheduleBySchedule(schedule),HttpStatus.OK); + } + + /** + * Return a schedule via its curriculum id + */ + @GetMapping("/schedule/curriculum/{id}") + public ResponseEntity> findCurriculumSchedule(@PathVariable Long id){ + Schedule schedule = scheduleLessonServ.getScheduleByCurriculum(curriculumServ.findById(id)); + if(schedule == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(scheduleLessonServ.getDepthScheduleBySchedule(schedule),HttpStatus.OK); + } + /** + * Return all schedules + */ + @GetMapping("/schedules") + public ResponseEntity>> findAllSchedule(){ + return new ResponseEntity<>(scheduleLessonServ.getAllSchedule(),HttpStatus.OK); + } + /** + * Post a new schedule + */ + @PostMapping("/schedule") + public ResponseEntity postSchedule(@RequestHeader("Authorization") String token, + @RequestBody Schedule schedule){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + return new ResponseEntity<>(scheduleServ.save(schedule),HttpStatus.OK); + } + /** + * Post a lesson to a schedule + */ + @PostMapping("/schedule/{id}") + public ResponseEntity postLessonToSchedule(@RequestHeader("Authorization") String token, + @RequestBody Long lessonId, + @PathVariable long id) + { + + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + + if (!scheduleLessonServ.save(new ScheduleLesson( scheduleServ.findById(id), lessonServ.findById(lessonId)))) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(HttpStatus.OK); + } + /** + * Delete a lesson from a schedule + */ + @DeleteMapping("/schedule/lesson/{id}") + public ResponseEntity deleteLessonFromSchedule(@RequestHeader("Authorization") String token, + @RequestBody Long lessonId, + @PathVariable Long id) + { + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + if (!scheduleLessonServ.delete(lessonId)) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java index 0496c59..1292ad1 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java @@ -104,9 +104,6 @@ public class UserController { @GetMapping("/teachers") public ResponseEntity>> getAllTeachers(@RequestHeader("Authorization") String token){ - if (authServ.getUserFromToken(token) == null) - return new UnauthorizedResponse<>(null); - Iterable teachers = userService.getAllTeachers(); return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(teachers), HttpStatus.OK); diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/CurriculumCourseRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/CurriculumCourseRepository.java index c99f50b..b8dfc14 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/CurriculumCourseRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/CurriculumCourseRepository.java @@ -1,5 +1,7 @@ package ovh.herisson.Clyde.Repositories; +import jakarta.transaction.Transactional; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.Course; @@ -11,7 +13,15 @@ public interface CurriculumCourseRepository extends CrudRepository findCoursesByCurriculum(Curriculum curriculum); + @Query("select distinct cc.curriculum from CurriculumCourse cc where cc.course = ?1") + Iterable findCurriculumByCourses(Course course); @Query("select distinct cc.curriculum from CurriculumCourse cc") Iterable findDistinctCurriculums(); + + @Modifying + @Transactional + @Query("delete from CurriculumCourse cc where cc.course =?1") + void delete(Course course); + } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ChangeCurriculumRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ChangeCurriculumRequestRepository.java new file mode 100644 index 0000000..0248e43 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ChangeCurriculumRequestRepository.java @@ -0,0 +1,9 @@ +package ovh.herisson.Clyde.Repositories.Inscription; + +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.ChangeCurriculumRequest; + +public interface ChangeCurriculumRequestRepository extends CrudRepository { + ChangeCurriculumRequest findById(long id); +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ExemptionsRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ExemptionsRequestRepository.java index 3f66e80..7682d11 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ExemptionsRequestRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ExemptionsRequestRepository.java @@ -2,7 +2,12 @@ package ovh.herisson.Clyde.Repositories.Inscription; import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.Inscription.ExemptionsRequest; +import ovh.herisson.Clyde.Tables.User; + +import java.util.ArrayList; public interface ExemptionsRequestRepository extends CrudRepository { + ExemptionsRequest findById(long id); + ArrayList findByUser(User user); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ScholarshipRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ScholarshipRequestRepository.java index 5550937..c0c1407 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ScholarshipRequestRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/ScholarshipRequestRepository.java @@ -4,5 +4,5 @@ import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.Inscription.ScholarshipRequest; public interface ScholarshipRequestRepository extends CrudRepository { - + public ScholarshipRequest findById(long id); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UninscriptionRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UninscriptionRequestRepository.java deleted file mode 100644 index 6d38b8c..0000000 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UninscriptionRequestRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ovh.herisson.Clyde.Repositories.Inscription; - -import org.springframework.data.repository.CrudRepository; -import ovh.herisson.Clyde.Tables.Inscription.UninscriptionRequest; - -public interface UninscriptionRequestRepository extends CrudRepository { -} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UnregisterRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UnregisterRequestRepository.java new file mode 100644 index 0000000..f6a4ebc --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Inscription/UnregisterRequestRepository.java @@ -0,0 +1,8 @@ +package ovh.herisson.Clyde.Repositories.Inscription; + +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.Inscription.UnregisterRequest; + +public interface UnregisterRequestRepository extends CrudRepository { + public UnregisterRequest findById(long l); +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonChangesRequestRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonChangesRequestRepository.java new file mode 100644 index 0000000..4f732d6 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonChangesRequestRepository.java @@ -0,0 +1,23 @@ +package ovh.herisson.Clyde.Repositories; + +/****************************************************** + * @file LessonChangesRequestRepository.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.LessonChangesRequest; +import ovh.herisson.Clyde.Tables.User; + +public interface LessonChangesRequestRepository extends CrudRepository { + LessonChangesRequest findById(long id); + + + @Query("select lr from LessonChangesRequest lr where lr.user = ?1") + Iterable findOwnRequests(User user); + + @Query("select lr from LessonChangesRequest lr where lr.lessonId = ?1") + Iterable findRequestByLessonId(long id); +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonRepository.java new file mode 100644 index 0000000..6d80ef8 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/LessonRepository.java @@ -0,0 +1,20 @@ +package ovh.herisson.Clyde.Repositories; + +/****************************************************** + * @file LessonRepository.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.Lesson; + +public interface LessonRepository extends CrudRepository { + + Lesson findById(long id); + + @Query("select l from Lesson l where l.course = ?1") + Iterable findLessonByCourse(Course course); +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/AnswerRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/AnswerRepository.java new file mode 100644 index 0000000..0ca5e22 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/AnswerRepository.java @@ -0,0 +1,10 @@ +package ovh.herisson.Clyde.Repositories.Msg; + +import org.springframework.data.repository.CrudRepository; + +import ovh.herisson.Clyde.Tables.Msg.Answer; + +public interface AnswerRepository extends CrudRepository { + +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/ForumRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/ForumRepository.java new file mode 100644 index 0000000..07afe54 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/ForumRepository.java @@ -0,0 +1,9 @@ +package ovh.herisson.Clyde.Repositories.Msg; + +import org.springframework.data.repository.CrudRepository; + +import ovh.herisson.Clyde.Tables.Msg.Forum; + +public interface ForumRepository extends CrudRepository { + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/TopicRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/TopicRepository.java new file mode 100644 index 0000000..905cd01 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/Msg/TopicRepository.java @@ -0,0 +1,10 @@ +package ovh.herisson.Clyde.Repositories.Msg; + +import org.springframework.data.repository.CrudRepository; + +import ovh.herisson.Clyde.Tables.Msg.Topic; + +public interface TopicRepository extends CrudRepository { + +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/NotificationRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/NotificationRepository.java new file mode 100644 index 0000000..a9f9546 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/NotificationRepository.java @@ -0,0 +1,8 @@ +package ovh.herisson.Clyde.Repositories; + +import org.springframework.data.repository.CrudRepository; + +import ovh.herisson.Clyde.Tables.Notification; + +public interface NotificationRepository extends CrudRepository {} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java new file mode 100644 index 0000000..97e69ca --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java @@ -0,0 +1,30 @@ +package ovh.herisson.Clyde.Repositories; + +/****************************************************** + * @file ScheduleLessonRepository.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ +import jakarta.transaction.Transactional; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.Curriculum; +import ovh.herisson.Clyde.Tables.Lesson; +import ovh.herisson.Clyde.Tables.Schedule; +import ovh.herisson.Clyde.Tables.ScheduleLesson; + +public interface ScheduleLessonRepository extends CrudRepository { + + @Query("select distinct sl.lesson from ScheduleLesson sl where sl.schedule.curriculum = ?1") + Iterable findLessonByCurriculum(Curriculum curriculum); + + @Query("select distinct sl.schedule from ScheduleLesson sl where sl.schedule.curriculum = ?1") + Schedule findScheduleByCurriculum(Curriculum curriculum); + + @Modifying + @Transactional + @Query("delete from ScheduleLesson sl where sl.lesson =?1") + void delete(Lesson lesson); + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleRepository.java new file mode 100644 index 0000000..04f3cde --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleRepository.java @@ -0,0 +1,22 @@ +package ovh.herisson.Clyde.Repositories; + +/****************************************************** + * @file ScheduleRepository.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.Lesson; +import ovh.herisson.Clyde.Tables.Schedule; + +public interface ScheduleRepository extends CrudRepository { + + Schedule getById(long id); + + + @Query("select distinct sl from Schedule sl where EXISTS (select c.curriculum from CurriculumCourse c where (sl.curriculum = c.curriculum) AND (c.course = ?1))") + Iterable findAllLessonSchedule(Course course); +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java index 2f1c2a3..0e119f1 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java @@ -14,4 +14,8 @@ public interface UserCurriculumRepository extends CrudRepository findByUserOrderByCurriculum(User student); + UserCurriculum findByUserAndCurriculumAndActual(User user, Curriculum curriculum, boolean actual); + + ArrayList findByUserAndActual(User user, boolean actual); + } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java index 9e517b7..8da5536 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java @@ -24,7 +24,6 @@ public class AuthenticatorService { return tokenService.getUserFromToken(token); } - public String login(String identifier, String password, Date expirationDate){ User user = userService.getUser(identifier); if (user == null){return null;} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java index 19549d0..c9b92db 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java @@ -46,11 +46,15 @@ public class CurriculumCourseService { toReturn.put("curriculumId", curriculum.getCurriculumId()); toReturn.put("year", curriculum.getYear()); toReturn.put("option", curriculum.getOption()); - + toReturn.put("requireCertificate", curriculum.isRequireCertificate()); return toReturn; } + public Iterable findCurriculumByCourses(Course course){ + return curriculumCourseRepo.findCurriculumByCourses(course); + } + public Iterable> getAllDepthCurriculum(){ ArrayList> toReturn = new ArrayList<>(); diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/Inscription/InscriptionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/Inscription/InscriptionService.java index c80e2d9..d641df9 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/Inscription/InscriptionService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/Inscription/InscriptionService.java @@ -1,17 +1,18 @@ package ovh.herisson.Clyde.Services.Inscription; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import ovh.herisson.Clyde.Repositories.*; import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository; import ovh.herisson.Clyde.Repositories.Inscription.InscriptionRepository; import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository; +import ovh.herisson.Clyde.Services.UserService; import ovh.herisson.Clyde.Tables.*; import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum; import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; import ovh.herisson.Clyde.Tables.Inscription.Minerval; import java.util.ArrayList; +import java.util.Calendar; @Service public class InscriptionService { @@ -25,20 +26,20 @@ public class InscriptionService { private final CurriculumRepository curriculumRepo; private final MinervalRepository minervalRepository; - private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); private final ExternalCurriculumRepository externalCurriculumRepository; + private final UserService userService; - public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository){ + public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository, UserService userService){ this.inscriptionRepo = inscriptionRepo; this.userRepo = userRepo; this.userCurriculumRepo = userCurriculumRepo; this.curriculumRepo = curriculumRepo; this.minervalRepository = minervalRepository; this.externalCurriculumRepository = externalCurriculumRepository; + this.userService = userService; } public InscriptionRequest save(InscriptionRequest inscriptionRequest){ - inscriptionRequest.setPassword(passwordEncoder.encode(inscriptionRequest.getPassword())); return inscriptionRepo.save(inscriptionRequest); } @@ -56,6 +57,11 @@ public class InscriptionService { if (inscrRequest == null) return false; + //If the request is already accepted we just return ok (otherwise we would duplicate the procedure below) + if (inscrRequest.getState() == RequestState.Accepted){ + return true; + } + inscrRequest.setState(requestState); save(inscrRequest); @@ -81,11 +87,13 @@ public class InscriptionService { inscrRequest.getCountry(), inscrRequest.getBirthDate(), inscrRequest.getProfilePicture(), - inscrRequest.getPassword() + inscrRequest.getPassword(), + inscrRequest.getIdentityCard() ); - userRepo.save(userFromRequest); - userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),0)); + userService.save(userFromRequest); + Calendar c = Calendar.getInstance(); + userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),c.get(Calendar.YEAR), true)); //Create a minerval for the new student Minerval minerval = new Minerval(userFromRequest.getRegNo(), 0, 852, 2023); diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/LessonRequestService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonRequestService.java new file mode 100644 index 0000000..21a6732 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonRequestService.java @@ -0,0 +1,177 @@ +package ovh.herisson.Clyde.Services; + +/****************************************************** + * @file LeessonRequestService.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Repositories.*; +import ovh.herisson.Clyde.Tables.*; + +import java.util.Map; + +@Service +public class LessonRequestService { + private final LessonChangesRequestRepository lessonChangesRepo; + + private final UserRepository userRepo; + + private final LessonRepository lessonRepo; + + private final LessonService lessonServ; + + private final ScheduleLessonRepository scheduleLessonRepo; + + private final ScheduleRepository scheduleRepository; + + private final ScheduleLessonService scheduleLessonService; + + private final UserService userServ; + + private final CourseRepository courseRepository; + public LessonRequestService(LessonChangesRequestRepository lessonChangesRepo, + UserRepository userRepo, LessonRepository lessonRepo, + LessonService lessonServ, ScheduleLessonRepository scheduleLessonRepo, + ScheduleRepository scheduleRepository, ScheduleLessonService scheduleLessonService, + UserService userServ, CourseRepository courseRepository) { + this.lessonChangesRepo = lessonChangesRepo; + this.userRepo = userRepo; + this.lessonRepo = lessonRepo; + this.lessonServ = lessonServ; + this.scheduleLessonRepo = scheduleLessonRepo; + this.scheduleRepository = scheduleRepository; + this.scheduleLessonService = scheduleLessonService; + this.userServ = userServ; + this.courseRepository = courseRepository; + } + + /** + * Create a new lesson request + */ + public LessonChangesRequest save(LessonChangesRequest lessonRequest){ + return lessonChangesRepo.save(lessonRequest); + } + + /** + * Find all the requests made by a user + */ + public Iterable findOwnRequests(User user){ + return lessonChangesRepo.findOwnRequests(user); + } + public LessonChangesRequest findById(long id){ + return lessonChangesRepo.findById(id); + } + /** + * Return all the requests + */ + public Iterable getAll(){return lessonChangesRepo.findAll();} + + /** + * Create a lesson if a request is accepted + */ + public boolean modifyCreateRequestState(LessonChangesRequest lessonRequest, RequestState state, String local ){ + if(lessonRequest == null || state == lessonRequest.getState() || state == null){ + return false;} + if (state == RequestState.Accepted){ + Course course = courseRepository.findById(lessonRequest.getCourse().getCourseID()); + if(courseRepository.findById(lessonRequest.getCourse().getCourseID())==null|| local == null){ + return false;} + Lesson lesson = new Lesson(); + lesson.setCourse(course); + lesson.setLessonStart(lessonRequest.getLessonStart()); + lesson.setLessonEnd(lessonRequest.getLessonEnd()); + lesson.setColor(lessonRequest.getColor()); + lesson.setLocal(local); + lesson.setLessonType(lessonRequest.getLessonType()); + + lesson = lessonRepo.save(lesson); + scheduleLessonService.saveToAllSchedule(lesson); + } + lessonRequest.setState(state); + save(lessonRequest); + return true; + } + + public Iterable findRequestByLessonId(long id){ + return lessonChangesRepo.findRequestByLessonId(id); + } + + /** + * Refuse all the lesson request that depends on a certain lesson + * Used after the deletion of the lesson + */ + public void refuseAllByLessonId(long id){ + Iterable toRefuse = findRequestByLessonId(id); + for(LessonChangesRequest element : toRefuse) + element.setState(RequestState.Refused); + + } + + /** + * Modify a lesson if a request is accepted + */ + public boolean modifyChangeRequestState(Map updates, long lessonId,RequestState state){ + if(state == RequestState.Accepted){ + Lesson lesson = lessonServ.findById(lessonId); + return lessonServ.modifyData(lesson.getLessonID(),updates); + } + return true; + } + + /** + * Delete a lesson if a request is accepted + */ + public void modifyDeleteRequest(LessonChangesRequest lessonChangesRequest, RequestState state){ + if(state == RequestState.Accepted){ + lessonServ.delete(lessonServ.findById(lessonChangesRequest.getLessonId())); + refuseAllByLessonId(lessonChangesRequest.getLessonId()); + } + } + + /** + * Construct a lesson request + */ + public LessonChangesRequest createLessonRequest(Map lessonInfos) { + LessonChangesRequest target = new LessonChangesRequest(); + + for (Map.Entry entry : lessonInfos.entrySet()) { + System.out.println(entry.toString()); + if(entry.getValue() != null){ + switch (entry.getKey()) { + case "requestType": + target.setRequestType((int) entry.getValue()); + break; + case "lessonStart": + target.setLessonStart((String) entry.getValue()); + break; + case "lessonEnd": + target.setLessonEnd((String) entry.getValue()); + break; + case "color": + target.setColor((String) entry.getValue()); + break; + case "user": + target.setUser(userServ.getUserById((int) entry.getValue())); + break; + case "lessonType": + target.setLessonType((String) entry.getValue()); + break; + case "course": + target.setCourse(courseRepository.findById((int) entry.getValue())); + break; + case "lessonId": + target.setLessonId((int) entry.getValue()); + break; + + } + } + } + target.setState(RequestState.Pending); + return target; + } + + public void delete (LessonChangesRequest toDelete) { + lessonChangesRepo.delete(toDelete); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java new file mode 100644 index 0000000..292a6a6 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java @@ -0,0 +1,150 @@ +package ovh.herisson.Clyde.Services; + + +/****************************************************** + * @file LessonService.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Repositories.CourseRepository; +import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository; +import ovh.herisson.Clyde.Repositories.LessonRepository; +import ovh.herisson.Clyde.Repositories.UserCurriculumRepository; +import ovh.herisson.Clyde.Tables.*; + +import java.util.ArrayList; +import java.util.Map; + +@Service +public class LessonService { + private final LessonRepository lessonRepo; + private final UserCurriculumRepository userCurriculumRepo; + private final CourseRepository courseRepo; + private final CurriculumCourseRepository curriculumCourseRepo; + public LessonService(LessonRepository lessonRepo, UserCurriculumRepository userCurriculumRepo, CourseRepository courseRepo, CurriculumCourseRepository curriculumCourseRepo){ + this.lessonRepo = lessonRepo; + this.userCurriculumRepo = userCurriculumRepo; + this.courseRepo = courseRepo; + this.curriculumCourseRepo = curriculumCourseRepo; + } + + /** + * Create a lesson + */ + public Lesson save(Lesson lesson){ + return lessonRepo.save(lesson); + } + /** + * Find a lesson by its id + */ + public Lesson findById(long id){ + return lessonRepo.findById(id); + } + /** + * Return all the lessons + */ + public Iterable findAll(){return lessonRepo.findAll();} + /** + * Return all a teacher's lessons + */ + public Iterable findAllOwnedLesson(User teacher){ + ArrayList toReturn = new ArrayList<>(); + ArrayList coursesOwned = (ArrayList) courseRepo.findAllOwnedCoures(teacher); + for (Course element : coursesOwned) { + for(Lesson lesson : lessonRepo.findLessonByCourse(element)) + toReturn.add(lesson); + } + return toReturn; + } + /** + * Return all a student's lessons + */ + + public Iterable findOnesLessons(User student){ + ArrayList toReturn = new ArrayList<>(); + ArrayList courses = new ArrayList<>(); + ArrayList userCurricula = userCurriculumRepo.findByUserAndActual(student, true); + for (UserCurriculum userCurriculum : userCurricula) { + curriculumCourseRepo.findCoursesByCurriculum(userCurriculum.getCurriculum()).forEach((item) -> { + //We need this to eliminate clones because a course can belong to several curriculums + if (!courses.contains(item)) { + System.out.println(item.getTitle()); + courses.add(item); + } + }); + } + for (Course element : courses) { + for(Lesson lesson : lessonRepo.findLessonByCourse(element)) + toReturn.add(lesson); + } + + return toReturn; + } + /** + * Construct a new lesson + */ + public Lesson createLesson(Map lessonInfos) { + Lesson target = new Lesson(); + + for (Map.Entry entry : lessonInfos.entrySet()) { + switch (entry.getKey()) { + case "lessonStart": + target.setLessonStart((String) entry.getValue()); + break; + case "lessonEnd": + target.setLessonEnd((String) entry.getValue()); + case "color": + target.setColor((String) entry.getValue()); + break; + case "local": + target.setLocal((String) entry.getValue()); + break; + case "lessonType": + target.setLessonType((String) entry.getValue()); + break; + case "courseID": + target.setCourse(courseRepo.findById((int) entry.getValue())); + break; + } + + } + return target; + } + /** + * Modify a lesson + */ + public boolean modifyData(long id, Map updates){ + Lesson target = lessonRepo.findById(id); + + if(target == null) + return false; + + for (Map.Entry entry: updates.entrySet()){ + switch (entry.getKey()){ + case "lessonStart": + target.setLessonStart((String) entry.getValue()); + break; + case "lessonEnd": + target.setLessonEnd((String) entry.getValue()); + break; + case "local": + target.setLocal((String) entry.getValue()); + break; + case "lessonType": + target.setLessonType((String) entry.getValue()); + break; + } + } + lessonRepo.save(target); + return true; + } + /** + * Delete a lesson + */ + public void delete(Lesson lesson){ + lessonRepo.delete(lesson); + } + + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/DiscussionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/DiscussionService.java index 9a471da..93703ef 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/DiscussionService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/DiscussionService.java @@ -17,6 +17,8 @@ import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.util.JSONPObject; import ovh.herisson.Clyde.Repositories.Msg.DiscussionRepository; +import ovh.herisson.Clyde.Services.UserService; +import ovh.herisson.Clyde.Tables.Notification; import ovh.herisson.Clyde.Tables.User; import ovh.herisson.Clyde.Tables.Msg.Discussion; import ovh.herisson.Clyde.Tables.Msg.Message; @@ -26,6 +28,8 @@ public class DiscussionService { @Autowired private DiscussionRepository discRepo; + @Autowired + private UserService userServ; public Discussion create(String name, User author){ return discRepo.save(new Discussion(name, author)); @@ -42,6 +46,9 @@ public class DiscussionService { * Create a message and link it to it's discussion */ public Discussion CreateMessage(Discussion disc, Message msg){ + for(User u: disc.getMembers()){ + userServ.Notify(u, new Notification("msg.notification.new", msg.getContent(), "/#/msg")); + } disc.addMessage(msg); return discRepo.save(disc); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/ForumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/ForumService.java new file mode 100644 index 0000000..02fca22 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/Msg/ForumService.java @@ -0,0 +1,38 @@ +package ovh.herisson.Clyde.Services.Msg; + +import org.springframework.stereotype.Service; + +import lombok.AllArgsConstructor; +import ovh.herisson.Clyde.Repositories.CourseRepository; +import ovh.herisson.Clyde.Repositories.Msg.ForumRepository; +import ovh.herisson.Clyde.Repositories.Msg.TopicRepository; +import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.User; +import ovh.herisson.Clyde.Tables.Msg.Answer; +import ovh.herisson.Clyde.Tables.Msg.Forum; +import ovh.herisson.Clyde.Tables.Msg.Topic; + +@Service +@AllArgsConstructor +public class ForumService { + + private CourseRepository courseRepo; + private ForumRepository forumRepo; + private TopicRepository topicRepo; + + public void createForum(Course c, Forum f){ + c.addForum(f); + courseRepo.save(c); + } + + public void createTopic(Forum f, Topic data) { + f.addTopic(data); + forumRepo.save(f); + } + + public void answerTopic(Topic t, Answer data, User u) { + data.setAuthor(u); + t.addAnswer(data); + topicRepo.save(t); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/NotificationService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/NotificationService.java new file mode 100644 index 0000000..db0f02e --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/NotificationService.java @@ -0,0 +1,9 @@ +package ovh.herisson.Clyde.Services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class NotificationService { + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java index 1c9b944..74369b8 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java @@ -1,8 +1,7 @@ package ovh.herisson.Clyde.Services; -import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.*; import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; -import ovh.herisson.Clyde.Tables.User; import java.util.ArrayList; import java.util.HashMap; @@ -30,6 +29,7 @@ public class ProtectionService { toReturn.put("country",user.getCountry()); toReturn.put("profilePictureUrl",user.getProfilePictureUrl()); toReturn.put("role",user.getRole()); + toReturn.put("identityCard", user.getIdentityCardUrl()); return toReturn; } @@ -51,7 +51,7 @@ public class ProtectionService { HashMap toReturn = new HashMap<>(); - toReturn.put("courseId",course.getCourseID()); + toReturn.put("courseID",course.getCourseID()); toReturn.put("credits",course.getCredits()); toReturn.put("title", course.getTitle()); toReturn.put("owner", userWithoutPassword(course.getOwner())); @@ -69,6 +69,33 @@ public class ProtectionService { } + public static HashMap lessonWithoutPassword(Lesson lesson){ + if(lesson == null) + return null; + + HashMap toReturn = new HashMap<>(); + + toReturn.put("lessonID", lesson.getLessonID()); + toReturn.put("lessonStart", lesson.getLessonStart()); + toReturn.put("lessonEnd", lesson.getLessonEnd()); + toReturn.put("course",courseWithoutPassword(lesson.getCourse())); + toReturn.put("local",lesson.getLocal()); + toReturn.put("color", lesson.getColor()); + toReturn.put("lessonType",lesson.getLessonType()); + return toReturn; + } + + public static Iterable> lessonsWithoutPassword(Iterable lessons){ + ArrayList> toReturn = new ArrayList<>(); + + for (Lesson l: lessons){ + toReturn.add(ProtectionService.lessonWithoutPassword(l)); + } + + return toReturn; + + } + public static Map requestWithoutPassword(InscriptionRequest inscriptionRequest) { @@ -90,9 +117,36 @@ public class ProtectionService { toReturn.put("identityCard", inscriptionRequest.getIdentityCard()); toReturn.put("submissionDate", inscriptionRequest.getSubmissionDate()); toReturn.put("equivalenceState", inscriptionRequest.getEquivalenceState()); + toReturn.put("admissionDocUrl", inscriptionRequest.getAdmissionDocUrl()); return toReturn; } + public static Map lessonRequestWithoutPassword(LessonChangesRequest lessonRequest){ + if (lessonRequest == null) + return null; + Map toReturn = new HashMap<>(); + toReturn.put("id", lessonRequest.getId()); + toReturn.put("lessonStart", lessonRequest.getLessonStart()); + toReturn.put("lessonEnd", lessonRequest.getLessonEnd()); + toReturn.put("lessonType",lessonRequest.getLessonType()); + toReturn.put("course", courseWithoutPassword(lessonRequest.getCourse())); + toReturn.put("user", userWithoutPassword(lessonRequest.getUser())); + toReturn.put("requestType", lessonRequest.getRequestType()); + toReturn.put("state", lessonRequest.getState()); + toReturn.put("lessonId",lessonRequest.getLessonId()); + + return toReturn; + } + + public static Iterable> lessonRequestsWithoutPassword(Iterable lessonChangesRequests){ + ArrayList> toReturn = new ArrayList<>(); + + for(LessonChangesRequest lessonChangeRequest: lessonChangesRequests){ + toReturn.add(lessonRequestWithoutPassword(lessonChangeRequest)); + } + return toReturn; + + } public static Iterable> requestsWithoutPasswords(Iterable inscriptionRequests){ ArrayList> toReturn = new ArrayList<>(); diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java new file mode 100644 index 0000000..d89fa01 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java @@ -0,0 +1,93 @@ +package ovh.herisson.Clyde.Services; + +/****************************************************** + * @file ScheduleLessonService.java + * @author William Karpinski + * @scope Extension Horaire + ******************************************************/ +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Repositories.LessonRepository; +import ovh.herisson.Clyde.Repositories.ScheduleLessonRepository; +import ovh.herisson.Clyde.Repositories.ScheduleRepository; +import ovh.herisson.Clyde.Tables.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +@Service +public class ScheduleLessonService { + + private final ScheduleLessonRepository scheduleLessonRepo; + + private final LessonRepository lessonRepo; + private final ScheduleRepository scheduleRepo; + public ScheduleLessonService(ScheduleLessonRepository scheduleLessonRepo, LessonRepository lessonRepo, ScheduleRepository scheduleRepo) { + this.scheduleLessonRepo = scheduleLessonRepo; + this.lessonRepo = lessonRepo; + this.scheduleRepo = scheduleRepo; + } + public boolean save(ScheduleLesson scheduleLesson){ + if(scheduleLesson == null) + return false; + scheduleLessonRepo.save(scheduleLesson); + return true; + } + /** + * Save a lesson to all the schedule it is linked + */ + public boolean saveToAllSchedule(Lesson lesson){ + Iterable schedules = scheduleRepo.findAllLessonSchedule(lesson.getCourse()); + if(schedules == null) + return false; + for (Schedule schedule : schedules){ + save(new ScheduleLesson(schedule, lesson)); + } + return true; + } + /** + * Delete a scheduleLesson via its lesson + */ + public boolean delete(long lessonId){ + if(lessonId == 0) + return false; + scheduleLessonRepo.delete(lessonRepo.findById(lessonId)); + return true; + } + + public Schedule getScheduleByCurriculum(Curriculum curriculum){ + return scheduleLessonRepo.findScheduleByCurriculum(curriculum); + } + /** + * Return a schedule and the list of lessons that corresponds + */ + public Map getDepthScheduleBySchedule(Schedule schedule){ + if(schedule == null) + return null; + + HashMap toReturn = new HashMap<>(); + ArrayList> lessons = new ArrayList<>(); + Iterable foundLessons = scheduleLessonRepo.findLessonByCurriculum(schedule.getCurriculum()); + + for (Lesson l: foundLessons){ + lessons.add(ProtectionService.lessonWithoutPassword(l)); + } + toReturn.put("lessons",lessons); + toReturn.put("scheduleId" , schedule.getScheduleID()); + toReturn.put("curriculum", schedule.getCurriculum()); + return toReturn; + } + /** + * Return all the schedules + */ + public Iterable> getAllSchedule(){ + ArrayList> toReturn = new ArrayList<>(); + + for (Schedule schedule: scheduleRepo.findAll()){ + toReturn.add(getDepthScheduleBySchedule(schedule)); + } + return toReturn; + } + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleService.java new file mode 100644 index 0000000..0d73cfc --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleService.java @@ -0,0 +1,24 @@ +package ovh.herisson.Clyde.Services; + +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Repositories.ScheduleRepository; +import ovh.herisson.Clyde.Tables.Schedule; + +@Service +public class ScheduleService { + private final ScheduleRepository scheduleRepo; + public ScheduleService(ScheduleRepository scheduleRepo) { + this.scheduleRepo = scheduleRepo; + } + public Schedule save(Schedule schedule){ + return scheduleRepo.save(schedule); + } + public Schedule findById(long id){ + return scheduleRepo.getById(id); + } + public void delete(Schedule schedule){ + scheduleRepo.delete(schedule); + } + +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java index 8b446df..4dbdea3 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java @@ -35,11 +35,12 @@ public class UserCurriculumService { HashMap element = new HashMap<>(); Curriculum c = list.get(i).getCurriculum(); - element.put("curriculumId", c.getCurriculumId()); element.put("year", c.getYear()); element.put("option", c.getOption()); element.put("dateyear", list.get(i).getYear()); + element.put("actual", list.get(i).isActual()); + curriculumlist.add(element); } @@ -48,5 +49,7 @@ public class UserCurriculumService { return toReturn; } - + public ArrayList findByStudentAndActual(User u, boolean actual){ + return userCurriculumRepository.findByUserAndActual(u, actual); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java index caa20e6..b4f5d99 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java @@ -2,7 +2,9 @@ package ovh.herisson.Clyde.Services; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Tables.RegNoGenerator; import ovh.herisson.Clyde.Repositories.UserRepository; +import ovh.herisson.Clyde.Tables.Notification; import ovh.herisson.Clyde.Tables.Role; import ovh.herisson.Clyde.Tables.User; import java.util.*; @@ -99,11 +101,17 @@ public class UserService { return passwordEncoder.matches(tryingPassword, user.getPassword()); } - public User save(User user){ - user.setPassword(passwordEncoder.encode(user.getPassword())); + public User save(User user){ + RegNoGenerator.resetCount(); return userRepo.save(user); } + public void saveAll(ArrayList list){ + //S'assure que le compteur est bien a 0 + RegNoGenerator.resetCount(); + userRepo.saveAll(list); + } + public Iterable getAll(){ return userRepo.findAll(); } @@ -125,4 +133,10 @@ public class UserService { public void delete(User user) { userRepo.delete(user); } + + public void Notify(User u, Notification n){ + n.setUser(u); + u.getNotifications().add(n); + userRepo.save(u); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java.orig b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java.orig new file mode 100644 index 0000000..e1db7b3 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java.orig @@ -0,0 +1,193 @@ +package ovh.herisson.Clyde.Services; + +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Tables.RegNoGenerator; +import ovh.herisson.Clyde.Repositories.UserRepository; +import ovh.herisson.Clyde.Tables.Notification; +import ovh.herisson.Clyde.Tables.Role; +import ovh.herisson.Clyde.Tables.User; +import java.util.*; + +@Service +public class UserService { + private final UserRepository userRepo; + private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + + public UserService(UserRepository userRepo){ + this.userRepo = userRepo; + } + + + /** return the user identified by th identifier + * + * @param identifier can be an email or the RegNo + * @return the identified user + */ + public User getUser(String identifier){ + if (identifier == null) + return null; + + try { + int id = Integer.parseInt(identifier); + return userRepo.findById(id); + } + catch (NumberFormatException nfe){ + return userRepo.findByEmail(identifier); + } + } + + /** modify the target data + * verify the permission of modifying from the poster + * + * @param poster the user wanting to modify target's data + * @param updates the changes to be made + * @param targetId the id of the user to update + * @return if the changes were done or not + */ + public User modifyData(long targetId, Map updates, User poster){ + + User target = userRepo.findById(targetId); + if (target == null) + return null; + + if (!target.getRegNo().equals(poster.getRegNo()) && !(poster.getRole() == Role.Secretary) && + !(poster.getRole() == Role.Admin)) + return null; + +<<<<<<< HEAD + for (Map.Entry entry : updates.entrySet()){ + System.out.println(entry.getValue()); + switch (entry.getKey()){ + case "firstName": + target.setFirstName((String) entry.getValue()); + break; + case "lastName": + target.setLastName((String) entry.getValue()); + break; + case "email": + target.setEmail((String) entry.getValue()); + break; + case "address": + target.setAddress((String) entry.getValue()); + break; + case "country": + target.setCountry((String) entry.getValue()); + break; + case "birthDate": + target.setBirthDate((Date) entry.getValue()); + break; + case "profilePictureUrl": + target.setProfilePictureUrl((String) entry.getValue()); + break; + case "password": + target.setPassword((String) entry.getValue()); + break; + case "role": + //a user can't change his own role + if (poster.getRole()==Role.Secretary || poster.getRole() == Role.Admin){ + Role wanted = Role.valueOf((String) entry.getValue()); + if (wanted == Role.Admin && poster.getRole() != Role.Admin) + return null; + target.setRole(wanted); + } +======= + switch (entry.getKey()){ + case "firstName": + target.setFirstName((String) entry.getValue()); + break; + case "lastName": + target.setLastName((String) entry.getValue()); + break; + case "email": + target.setEmail((String) entry.getValue()); + break; + case "address": + target.setAddress((String) entry.getValue()); + break; + case "country": + target.setCountry((String) entry.getValue()); + break; + case "birthDate": + target.setBirthDate((Date) entry.getValue()); + break; + case "profilePictureUrl": + target.setProfilePictureUrl((String) entry.getValue()); + break; + case "password": + target.setPassword((String) entry.getValue()); + break; + } + } + userRepo.save(target); + return true; + } + // the secretary can change roles (for example if a student becomes a teacher) + else if (poster.getRole() == Role.Secretary) + { + for (Map.Entry entry : updates.entrySet()){ + + if ( entry.getKey().equals("role")) { + + if (entry.getValue() == Role.Admin) {return false;} + + target.setRole((Role) entry.getValue()); + userRepo.save(target); + return true; + } +>>>>>>> origin/master + } + } + userRepo.save(target); + return target; + } + + + public boolean checkPassword(User user, String tryingPassword){ + return passwordEncoder.matches(tryingPassword, user.getPassword()); + } + +<<<<<<< HEAD + public User save(User user){ + user.setPassword(passwordEncoder.encode(user.getPassword())); +======= + public User save(User user){ + RegNoGenerator.resetCount(); +>>>>>>> origin/master + return userRepo.save(user); + } + + public void saveAll(ArrayList list){ + //S'assure que le compteur est bien a 0 + RegNoGenerator.resetCount(); + userRepo.saveAll(list); + } + + public Iterable getAll(){ + return userRepo.findAll(); + } + + public Iterable getAllExceptAdmins(){ + return userRepo.findAllExceptAdmins(); + } + + + public Iterable getAllTeachers (){return userRepo.findAllTeachers();} + + public Iterable getAllStudents(){return userRepo.findAllStudents();} + + + public User getUserById(long id) { + return userRepo.findById(id); + } + + public void delete(User user) { + userRepo.delete(user); + } + + public void Notify(User u, Notification n){ + n.setUser(u); + u.getNotifications().add(n); + userRepo.save(u); + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java index 8b6fdc5..72c1a50 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java @@ -3,6 +3,7 @@ package ovh.herisson.Clyde.Tables; public enum Applications { // without any token Login, + Schedule, // with any token Profile, @@ -11,10 +12,17 @@ public enum Applications { Msg, Forum, Rdv, + // teachers authorization + + ManageOwnedLessons, // teachers and Secretary authorization ManageCourses, UsersList, + + //Secretary authorization + ManageSchedules, + LessonRequests, // InscriptionService authorization Requests, @@ -23,5 +31,8 @@ public enum Applications { ManageResearcherProfile, //the list of all researches (filterable) - ListResearches, CreateUser, StudentsList + ListResearches, + CreateUser, + StudentsList, + Payments } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java.orig b/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java.orig new file mode 100644 index 0000000..1876f00 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Applications.java.orig @@ -0,0 +1,40 @@ +package ovh.herisson.Clyde.Tables; + +public enum Applications { + // without any token + Login, + Schedule, + + // with any token + Profile, + + // Students and higher authorization + Msg, + Forum, + Rdv, + // teachers authorization + + ManageOwnedLessons, + + // teachers and Secretary authorization + ManageCourses, + UsersList, + + //Secretary authorization + ManageSchedules, + LessonRequests, + + // InscriptionService authorization + Requests, +<<<<<<< HEAD + // profile of a researcher + ResearcherProfile, + ManageResearcherProfile, + + //the list of all researches (filterable) + ListResearches, CreateUser, StudentsList +======= + StudentsList, + Payments +>>>>>>> origin/master +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ChangeCurriculumRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ChangeCurriculumRequest.java new file mode 100644 index 0000000..a309023 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ChangeCurriculumRequest.java @@ -0,0 +1,95 @@ +package ovh.herisson.Clyde.Tables; + +import jakarta.persistence.*; + +import java.util.Date; + +@Entity +public class ChangeCurriculumRequest { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @ManyToOne + @JoinColumn(name="Users") + private User user; + + @ManyToOne + @JoinColumn(name = "ActualCurriculum") + private Curriculum actualCurriculum; + + @ManyToOne + @JoinColumn(name = "DestCurriculum") + private Curriculum destinationCurriculum; + + private Date date; + + private RequestState state; + + private RequestState teacherApprovalState; + public ChangeCurriculumRequest(){} + + public ChangeCurriculumRequest(User user, Curriculum actualCurriculum, Curriculum destinationCurriculum, Date date, RequestState state, RequestState teacherApprovalState){ + this.user = user; + this.actualCurriculum = actualCurriculum; + this.destinationCurriculum = destinationCurriculum; + this.date = date; + this.state = state; + this.teacherApprovalState = teacherApprovalState; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + + public Curriculum getActualCurriculum() { + return actualCurriculum; + } + + public void setActualCurriculum(Curriculum actualCurriculum) { + this.actualCurriculum = actualCurriculum; + } + + public Curriculum getDestinationCurriculum() { + return destinationCurriculum; + } + + public void setDestinationCurriculum(Curriculum destinationCurriculum) { + this.destinationCurriculum = destinationCurriculum; + } + + public void setDate(Date date) { + this.date = date; + } + + public Date getDate() { + return date; + } + + public RequestState getState() { + return state; + } + + public void setState(RequestState state) { + this.state = state; + } + + public int getId() { + return id; + } + + public RequestState getTeacherApprovalState() { + return teacherApprovalState; + } + + public void setTeacherApprovalState(RequestState teacherApprovalState) { + this.teacherApprovalState = teacherApprovalState; + } +} + + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java index df0421d..1093052 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java @@ -1,10 +1,20 @@ package ovh.herisson.Clyde.Tables; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ovh.herisson.Clyde.Tables.Msg.Forum; + +import java.util.List; + import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; @Entity +@Data +@NoArgsConstructor +@AllArgsConstructor public class Course { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -17,39 +27,19 @@ public class Course { @JoinColumn(name = "Users") private User owner; + //// Extension Messagerie ///// + @OneToMany(mappedBy = "course", cascade = CascadeType.ALL) + private List forums; + + public void addForum(Forum f){ + f.setCourse(this); + forums.add(f); + } + /////////////////////////////// + public Course(int credits, String title, User owner){ this.credits = credits; this.title = title; this.owner = owner; } - - public Course() {} - - public int getCourseID() { - return courseID; - } - - public int getCredits() { - return credits; - } - - public void setCredits(int credits){ - this.credits = credits; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title){ - this.title = title; - } - - public User getOwner() { - return owner; - } - - public void setOwner(User owner) { - this.owner = owner; - } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Curriculum.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Curriculum.java index 67075d1..4bcac40 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Curriculum.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Curriculum.java @@ -12,9 +12,13 @@ public class Curriculum { private int curriculumId; private int year; private String option; - public Curriculum(int year, String option){ + + //True if the curriculum need an entry exam + private boolean requireCertificate; + public Curriculum(int year, String option, boolean requireCertificate){ this.year = year; this.option = option; + this.requireCertificate = requireCertificate; } public Curriculum() {} @@ -39,4 +43,11 @@ public class Curriculum { this.option = option; } + public void setRequireCertificate(boolean requireCertificate) { + this.requireCertificate = requireCertificate; + } + + public boolean isRequireCertificate() { + return requireCertificate; + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java index e026d18..63d156b 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java @@ -4,7 +4,7 @@ public enum FileType { ProfilePicture, EducationCertificate, Research, - ResearchBibTex, - JustificationDocument + JustificationDocument, + IdentityCard, } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java.orig b/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java.orig new file mode 100644 index 0000000..f827bc0 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/FileType.java.orig @@ -0,0 +1,15 @@ +package ovh.herisson.Clyde.Tables; + +public enum FileType { + ProfilePicture, + EducationCertificate, +<<<<<<< HEAD + Research, + + ResearchBibTex, + JustificationDocument +======= + JustificationDocument, + IdentityCard, +>>>>>>> origin/master +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ExemptionsRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ExemptionsRequest.java index 75ee926..8942bb6 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ExemptionsRequest.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ExemptionsRequest.java @@ -80,4 +80,8 @@ public class ExemptionsRequest { public void setDate(Date date) { this.date = date; } + + public int getId() { + return id; + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/InscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/InscriptionRequest.java index 07c720f..1d0271c 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/InscriptionRequest.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/InscriptionRequest.java @@ -22,11 +22,12 @@ public class InscriptionRequest { private String profilePicture; private String password; private String identityCard; + private String admissionDocUrl; private Date submissionDate; private RequestState equivalenceState; public InscriptionRequest(){} - public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Long curriculumId, RequestState state, String profilePicture, String password, String identityCard, Date submissionDate, RequestState equivalenceState){ + public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Long curriculumId, RequestState state, String profilePicture, String password, String identityCard, Date submissionDate, RequestState equivalenceState, String admissionDocUrl){ this.lastName = lastName; this.firstName = firstName; this.address = address; @@ -40,6 +41,7 @@ public class InscriptionRequest { this.identityCard = identityCard; this.submissionDate = submissionDate; this.equivalenceState = equivalenceState; + this.admissionDocUrl = admissionDocUrl; } public int getId() { @@ -149,4 +151,12 @@ public class InscriptionRequest { public void setEquivalenceState(RequestState equivalenceState) { this.equivalenceState = equivalenceState; } + + public String getAdmissionDocUrl() { + return admissionDocUrl; + } + + public void setAdmissionDocUrl(String admissionDocUrl) { + this.admissionDocUrl = admissionDocUrl; + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/Payment.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/Payment.java index 48626e1..5f4fbf9 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/Payment.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/Payment.java @@ -12,7 +12,6 @@ public class Payment { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; - private long studentRegNo; private String card; private String client; diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ReInscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ReInscriptionRequest.java deleted file mode 100644 index cafffe6..0000000 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ReInscriptionRequest.java +++ /dev/null @@ -1,81 +0,0 @@ -package ovh.herisson.Clyde.Tables.Inscription; - -import jakarta.persistence.*; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; -import ovh.herisson.Clyde.Tables.Curriculum; -import ovh.herisson.Clyde.Tables.RequestState; -import ovh.herisson.Clyde.Tables.User; - -@Entity -public class ReInscriptionRequest { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private int id; - - @ManyToOne - @JoinColumn(name = "Users") - @OnDelete(action = OnDeleteAction.CASCADE) - private User user; - - @ManyToOne - @JoinColumn(name = "Curriculum") - @OnDelete(action = OnDeleteAction.CASCADE) - private Curriculum newCurriculum; - private RequestState state; - - //Permet de différencier les demandes de changement et une réinscription dans le même Curriculum - //Pour la réinscription on va le mettre a 0 - private boolean type = false; - - public ReInscriptionRequest(){} - - public ReInscriptionRequest(User user, Curriculum newCurriculum, RequestState state, boolean type){ - this.user = user; - this.newCurriculum = newCurriculum; - this.state = state; - this.type = type; - } - - public ReInscriptionRequest(User user, Curriculum newCurriculum, RequestState state){ - this.user = user; - this.newCurriculum = newCurriculum; - this.state = state; - } - - public int getId() { - return id; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public Curriculum getNewCurriculum() { - return newCurriculum; - } - - public void setNewCurriculum(Curriculum newCurriculum) { - this.newCurriculum = newCurriculum; - } - - public RequestState getState() { - return state; - } - - public void setState(RequestState state) { - this.state = state; - } - - public boolean isType() { - return type; - } - - public void setType(boolean type) { - this.type = type; - } -} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ScholarshipRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ScholarshipRequest.java index 18ebee6..842bf90 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ScholarshipRequest.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/ScholarshipRequest.java @@ -7,15 +7,16 @@ import ovh.herisson.Clyde.Tables.RequestState; import ovh.herisson.Clyde.Tables.User; import java.util.Date; +import java.util.Map; @Entity public class ScholarshipRequest { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; - @JoinColumn(name="Users") @ManyToOne(fetch = FetchType.EAGER) + @OnDelete(action = OnDeleteAction.CASCADE) private User user; private RequestState state; private Date date; diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UninscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UninscriptionRequest.java deleted file mode 100644 index e7858c6..0000000 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UninscriptionRequest.java +++ /dev/null @@ -1,67 +0,0 @@ -package ovh.herisson.Clyde.Tables.Inscription; - -import jakarta.persistence.*; -import ovh.herisson.Clyde.Tables.RequestState; -import ovh.herisson.Clyde.Tables.User; - -import java.util.Date; - -@Entity -public class UninscriptionRequest { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; - private RequestState state; - private String reason; - private Date date; - - @JoinColumn(name = "Users") - @ManyToOne(fetch = FetchType.EAGER) - private User user; - - public UninscriptionRequest(RequestState state,String reason, Date date, User user){ - this.state = state; - this.reason = reason; - this.date = date; - this.user = user; - } - - public UninscriptionRequest(){} - - public RequestState getState() { - return state; - } - - public void setState(RequestState state) { - this.state = state; - } - - public String getReason() { - return reason; - } - - public void setReason(String reason) { - this.reason = reason; - } - - public long getId() { - return id; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public void setDate(Date date) { - this.date = date; - } - - public Date getDate() { - return date; - } -} - diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UnregisterRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UnregisterRequest.java new file mode 100644 index 0000000..9127ecb --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Inscription/UnregisterRequest.java @@ -0,0 +1,115 @@ +package ovh.herisson.Clyde.Tables.Inscription; + +import jakarta.persistence.*; +import ovh.herisson.Clyde.Tables.Curriculum; +import ovh.herisson.Clyde.Tables.RequestState; +import ovh.herisson.Clyde.Tables.User; + +import java.util.Date; + +@Entity +public class UnregisterRequest { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + private RequestState state; + private String reason; + private Date date; + + //We store these informations again so if the user is deleted we still have the informations for history + private long regNo; + + private String firstName; + + private String lastName; + + private String email; + + //Null if the user unregister for the academic year, contains a curriculum if the user wants to unregister from a specific curriculum + @ManyToOne + @JoinColumn(name = "Curriculum") + private Curriculum curriculum; + + public UnregisterRequest(RequestState state, String reason, Date date, long regNo, String firstName, String lastName, String email, Curriculum curriculum){ + this.state = state; + this.reason = reason; + this.date = date; + this.regNo = regNo; + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + this.curriculum = curriculum; + } + + public UnregisterRequest(){} + + public RequestState getState() { + return state; + } + + public void setState(RequestState state) { + this.state = state; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + public long getId() { + return id; + } + + public void setDate(Date date) { + this.date = date; + } + + public Date getDate() { + return date; + } + + public String getEmail() { + return email; + } + + public String getLastName() { + return lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public void setRegNo(long regNo) { + this.regNo = regNo; + } + + public long getRegNo() { + return regNo; + } + + public void setCurriculum(Curriculum curriculum) { + this.curriculum = curriculum; + } + + public Curriculum getCurriculum() { + return curriculum; + } + +} + diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java new file mode 100644 index 0000000..673e532 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java @@ -0,0 +1,101 @@ +package ovh.herisson.Clyde.Tables; + + +/****************************************************** + * @file Lesson.java + * @author William Karpinski + * @scope Extension Horaire + * + * Represent a course in a schedule + ******************************************************/ + +import jakarta.persistence.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + + +@Entity +public class Lesson { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int lessonID; + + @ManyToOne(fetch = FetchType.EAGER) + @OnDelete(action = OnDeleteAction.SET_NULL) + @JoinColumn(name = "Course") + private Course course; + + private String lessonStart; + + private String lessonEnd; + + private String color; + + private String lessonType; + + private String local; + + public Lesson(Course course,String start, String end ,String color,String local,String lessonType){ + this.lessonEnd = end; + this.course = course; + this.lessonStart = start; + this.color = color; + this.local = local; + this.lessonType = lessonType; + } + + public Lesson() { + } + + public int getLessonID(){ + return lessonID; + } + + public void setCourse(Course course) { + this.course = course; + } + + public Course getCourse(){ + return course; + } + + public String getLessonStart(){ + return lessonStart; + } + + public String getLessonEnd() { + return lessonEnd; + } + + public String getColor(){ + return color; + } + + public String getLocal() { + return local; + } + + public String getLessonType(){ + return lessonType; + } + + public void setLessonStart(String start){ + this.lessonStart = start; + } + + public void setLessonEnd(String lessonEnd) { + this.lessonEnd = lessonEnd; + } + + public void setColor(String color){ + this.color = color; + } + + public void setLocal(String local){ + this.local = local; + } + + public void setLessonType(String lessonType){ + this.lessonType = lessonType; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/LessonChangesRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/LessonChangesRequest.java new file mode 100644 index 0000000..c969548 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/LessonChangesRequest.java @@ -0,0 +1,148 @@ +package ovh.herisson.Clyde.Tables; + + +/****************************************************** + * @file LessonChangesRequest.java + * @author William Karpinski + * @scope Extension Horaire + * + * Represent a request about changes on schedules and lessons + ******************************************************/ + +import jakarta.persistence.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +@Entity +public class LessonChangesRequest { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @ManyToOne + @JoinColumn(name = "Users") + @OnDelete(action = OnDeleteAction.CASCADE) + private User user; + + private long lessonId; + + private RequestState state; + + private String lessonStart; + + private String lessonEnd; + + private String color; + @ManyToOne + @JoinColumn(name ="Course") + private Course course; + + private String lessonType; + + /** + * Can take 3 values: + * 0 : Request to CREATE a lesson + * 1 : Request to MODIFY an existing lesson + * 2 : Request to DELETE a lesson + */ + private int requestType; + + public LessonChangesRequest(User user, RequestState state, String lessonStart, + String lessonEnd, String lessonType, Course course, + int requestType, String color,long lessonId){ + this.user = user; + this.state = state; + this.requestType = requestType; + this.lessonType = lessonType; + this.lessonStart = lessonStart; + this.lessonEnd= lessonEnd; + this.color = color; + this.course = course; + this.lessonId = lessonId; + } + + public LessonChangesRequest() { + + } + + public int getId() { + return id; + } + + + public RequestState getState() { + return state; + } + + public User getUser() { + return user; + } + + public long getLessonId(){ + return lessonId; + } + + public String getLessonStart() { + return lessonStart; + } + + public String getLessonEnd() { + return lessonEnd; + } + + + + public int getRequestType() { + return requestType; + } + + public String getLessonType() { + return lessonType; + } + + public String getColor() { + return color; + } + + public Course getCourse() { + return course; + } + + public void setState(RequestState state) { + this.state = state; + } + + public void setUser(User user) { + this.user = user; + } + + public void setLessonStart(String lessonStart) { + this.lessonStart = lessonStart; + } + + public void setLessonType(String lessonType) { + this.lessonType = lessonType; + } + + public void setLessonEnd(String lessonEnd) { + this.lessonEnd = lessonEnd; + } + + public void setColor(String color) { + this.color = color; + } + + public void setRequestType(int requestType) { + this.requestType = requestType; + } + + + public void setLessonId(long lessonId) { + this.lessonId = lessonId; + } + + public void setCourse(Course course){ + this.course = course; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Answer.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Answer.java new file mode 100644 index 0000000..4101abb --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Answer.java @@ -0,0 +1,29 @@ +package ovh.herisson.Clyde.Tables.Msg; + + +import java.util.Date; + +import org.hibernate.annotations.CreationTimestamp; + +import jakarta.persistence.*; +import lombok.Data; +import ovh.herisson.Clyde.Tables.User; + +@Entity +@Data +public class Answer { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @CreationTimestamp + private Date creation; + + private String content; + + @ManyToOne(cascade=CascadeType.ALL) + private User author; + + private boolean anonymous; + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Forum.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Forum.java new file mode 100644 index 0000000..e03d0de --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Forum.java @@ -0,0 +1,38 @@ +package ovh.herisson.Clyde.Tables.Msg; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import jakarta.persistence.*; +import lombok.Data; +import ovh.herisson.Clyde.Tables.Course; +import ovh.herisson.Clyde.Tables.User; + +@Entity +@Data +public class Forum { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @ManyToOne + @JsonIgnore + private Course course; + + private String name; + + @OneToMany(cascade = CascadeType.ALL) + private List topics; + + public void addTopic(Topic t) { + topics.add(t); + } + + @OneToMany + private List writers; // User who are authorized to create a post + + @OneToMany + private List register; +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Topic.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Topic.java new file mode 100644 index 0000000..3641f5f --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Msg/Topic.java @@ -0,0 +1,31 @@ +package ovh.herisson.Clyde.Tables.Msg; + +import java.util.List; + +import jakarta.persistence.*; +import lombok.Data; +import ovh.herisson.Clyde.Tables.User; + +@Entity +@Data +public class Topic { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + private String subject, content; + + @ManyToOne + private User author; + + @OneToMany(cascade = CascadeType.ALL) + private List answers; + + public void addAnswer(Answer a){ + answers.add(a); + } + + private boolean locked; // true if new messages can be posted + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Notification.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Notification.java new file mode 100644 index 0000000..1ccddaf --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Notification.java @@ -0,0 +1,53 @@ +package ovh.herisson.Clyde.Tables; + +import java.util.Date; + +import org.hibernate.annotations.CreationTimestamp; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import jakarta.annotation.Nullable; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@Entity +public class Notification { + + public enum Status { + Unread, + Read, + Archived + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + private String subject; + + private String body; + + private Status status = Status.Unread; + + private String link; + + @ManyToOne + @JsonIgnore + private User user; + + @CreationTimestamp + private Date creation; + + public Notification(String subject, @Nullable String body, @Nullable String link){ + this.subject = subject; + this.body = body; + this.link = link; + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/RegNoGenerator.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/RegNoGenerator.java new file mode 100644 index 0000000..886cc09 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/RegNoGenerator.java @@ -0,0 +1,46 @@ +package ovh.herisson.Clyde.Tables; + +import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.id.IdentifierGenerator; + +import java.sql.*; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +public class RegNoGenerator implements IdentifierGenerator { + private static int count = 0; + @Override + public Object generate(SharedSessionContractImplementor session, Object object) { + try{ + JdbcConnectionAccess jdbccon = session.getJdbcConnectionAccess(); + Connection conn = jdbccon.obtainConnection(); + + Statement statement = conn.createStatement(); + + Calendar c = new GregorianCalendar(); + int y = c.get(Calendar.YEAR); + String query = "select count(reg_no) + "+count+" from Users where reg_no/10000 = " + y%1000; + + ResultSet set = statement.executeQuery(query); + long resp = 0; + if(set.next()){ + resp = set.getLong(1)+((y%1000)*10000); + count += 1; + } + + conn.close(); + statement.close(); + + return resp; + + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void resetCount(){ + count = 0; + } +} \ No newline at end of file diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java new file mode 100644 index 0000000..e2f1982 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java @@ -0,0 +1,42 @@ + +package ovh.herisson.Clyde.Tables; + + +/****************************************************** + * @file Schedule.java + * @author William Karpinski + * @scope Extension Horaire + * + * Represent a schedule linked to a curriculum + ******************************************************/ +import jakarta.persistence.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +@Entity +public class Schedule { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int scheduleID; + + @OneToOne + @JoinColumn(name = "Curriculum") + @OnDelete(action = OnDeleteAction.SET_NULL) + private Curriculum curriculum; + + public Schedule(Curriculum curriculum){ + this.curriculum = curriculum; + } + + public Schedule() {} + + + public int getScheduleID(){ + return scheduleID; +} + + public Curriculum getCurriculum(){ + return curriculum; +} + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java new file mode 100644 index 0000000..9dca028 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java @@ -0,0 +1,63 @@ +package ovh.herisson.Clyde.Tables; + + +/****************************************************** + * @file ScheduleLesson.java + * @author William Karpinski + * @scope Extension Horaire + * + * Used to link schedules and lessons to each others + ******************************************************/ + +import jakarta.persistence.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + + +@Entity +public class ScheduleLesson{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "Schedule") + @OnDelete(action = OnDeleteAction.SET_NULL) + private Schedule schedule; + + + @ManyToOne(fetch = FetchType.EAGER) + @OnDelete(action = OnDeleteAction.SET_NULL) + @JoinColumn(name = "Lesson") + private Lesson lesson; + + public ScheduleLesson(Schedule schedule,Lesson lesson){ + this.schedule = schedule; + this.lesson = lesson; + } + + public ScheduleLesson() { + } + + public int getID(){ + return id; + } + + public Lesson getLesson(){ + return lesson; + } + + public Schedule getSchedule(){ + return schedule; + } + + public void setLesson(Lesson lesson){ + this.lesson = lesson; + } + + public void setSchedule(Schedule schedule){ + this.schedule = schedule; + } + + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java index ba645c8..e14e973 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java @@ -1,18 +1,30 @@ package ovh.herisson.Clyde.Tables; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.hibernate.annotations.GenericGenerator; import ovh.herisson.Clyde.Tables.Msg.Discussion; import ovh.herisson.Clyde.Tables.Msg.Message; +import ovh.herisson.Clyde.Tables.Notification.Status; import java.util.Date; import java.util.List; +import com.fasterxml.jackson.annotation.JsonIgnore; @Entity @Table(name = "Users") +@NoArgsConstructor +@Data public class User { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GenericGenerator(name = "userGen", type = ovh.herisson.Clyde.Tables.RegNoGenerator.class) + @GeneratedValue(generator = "userGen") private Long regNo; private String lastName; private String firstName; @@ -22,15 +34,24 @@ public class User { private String country; private Date birthDate; private String profilePictureUrl; - private ovh.herisson.Clyde.Tables.Role role; + private Role role; + private String identityCardUrl; + @JsonIgnore private String password; + @JsonIgnore + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List notifications; + ////// Extension Messagerie ///// + @JsonIgnore @OneToMany(mappedBy = "author", cascade = CascadeType.ALL) private List msgs; + @JsonIgnore @ManyToMany( mappedBy = "members" ) private List discussions; + ///////////////////////////////// ///////////////////////////////// public User(String lastName, String firstName, String email, String address, @@ -44,11 +65,13 @@ public class User { this.birthDate = birthDate; this.profilePictureUrl = profilePictureUrl; this.role = role; - this.password = password; + this.password = (new BCryptPasswordEncoder()).encode(password); } + + //This constructor is used to add a student public User(String lastName, String firstName, String email, String address, - String country, Date birthDate, String profilePictureUrl, String password) + String country, Date birthDate, String profilePictureUrl, String password,String identityCardUrl) { this.lastName = lastName; this.firstName = firstName; @@ -57,79 +80,12 @@ public class User { this.country = country; this.birthDate = birthDate; this.profilePictureUrl = profilePictureUrl; - this.password = password; + this.password = (new BCryptPasswordEncoder()).encode(password); this.role = Role.Student; - } - public User() {} - - public Long getRegNo(){ - return this.regNo; - } - public String getLastName() { - return lastName; + this.identityCardUrl = identityCardUrl; } - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public Date getBirthDate() { - return birthDate; - } - - public void setBirthDate(Date birthDate) { - this.birthDate = birthDate; - } - - public String getProfilePictureUrl(){return this.profilePictureUrl;} - - public void setProfilePictureUrl(String profilePictureUrl){ - this.profilePictureUrl = profilePictureUrl; - } - public ovh.herisson.Clyde.Tables.Role getRole() { - return role; - } - - public void setRole(ovh.herisson.Clyde.Tables.Role role) { - this.role = role; - } - public String getPassword(){ - return password; - } - - public void setPassword(String password) { - this.password = password; - } + public void setPassword(String password) { + this.password = (new BCryptPasswordEncoder()).encode(password); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java index b79295b..34caf26 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java @@ -1,10 +1,17 @@ package ovh.herisson.Clyde.Tables; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; @Entity +@Data +@AllArgsConstructor +@NoArgsConstructor public class UserCurriculum { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -23,39 +30,13 @@ public class UserCurriculum { private int year; - public UserCurriculum(User user, Curriculum curriculum, int year){ - this.user = user; - this.curriculum = curriculum; - this.year = year; - } + //True if the user has that curriculum at the moment false if not + private boolean actual; - public UserCurriculum() {} - - public int getId() { - return id; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public Curriculum getCurriculum() { - return curriculum; - } - - public void setCurriculum(Curriculum curriculum) { - this.curriculum = curriculum; - } - - public int getYear() { - return year; - } - - public void setYear(int year) { - this.year = year; - } + public UserCurriculum(User u, Curriculum cu, int year, boolean actual){ + this.user = u; + this.curriculum = cu; + this.year = year; + this.actual = actual; + } } diff --git a/backend/src/test/java/ovh/herisson/Clyde/Repositories/UserRepoTest.java b/backend/src/test/java/ovh/herisson/Clyde/Repositories/UserRepoTest.java index f99ff2f..599ec60 100644 --- a/backend/src/test/java/ovh/herisson/Clyde/Repositories/UserRepoTest.java +++ b/backend/src/test/java/ovh/herisson/Clyde/Repositories/UserRepoTest.java @@ -24,6 +24,7 @@ public class UserRepoTest { @BeforeEach public void setup(){ + userRepo.deleteAll(); User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin"); userRepo.save(herobrine); } @@ -34,8 +35,8 @@ public class UserRepoTest { } @Test public void usertest(){ - Assert.assertEquals("brine", userRepo.findById(1).getLastName()); - Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findById(1).getBirthDate())); + Assert.assertEquals("brine", userRepo.findByEmail("admin@admin.com").getLastName()); + Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findByEmail("admin@admin.com").getBirthDate())); } } diff --git a/frontend/public/i18n/EN.txt b/frontend/public/i18n/EN.txt index ac78f9c..d8a64b2 100644 --- a/frontend/public/i18n/EN.txt +++ b/frontend/public/i18n/EN.txt @@ -13,6 +13,13 @@ login.guest.lastpage=Last Page login.guest.submit=Submit login.guest.birthday=BIRTHDAY login.guest.confirm=CONFIRM +login.guest.browse=Browse... +login.guest.disclaimer=If you are already registered please connect to your account and use the change cursus/reregister function if not continue here. +login.guest.identityCard=Identity Card : +login.guest.attestationdisclaimer=This curriculum requires an entrance exam attestation +login.guest.formationdisclaimer=Please add your old formations with the associated degree/attestation,your case will be check by a member of the inscription service. +login.guest.managecareer=Manage your external formations +login.guest.sendRegReq=Send register request login.cPassword=Confirm Password login.password=Password app.home=Home @@ -22,6 +29,7 @@ app.settings=Settings app.messages=Messages app.forum=Forum app.schedules=Schedules +app.manageSchedules=Manage Schedules app.inscription.requests=Inscription Requests app.manage.courses=Manage Courses app.language=Language @@ -31,15 +39,76 @@ app.users=Users app.manage.researcherProfile=Manage researcher profile app.list.researches=List researches app.Create.User=Create User +app.manageOwnLessons=Manage Owned Courses Schedule +app.lessonRequests=Schedule Requests +app.payments=Payments request.moreInfos=More Infos request.accept=Accept request.refuse=Refuse +Pending=Pending +Delete=Delete +Modify=Modify +Create=Créer +requestType=Request Type +day=Day +start=Start +end=End +monday=Monday +tuesday=Tuesday +wednesday=Wednesday +thursday=Thursday +friday=Friday +saturday=Saturday +sunday=Sunday +january=January +february=February +march=March +april=April +may=May +june=June +july=July +august=August +september=September +october=October +november=November +december=December +Grid=Grid +Week=Week +Month=Month +List=List +Type=Type +Teacher=Teacher +Course=Course +TP=TP +TD=TD +Exam=Exam +OwnSchedule=Own Schedule +SwitchToJSON=Switch to JSON FILE +schedule.previous=Previous +schedule.next=Next +schedule.current=Current +schedule.settings=Settings +schedule.courses=Courses +schedule.teachers=Teacher(s) +schedule.askChanges=Ask Changes +schedule.askCreate=Ask to create course +schedule.askDeletion=Ask Deletion +schedule.createSchedule=Create Schedule +schedule.createLesson=Create course +schedule.deleteMod=Unable deletion +schedule.noDeleteMod=Disable deletion +schedule=Schedule +old_day=Precedent day +old_start=Precedent start +old_end=Precedent end +old_type=Precedent type courses.createCourse=Create course courses.deleteCourse=Delete course courses.modify=Modify courses.toDelete=Course to Delete courses.confirm=Confirm courses.back=Back +courses.AddToCurriculum=Add to a new Curriculum profile.modify.data=Modify personnal data profile.reRegister=Re-register profile.unRegister=Unregister @@ -130,3 +199,91 @@ Profile.Picture=Profile Picture Role=Role Password=Password Create.User=Create User +msg.notification.new=You have a new message +forum.create=Create forum +forum.create.name=New forum's name +forum.post.create.name=New post's title +firstname/name=Firstname/Name +regNo=regNo +From=From +To=To +WantedCursus=Wanted Cursus +seeprofile=See profile +acceptequiv=Accept equivalence +refuseequiv=Refuse equivalence +course=course +state=state +dljustifdoc=Download justification document +backtoreq=Back to request +dlidentitycard=Download identity card +dladmissiondoc=Download admission document +seeextcur=See external curriculums +dltaxdoc=Download tax justification document +dlresidency=Download residency justification document +enteramount=Please enter the amount to provide : +oldcursus=Old curriculums +newcursus=New curriculums +year=Year +reason=Reason : +selectedcursus=Selected curriculum : +askexemp=Ask exemption +exemp=Exempted +uploadjustifdoc=Please upload the justification document +subexemreq=Submit exemption request +addextcurr=Add external curriculum +dldoc=Download document +edit=Edit +delete=Delete +school=School +checkifnotcompleted=Check the box if you didn't complete the formation +wichyearstop=In which year did you stop (ex: 3rd year) ? +startyear=Start year +endyear=End year +giveextcurdoc=Please upload a document that proves this formation +uploadcurr=Upload curriculum +editcurr=Edit curriculum +reqtype=Request type : +inscription=register +scholarship=scholarship +exemption=exemption +unregister=unregister +curriculumch=curriculum change +filter=Filter : +approval=Approval : +teacherapproval=Teacher approval : +surreq=Are you sure that you want to accept this request ? +validate=Validate +amount=Amount +role=Role +manageextcur=Manage external curriculum +managecourse=Manage courses +manageminerval=Manage school fees +enterreason=Please enter the reason you leave +onlycursus=I only want to unregister from a specific cursus +plsselectcurs=Please select that cursus +sureunreg=Are you sure that you want to unregister ? +no=No +yes=Yes +reqsend=Your request has been send ! +payment=Payment +lefttopay=left to pay +paydeposit=Pay deposit +payrest=Pay all the rest +alreadypaid=Payment : School fees have already been paid this year +askscholarship=Ask scholarship +uploaddocs=Please upload the required documents +taxjustdoc=Tax justification document : +residencydoc=Residency justification document : +reqsent=Your request has been sent to the inscription service. +backprofile=Go back to profile +procpayment=Proceed to payment of +procpaybutton=Process payment +rereg=Reregister in the next year of one of my cursus +reregsup=Register in a supplementary cursus +chcur=Change from a cursus to another +iwouldlike=I would like to : +newcurr=New curriculum +cursusprereq=The cursus you selected has some prerequisites ensure that your external curriculum data is updated in your profile +imposecurriculum=Impose a curriculum +impose=Impose +gotimposed=The selected curriculum has been imposed diff --git a/frontend/public/i18n/EN.txt.orig b/frontend/public/i18n/EN.txt.orig new file mode 100644 index 0000000..724d8b3 --- /dev/null +++ b/frontend/public/i18n/EN.txt.orig @@ -0,0 +1,295 @@ +login.guest.signin=Sign in +login.guest.register=Register +login.guest.alregister=Already Registered +login.guest.welcome=WELCOME TO THE UNIVERSITY +login.guest.email=E-MAIL +login.guest.firstname=FIRSTNAME +login.guest.surname=SURNAME +login.guest.country=COUNTRY +login.guest.address=ADDRESS +login.guest.password=PASSWORD +login.guest.nextpage=Next Page +login.guest.lastpage=Last Page +login.guest.submit=Submit +login.guest.birthday=BIRTHDAY +login.guest.confirm=CONFIRM +login.guest.browse=Browse... +login.guest.disclaimer=If you are already registered please connect to your account and use the change cursus/reregister function if not continue here. +login.guest.identityCard=Identity Card : +login.guest.attestationdisclaimer=This curriculum requires an entrance exam attestation +login.guest.formationdisclaimer=Please add your old formations with the associated degree/attestation,your case will be check by a member of the inscription service. +login.guest.managecareer=Manage your external formations +login.guest.sendRegReq=Send register request +login.cPassword=Confirm Password +login.password=Password +app.home=Home +app.login=Login +app.notifications=Notifications +app.settings=Settings +app.messages=Messages +app.forum=Forum +app.schedules=Schedules +app.manageSchedules=Manage Schedules +app.inscription.requests=Inscription Requests +app.manage.courses=Manage Courses +app.language=Language +app.manage.profile=Manage profile +app.studentList=Students List +app.users=Users +<<<<<<< HEAD +app.manage.researcherProfile=Manage researcher profile +app.list.researches=List researches +app.Create.User=Create User +======= +app.manageOwnLessons=Manage Owned Courses Schedule +app.lessonRequests=Schedule Requests +app.payments=Payments +>>>>>>> origin/master +request.moreInfos=More Infos +request.accept=Accept +request.refuse=Refuse +Pending=Pending +Delete=Delete +Modify=Modify +Create=Créer +requestType=Request Type +day=Day +start=Start +end=End +monday=Monday +tuesday=Tuesday +wednesday=Wednesday +thursday=Thursday +friday=Friday +saturday=Saturday +sunday=Sunday +january=January +february=February +march=March +april=April +may=May +june=June +july=July +august=August +september=September +october=October +november=November +december=December +Grid=Grid +Week=Week +Month=Month +List=List +Type=Type +Teacher=Teacher +Course=Course +TP=TP +TD=TD +Exam=Exam +OwnSchedule=Own Schedule +SwitchToJSON=Switch to JSON FILE +schedule.previous=Previous +schedule.next=Next +schedule.current=Current +schedule.settings=Settings +schedule.courses=Courses +schedule.teachers=Teacher(s) +schedule.askChanges=Ask Changes +schedule.askCreate=Ask to create course +schedule.askDeletion=Ask Deletion +schedule.createSchedule=Create Schedule +schedule.createLesson=Create course +schedule.deleteMod=Unable deletion +schedule.noDeleteMod=Disable deletion +schedule=Schedule +old_day=Precedent day +old_start=Precedent start +old_end=Precedent end +old_type=Precedent type +courses.createCourse=Create course +courses.deleteCourse=Delete course +courses.modify=Modify +courses.toDelete=Course to Delete +courses.confirm=Confirm +courses.back=Back +courses.AddToCurriculum=Add to a new Curriculum +profile.modify.data=Modify personnal data +profile.reRegister=Re-register +profile.unRegister=Unregister +profile.course.list=Courses list +profile.address=Address +profile.picture=Profile picture +profile.change.curriculum=Change curriculum +name=Name +Teacher=Teacher +Student=Student +Secretary=Secretary +Curriculum=curriculum +Credits=Credits +InscriptionService=I.S. +faculty=Faculty +<<<<<<< HEAD +Year=Year +Access=Access +Access.Restricted=Restricted +Access.OpenSource=OpenSource +Access.Private=Private +Language=Language +Month=Month +Month.01=january +Month.02=february +Month.03=march +Month.04=april +Month.05=may +Month.06=june +Month.07=july +Month.08=august +Month.09=september +Month.10=october +Month.11=november +Month.12=december +Domain=Domain +PaperType=PaperType +Submit=Submit +Search.Researches=Search For Researches +Search.Researchers=Search For Researchers +Filters=Filters +Toggle.Researcher=Toggle Researcher Search +Untoggle.Researcher=Toggle Research Search +MoreInfo=More Info +Modify.Research=Modify Research +To.Change.In.Options=To change in regular account options +Modify.Data=Modify Data +Confirm.Changes=Confirm Changes +Cancel.Changes=Cancel Changes +Post.Research=Post a new Research +Summary=Summary +Title=Title +Views=Number of Views +See.Research=See Research +SeeBibTex=See BibTex +Author=Author +CoAuthors=Co-Authors +ReleaseDate=ReleaseDate +Article.Id=Article Id +Delete.Research=Delete Research +Here=Here +Stat.Type=Stat Type +Researches=Researches +Please.Select.Option=Please Select an Option +Class.By=Class By +PaperType.Article=Article +PaperType.Book=Book +PaperType.Book.Chapter=Book Chapter +PaperType.Paper=Paper +Research.Pdf=Research Pdf +BibTex.Pdf=BibTex Pdf +CoAuthors.List=Co-Author List +Confirm.Publish=Confirm Publishing +Cancel.Publish=Cancel Publishing +Years=Years +Months=Months +By=By +RegNo=RegNo +Address=Address +Country=Country +BirthDate=Birth Date +Researcher.Delete=Delete Researcher Profile +Researcher.Add=Create Researcher Profile +Confirm=Confirm +Cancel=Cancel +LastName=Last Name +FirstName=First Name +Profile.Picture=Profile Picture +Role=Role +Password=Password +Create.User=Create User +======= +msg.notification.new=You have a new message +forum.create=Create forum +forum.create.name=New forum's name +forum.post.create.name=New post's title +firstname/name=Firstname/Name +regNo=regNo +From=From +To=To +WantedCursus=Wanted Cursus +seeprofile=See profile +acceptequiv=Accept equivalence +refuseequiv=Refuse equivalence +course=course +state=state +dljustifdoc=Download justification document +backtoreq=Back to request +dlidentitycard=Download identity card +dladmissiondoc=Download admission document +seeextcur=See external curriculums +dltaxdoc=Download tax justification document +dlresidency=Download residency justification document +enteramount=Please enter the amount to provide : +oldcursus=Old curriculums +newcursus=New curriculums +year=Year +reason=Reason : +selectedcursus=Selected curriculum : +askexemp=Ask exemption +exemp=Exempted +uploadjustifdoc=Please upload the justification document +subexemreq=Submit exemption request +addextcurr=Add external curriculum +dldoc=Download document +edit=Edit +delete=Delete +school=School +checkifnotcompleted=Check the box if you didn't complete the formation +wichyearstop=In which year did you stop (ex: 3rd year) ? +startyear=Start year +endyear=End year +giveextcurdoc=Please upload a document that proves this formation +uploadcurr=Upload curriculum +editcurr=Edit curriculum +reqtype=Request type : +inscription=register +scholarship=scholarship +exemption=exemption +unregister=unregister +curriculumch=curriculum change +filter=Filter : +approval=Approval : +teacherapproval=Teacher approval : +surreq=Are you sure that you want to accept this request ? +validate=Validate +amount=Amount +role=Role +manageextcur=Manage external curriculum +managecourse=Manage courses +manageminerval=Manage school fees +enterreason=Please enter the reason you leave +onlycursus=I only want to unregister from a specific cursus +plsselectcurs=Please select that cursus +sureunreg=Are you sure that you want to unregister ? +no=No +yes=Yes +reqsend=Your request has been send ! +payment=Payment +lefttopay=left to pay +paydeposit=Pay deposit +payrest=Pay all the rest +alreadypaid=Payment : School fees have already been paid this year +askscholarship=Ask scholarship +uploaddocs=Please upload the required documents +taxjustdoc=Tax justification document : +residencydoc=Residency justification document : +reqsent=Your request has been sent to the inscription service. +backprofile=Go back to profile +procpayment=Proceed to payment of +procpaybutton=Process payment +rereg=Reregister in the next year of one of my cursus +reregsup=Register in a supplementary cursus +chcur=Change from a cursus to another +iwouldlike=I would like to : +newcurr=New curriculum +cursusprereq=The cursus you selected has some prerequisites ensure that your external curriculum data is updated in your profile +imposecurriculum=Impose a curriculum +impose=Impose +gotimposed=The selected curriculum has been imposed +>>>>>>> origin/master diff --git a/frontend/public/i18n/FR.txt b/frontend/public/i18n/FR.txt index 9b4e296..324cda1 100644 --- a/frontend/public/i18n/FR.txt +++ b/frontend/public/i18n/FR.txt @@ -13,6 +13,13 @@ login.guest.lastpage=Derniere Page login.guest.submit=Envoyer login.guest.birthday=DATE DE NAISSANCE login.guest.confirm=CONFIRMER +login.guest.browse=Parcourir... +login.guest.disclaimer=Si vous êtes déja inscrits dans cette université veuillez vous connecter a votre compte et utilisez les fonctions changer de cursus/réinscription sinon continuez ici. +login.guest.identityCard=Carte d'identité : +login.guest.attestationdisclaimer=Ce cursus requiert une attestation de réussite d'un examen d'entrée +login.guest.formationdisclaimer=Veuillez ajouter vos formations antérieures en y joignant les attestations/diplomes, votre dossier sera vérifié par un membre du service d'inscription. +login.guest.managecareer=Gèrer mon parcours extérieur +login.guest.sendRegReq=Envoyer la demande d'inscription login.cPassword=Confirmer mot de passe login.password=Mot de passe app.home=Home @@ -22,6 +29,7 @@ app.settings=Options app.messages=Messages app.forum=Forum app.schedules=Horaires +app.manageSchedules=Gérer les horaires app.inscription.requests=Demandes d'Inscription app.manage.courses=Gérer les cours app.language=Langue @@ -31,15 +39,76 @@ app.users=Utilisateurs app.manage.researcherProfile= gérer son profil de chercheur app.list.researches=Lister les recherches app.Create.User=créer un utilisateur +app.manageOwnLessons=Gérer ses horaires de cours +app.lessonRequests=Requêtes d'horaire +app.payments=Payements request.moreInfos=Plus d'Infos request.accept=Accepter request.refuse=Refuser +Pending=En attente +Delete=Supprimer +Modify=Modifier +Create=Créer +requestType=Type de Requête +day=Jour +start=Début +end=Fin +monday=Lundi +tuesday=Mardi +wednesday=Mercredi +thursday=Jeudi +friday=Vendredi +saturday=Samedi +sunday=Dimanche +january=Janvier +february=Février +march=Mars +april=Avril +may=Mai +june=Juin +july=Juillet +august=Août +september=Septembre +october=Octobre +november=Novembre +december=Decembre +Grid=Grille +Week=Semaine +Month=Mois +List=Liste +Type=Type +Teacher=Professeur +Course=Cours +TP=TP +TD=TD +Exam=Exam +OwnSchedule=Mon Horaire +SwitchToJSON=Afficher le JSON +schedule.previous=Précédent +schedule.next=Prochain +schedule.current=Actuel +schedule.settings=Options +schedule.courses=Cours +schedule.teachers=Professeurs(s) +schedule.askChanges=Demander Changement +schedule.askCreate=Demander de créer un cours +schedule.askDeletion=Demander suppression +schedule.createSchedule=Créer Horaire +schedule.createLesson=Créer cours +schedule.deleteMod=Activer suppression +schedule.noDeleteMod=Désactiver suppression +schedule=Horaire +old_day=Ancien Jour +old_start=Ancien Début +old_end=Ancienne Fin +old_type=Ancien Type courses.createCourse=Créer un cours courses.deleteCourse=Supprimer un cours courses.modify=Modifier courses.toDelete=Cours à supprimer courses.confirm=Confirmer courses.back=Retour +courses.AddToCurriculum=Ajouter à un cursus profile.modify.data=Modifier données personnelles profile.reRegister=Réinsciption profile.unRegister=Désinscription @@ -128,3 +197,91 @@ Profile.Picture=Photo de Profil Role=Role Password=Mot de Passe Create.User=Créer l'utilisateur +msg.notification.new=Vous avez un nouveau message! +forum.create=Créer un forum +forum.create.name=Nom du forum +forum.post.create.name=Titre du post +firstname/name=Prénom/Nom +regNo=Matricule +From=De +To=A +WantedCursus=Cursus voulu +seeprofile=Voir le profil +acceptequiv=Accepter l'équivalence +refuseequiv=Refuser l'équivalence +course=cours +state=état +dljustifdoc=Télécharger le justificatif +backtoreq=Retour a la requête +dlidentitycard=Télécharger la carte d'identité +dladmissiondoc=Télécharger le certificat d'admission +seeextcur=Voir le parcours extérieur +dltaxdoc=Télécharger le justificatif d'impot +dlresidency=Télécharger le justificatif de résidence +enteramount=Veuillez entrer le montant alloué : +oldcursus=Anciens cursus +newcursus=Nouveaux cursus +year=Année +reason=Raison : +selectedcursus=Cursus selectionné : +askexemp=Demander une dispense +exemp=Dispensé +uploadjustifdoc=Veuillez soumettre le justificatif +subexemreq=Envoyer la demande de dispense +addextcurr=Ajouter une formation +dldoc=Télécharger le document +edit=Modifier +delete=Supprimer +school=Ecole +checkifnotcompleted=Cochez la case si vous n'avez terminé cette formation +wichyearstop=En quelle année de la formation vous êtes vous arrété (exemple: 3ème) ? +startyear=Année de début +endyear=Année de fin +giveextcurdoc=Veuillez soumettre un document attestant de ce parcours +uploadcurr=Ajouter la formation +editcurr=Modifier la formation +reqtype=Type de requête : +inscription=inscription +scholarship=bourse +exemption=dispense +unregister=désinscription +curriculumch=changement de cursus +filer=Filtre : +approval=Approbation : +teacherapproval=Approbation d'un prof : +surreq=Etes vous sur de vouloir accepter cette demande ? +validate=Valider +amount=Montant +role=Role +manageextcur=Gérer les formations +managecourse=Gérer les cours +manageminerval=Gérer le minerval +enterreason=Veuillez entrer la raison de votre départ +onlycursus=Je veux uniquement me désinscrire d'un seul cursus +plsselectcurs=Veuillez sélectionner ce cursus +sureunreg=Etes-vous sur de vouloir vous désinscrire ? +no=Non +yes=Oui +reqsend=Votre requête a été envoyée ! +payment=Payement +lefttopay=restants a payer +paydeposit=Payer l'acompte +payrest=Payer le reste +alreadypaid=Payement : les frais ont déja été payés cette année +askscholarship=Demander une bourse +uploaddocs=Veuillez soumettre les documents requis +taxjustdoc=Justificatif d'impôts : +residencydoc=Justificatif de résidence : +reqsent=Votre requête a été envoyée au service d'inscription. +backprofile=Retour au profil +procpayment=Procéder au payement de +procpaybutton=Procéder au payement +rereg=Me réinscrire dans l'année supérieure +reregsup=M'inscrire dans un cursus supplémentaire +chcur=Changer d'un cursus vers un autre +iwouldlike=Je voudrais : +newcurr=Nouveau cursus +cursusprereq=Le cursus que vous avez selectionné a des prérequis assurez vous que votre dossier de parcours est a jour dans votre profil +imposecurriculum=Imposer un cursusgotimposed +impose=Imposer +gotimposed=Le cursus selectionné a été imposé diff --git a/frontend/public/i18n/FR.txt.orig b/frontend/public/i18n/FR.txt.orig new file mode 100644 index 0000000..01b9b8d --- /dev/null +++ b/frontend/public/i18n/FR.txt.orig @@ -0,0 +1,293 @@ +login.guest.signin=SE CONNECTER +login.guest.register=S'enregistrer +login.guest.alregister=Déjà Enregistré +login.guest.welcome=BIENVENUE A L'UNIVERSITE +login.guest.email=E-MAIL +login.guest.firstname=PRENOM +login.guest.surname=NOM +login.guest.country=PAYS +login.guest.address=ADRESSE +login.guest.password=MOT DE PASSE +login.guest.nextpage=Prochaine Page +login.guest.lastpage=Derniere Page +login.guest.submit=Envoyer +login.guest.birthday=DATE DE NAISSANCE +login.guest.confirm=CONFIRMER +login.guest.browse=Parcourir... +login.guest.disclaimer=Si vous êtes déja inscrits dans cette université veuillez vous connecter a votre compte et utilisez les fonctions changer de cursus/réinscription sinon continuez ici. +login.guest.identityCard=Carte d'identité : +login.guest.attestationdisclaimer=Ce cursus requiert une attestation de réussite d'un examen d'entrée +login.guest.formationdisclaimer=Veuillez ajouter vos formations antérieures en y joignant les attestations/diplomes, votre dossier sera vérifié par un membre du service d'inscription. +login.guest.managecareer=Gèrer mon parcours extérieur +login.guest.sendRegReq=Envoyer la demande d'inscription +login.cPassword=Confirmer mot de passe +login.password=Mot de passe +app.home=Home +app.login=Se connecter +app.notifications=Notifications +app.settings=Options +app.messages=Messages +app.forum=Forum +app.schedules=Horaires +app.manageSchedules=Gérer les horaires +app.inscription.requests=Demandes d'Inscription +app.manage.courses=Gérer les cours +app.language=Langue +app.manage.profile=Gérer le profil +app.studentList=Liste des étudiants +app.users=Utilisateurs +<<<<<<< HEAD +app.manage.researcherProfile= gérer son profil de chercheur +app.list.researches=Lister les recherches +app.Create.User=créer un utilisateur +======= +app.manageOwnLessons=Gérer ses horaires de cours +app.lessonRequests=Requêtes d'horaire +app.payments=Payements +>>>>>>> origin/master +request.moreInfos=Plus d'Infos +request.accept=Accepter +request.refuse=Refuser +Pending=En attente +Delete=Supprimer +Modify=Modifier +Create=Créer +requestType=Type de Requête +day=Jour +start=Début +end=Fin +monday=Lundi +tuesday=Mardi +wednesday=Mercredi +thursday=Jeudi +friday=Vendredi +saturday=Samedi +sunday=Dimanche +january=Janvier +february=Février +march=Mars +april=Avril +may=Mai +june=Juin +july=Juillet +august=Août +september=Septembre +october=Octobre +november=Novembre +december=Decembre +Grid=Grille +Week=Semaine +Month=Mois +List=Liste +Type=Type +Teacher=Professeur +Course=Cours +TP=TP +TD=TD +Exam=Exam +OwnSchedule=Mon Horaire +SwitchToJSON=Afficher le JSON +schedule.previous=Précédent +schedule.next=Prochain +schedule.current=Actuel +schedule.settings=Options +schedule.courses=Cours +schedule.teachers=Professeurs(s) +schedule.askChanges=Demander Changement +schedule.askCreate=Demander de créer un cours +schedule.askDeletion=Demander suppression +schedule.createSchedule=Créer Horaire +schedule.createLesson=Créer cours +schedule.deleteMod=Activer suppression +schedule.noDeleteMod=Désactiver suppression +schedule=Horaire +old_day=Ancien Jour +old_start=Ancien Début +old_end=Ancienne Fin +old_type=Ancien Type +courses.createCourse=Créer un cours +courses.deleteCourse=Supprimer un cours +courses.modify=Modifier +courses.toDelete=Cours à supprimer +courses.confirm=Confirmer +courses.back=Retour +courses.AddToCurriculum=Ajouter à un cursus +profile.modify.data=Modifier données personnelles +profile.reRegister=Réinsciption +profile.unRegister=Désinscription +profile.course.list=Liste des cours +profile.address=Adresse +profile.picture=Photo de profil +profile.change.curriculum=Changer cursus +name=Nom +Teacher=Enseignant +Student=Etudiant +Secretary=Secrétaire +Curriculum=Cursus +Credits=Credits +InscriptionService=S.I. +faculty=Faculté +<<<<<<< HEAD +Year=Année +Access=Accès +Access.Restricted=Restreint +Access.OpenSource=Libre +Access.Private=Privé +Language=Langue +Month=Mois +Month.01=janvier +Month.02=fevrier +Month.03=mars +Month.04=avril +Month.05=mai +Month.06=juin +Month.07=juillet +Month.08=août +Month.09=septembre +Month.10=octobre +Month.11=novembre +Month.12=decembre +Domain=Domaine +PaperType=Type de recherche +Submit=Envoyer +Search.Researches=Chercher Par Recherche +Search.Researchers=Chercher Par Chercheur +Filters=Filtres +Toggle.Researcher=Activer la recherche par chercheur +Untoggle.Researcher=Désactiver la recherche par chercheur +MoreInfo=Plus d'info +Modify.Research=Modifer l'article +To.Change.In.Options=À changer dans les options +Modify.Data=Modifier +Confirm.Changes=Confirmer les Changements +Cancel.Changes=Abandonner les Changements +Post.Research=Poster un nouvel article +Summary=Résumé +Title=Titre +Views=Nombre de Vues +See.Research=Ouvrir l'article +SeeBibTex=Ouvrir le BibTex +Author=Autheur +CoAuthors=Co-Autheurs +ReleaseDate=Date de Parution +Article.Id=Id de l'article +Delete.Research=Supprimer l'article +Here=Ici +Stat.Type=Type de Stat +Researches=Recherches +Please.Select.Option=Selectionnez des Options +Class.By=Classifer Par +PaperType.Article=Article +PaperType.Book=Livre +PaperType.Book.Chapter=Chapitre de Livre +PaperType.Paper=Papier +Research.Pdf=Pdf de la Recherche +BibTex.Pdf=BibTex de la Recherche +CoAuthors.List=Liste des Co-Autheurs +Confirm.Publish=Confirmer la Publication +Cancel.Publish=Annuler la Publication +Years=Années +Months=Mois +By=par +RegNo=Matricule +Address=Adresse +Country=Pays +BirthDate=Date de Naissance +Confirm=Confirmer +Cancel=Annuler +LastName=Nom de Famille +FirstName=Prénom +Profile.Picture=Photo de Profil +Role=Role +Password=Mot de Passe +Create.User=Créer l'utilisateur +======= +msg.notification.new=Vous avez un nouveau message! +forum.create=Créer un forum +forum.create.name=Nom du forum +forum.post.create.name=Titre du post +firstname/name=Prénom/Nom +regNo=Matricule +From=De +To=A +WantedCursus=Cursus voulu +seeprofile=Voir le profil +acceptequiv=Accepter l'équivalence +refuseequiv=Refuser l'équivalence +course=cours +state=état +dljustifdoc=Télécharger le justificatif +backtoreq=Retour a la requête +dlidentitycard=Télécharger la carte d'identité +dladmissiondoc=Télécharger le certificat d'admission +seeextcur=Voir le parcours extérieur +dltaxdoc=Télécharger le justificatif d'impot +dlresidency=Télécharger le justificatif de résidence +enteramount=Veuillez entrer le montant alloué : +oldcursus=Anciens cursus +newcursus=Nouveaux cursus +year=Année +reason=Raison : +selectedcursus=Cursus selectionné : +askexemp=Demander une dispense +exemp=Dispensé +uploadjustifdoc=Veuillez soumettre le justificatif +subexemreq=Envoyer la demande de dispense +addextcurr=Ajouter une formation +dldoc=Télécharger le document +edit=Modifier +delete=Supprimer +school=Ecole +checkifnotcompleted=Cochez la case si vous n'avez terminé cette formation +wichyearstop=En quelle année de la formation vous êtes vous arrété (exemple: 3ème) ? +startyear=Année de début +endyear=Année de fin +giveextcurdoc=Veuillez soumettre un document attestant de ce parcours +uploadcurr=Ajouter la formation +editcurr=Modifier la formation +reqtype=Type de requête : +inscription=inscription +scholarship=bourse +exemption=dispense +unregister=désinscription +curriculumch=changement de cursus +filer=Filtre : +approval=Approbation : +teacherapproval=Approbation d'un prof : +surreq=Etes vous sur de vouloir accepter cette demande ? +validate=Valider +amount=Montant +role=Role +manageextcur=Gérer les formations +managecourse=Gérer les cours +manageminerval=Gérer le minerval +enterreason=Veuillez entrer la raison de votre départ +onlycursus=Je veux uniquement me désinscrire d'un seul cursus +plsselectcurs=Veuillez sélectionner ce cursus +sureunreg=Etes-vous sur de vouloir vous désinscrire ? +no=Non +yes=Oui +reqsend=Votre requête a été envoyée ! +payment=Payement +lefttopay=restants a payer +paydeposit=Payer l'acompte +payrest=Payer le reste +alreadypaid=Payement : les frais ont déja été payés cette année +askscholarship=Demander une bourse +uploaddocs=Veuillez soumettre les documents requis +taxjustdoc=Justificatif d'impôts : +residencydoc=Justificatif de résidence : +reqsent=Votre requête a été envoyée au service d'inscription. +backprofile=Retour au profil +procpayment=Procéder au payement de +procpaybutton=Procéder au payement +rereg=Me réinscrire dans l'année supérieure +reregsup=M'inscrire dans un cursus supplémentaire +chcur=Changer d'un cursus vers un autre +iwouldlike=Je voudrais : +newcurr=Nouveau cursus +cursusprereq=Le cursus que vous avez selectionné a des prérequis assurez vous que votre dossier de parcours est a jour dans votre profil +imposecurriculum=Imposer un cursusgotimposed +impose=Imposer +gotimposed=Le cursus selectionné a été imposé +>>>>>>> origin/master diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 6a17f6c..cc62e8f 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -3,6 +3,7 @@ import { ref } from 'vue' import i18n, { setLang } from './i18n.js' import { isLogged } from '@/rest/Users.js' + import { notifications, fetchNotifications, archiveNotification } from '@/rest/notifications.js' import { appList, currentView } from '@/rest/apps.js' var prevURL; @@ -14,17 +15,20 @@ window.onhashchange = function() { } const Logged = ref(isLogged()); +if(Logged.value){ + fetchNotifications(); +} + window.addEventListener('hashchange', () => { if((location.hash === "#/home" && prevURL === "#/login") || (location.hash === "#/home" && prevURL === "#/profil")){ window.location.reload(); } }); const home=ref(i18n("app.home")) - const notifications=ref(i18n("app.notifications")) const settings=ref(i18n("app.settings")) const login=ref(i18n("app.login")) const active=ref(false) - + const notification = ref(false) const apps = ref([]) appList().then(e => apps.value = e) @@ -33,7 +37,6 @@ window.addEventListener('hashchange', () => {