From f1f0059b2ff41e5b8fdc2aea65697a05133043e1 Mon Sep 17 00:00:00 2001 From: Shivangi Patel Date: Mon, 6 May 2024 21:40:37 -0500 Subject: [PATCH 1/5] Solved exceptions --- .idea/compiler.xml | 1 + .../myappvs/courseCatalog/Catalog.java | 1 - .../courseDescription/CourseDescription.java | 11 ++++---- .../CourseDescriptionController.java | 18 ++++++------- .../CourseDescriptionRepository.java | 2 +- .../CourseDescriptionService.java | 16 ++++++------ .../courseDescription/package-info.java | 2 +- .../myappvs/instructor/Instructor.java | 1 + .../studentAccounts/StudentAccounts.java | 2 +- myappvs/src/main/resources/import.sql | 26 ++++++++++++++----- myappvs/src/main/resources/schema.sql | 24 +++++++++++++++++ 11 files changed, 72 insertions(+), 32 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb56945..8509211 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java index 6bd578d..8a8a3ae 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java @@ -34,7 +34,6 @@ public class Catalog { private String courseDesc; @ManyToOne - @Column(name="Instructor_ID") @JoinColumn(name = "instructorId", referencedColumnName = "instructorId") private Instructor courseIns; // Reference to Instructor entity diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java index 07a2190..feaf9a3 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java @@ -1,6 +1,7 @@ package com.CourseManagementSystem.myappvs.courseDescription; import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; +import com.CourseManagementSystem.myappvs.instructor.Instructor; import jakarta.persistence.*; import lombok.ToString.Exclude; @@ -22,9 +23,9 @@ public class CourseDescription { private Catalog courseId; @Exclude - @OneToOne + @ManyToOne @JoinColumn(name = "instructorId", referencedColumnName = "instructorId") - private long instructorId; + private Instructor instructorId; private String room; @@ -40,7 +41,7 @@ public CourseDescription() { // Default constructor required by Hibernate } - public CourseDescription(long courseDescriptionId, long instructorId, String room, Date date, Time time, String meetingInfo, String materials){ + public CourseDescription(long courseDescriptionId, Instructor instructorId, String room, Date date, Time time, String meetingInfo, String materials){ this.courseDescriptionId = courseDescriptionId; this.instructorId = instructorId; this.room = room; @@ -60,7 +61,7 @@ public Date getDate() { return date; } - public long getInstructorId() { + public Instructor getInstructorId() { return instructorId; } @@ -84,7 +85,7 @@ public void setDate(Date date) { this.date = date; } - public void setInstructorId(long instructorId) { + public void setInstructorId(Instructor instructorId) { this.instructorId = instructorId; } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java index bd3ca0e..3e43a88 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java @@ -19,14 +19,14 @@ public CourseDescriptionController(CourseDescriptionService courseDescriptionSer this.courseDescriptionService = courseDescriptionService; } - @GetMapping("/course-descriptions/{id}") - public ResponseEntity getCourseDescriptionById(@PathVariable Long id)throws Exception { - CourseDescription courseDescription = courseDescriptionService.getCourseDescriptionById(id); - if (courseDescription != null) { - return new ResponseEntity(courseDescription, HttpStatus.OK); - } else { - return new ResponseEntity(HttpStatus.NOT_FOUND); - } - } +// @GetMapping("/course-descriptions/{id}") +// public ResponseEntity getCourseDescriptionById(@PathVariable Long id)throws Exception { +// CourseDescription courseDescription = courseDescriptionService.getCourseDescriptionById(id); +// if (courseDescription != null) { +// return new ResponseEntity(courseDescription, HttpStatus.OK); +// } else { +// return new ResponseEntity(HttpStatus.NOT_FOUND); +// } + // } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java index dedff34..309d61f 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java @@ -7,5 +7,5 @@ public interface CourseDescriptionRepository extends JpaRepository { - Optional findByCourseId(Long courseId); + // Optional findByCourseId(Long courseId); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java index d101717..f3ae702 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java @@ -18,13 +18,13 @@ public CourseDescriptionService(CourseDescriptionRepository courseDescriptionRep } - public CourseDescription getCourseDescriptionById(Long id) throws Exception { - Optional optionalCourseDescription = courseDescriptionRepository.findByCourseId(id); - - if(!optionalCourseDescription.isPresent()){ - throw new Exception("Course with " +id+" does not exist"); - } - return optionalCourseDescription.orElse(null); - } +// public CourseDescription getCourseDescriptionById(Long id) throws Exception { +// Optional optionalCourseDescription = courseDescriptionRepository.findByCourseId(id); +// +// if(!optionalCourseDescription.isPresent()){ +// throw new Exception("Course with " +id+" does not exist"); +// } +// return optionalCourseDescription.orElse(null); +// } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java index d5c70b6..50f6f53 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java @@ -4,7 +4,7 @@ * This entity has detailed information regarding course which can be accessed after enrolling into the course. * *
  • One to one relationship between courseDescription and courseCatalog - *
  • One to one relationship between courseDescription and instructor + *
  • Many to one relationship between courseDescription and instructor * * @author Shivangi Patel */ diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java index 967a4e1..bd7b9f5 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java @@ -17,6 +17,7 @@ public class Instructor { private String instructorName; + private String instructorDescription; private Time meetingHours; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java index e2c8aa8..d195c1e 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java @@ -6,7 +6,7 @@ import lombok.ToString.Exclude; @Entity -@Table(name = "student_accounts") +@Table(name = "Student_Accounts") public class StudentAccounts { @Id diff --git a/myappvs/src/main/resources/import.sql b/myappvs/src/main/resources/import.sql index e223781..ea36531 100644 --- a/myappvs/src/main/resources/import.sql +++ b/myappvs/src/main/resources/import.sql @@ -22,12 +22,26 @@ INSERT INTO advisors(name, email) VALUES ('bob', 'bob@test.com') INSERT INTO advisors(name, email) VALUES ('charlie', 'charlie@test.com') -- Insert into Catalog table -INSERT INTO Course_Catalog (courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 21251, 3); -INSERT INTO Course_Catalog (courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 21351, 4); +INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 21251, 3); +INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 21351, 4); -- Insert into Enrollment table -INSERT INTO Enrollment (Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); -INSERT INTO Enrollment (Enrollment_Id, student_id, courseId) VALUES (2, 123456789, 101); -INSERT INTO Enrollment (Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); - +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789, 101); +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); + +-- Insert into instructor table +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (1, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (2, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (3, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); + +-- Insert into Course Description table +INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'Introduction to Programming', 'Lecture Slides'); +INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'Advanced Database Management', 'Textbook, Exercises'); +INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (3, 103, 203, 'Room C', '2024-05-15', '11:00:00', 'Machine Learning Fundamentals', 'Online Resources'); + +-- Insert into Student Account table +INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (1, 101, 100.00); +INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (2, 102, 200.00); +INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (3, 103, 150.00); diff --git a/myappvs/src/main/resources/schema.sql b/myappvs/src/main/resources/schema.sql index ece9d4f..7ad0998 100644 --- a/myappvs/src/main/resources/schema.sql +++ b/myappvs/src/main/resources/schema.sql @@ -24,3 +24,27 @@ CREATE TABLE IF NOT EXISTS Enrollment ( courseId INT NOT NULL ); +CREATE TABLE IF NOT EXISTS Course_Description ( + courseDescriptionId INT PRIMARY KEY, + courseId INT, + instructorId INT, + room VARCHAR(255), + date DATE, + time TIME, + meetingInfo VARCHAR(255), + materials VARCHAR(255) +); + +CREATE TABLE IF NOT EXISTS Instructor ( + instructorId INT PRIMARY KEY, + instructorName VARCHAR(255), + instructorDescription VARCHAR(255), + meetingHours TIME, + instructorCabinLocation VARCHAR(255) +); + +CREATE TABLE IF NOT EXISTS Student_Accounts ( + studentAccountsId INT PRIMARY KEY, + student_id INT, + balance DOUBLE +); From c094262a09b7724d1d160cd9afe0169237e017da Mon Sep 17 00:00:00 2001 From: Shivangi Patel Date: Mon, 6 May 2024 22:13:52 -0500 Subject: [PATCH 2/5] Removed exception --- ReadMe.md | 22 ++++++++++++---------- myappvs/src/main/resources/import.sql | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index 08b8cf7..3710015 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,22 +1,24 @@ # COURSE_MANAGEMENT_SYSTEM The objective of the Project is to develop an Application which is similar to D2L. Major sections of this App would be: 1. Login / Sign-up -2. Course Search and Enrollment -3. Enrolled Courses -4. Course Specific Content +2. Course Catalog and Enrolled Section +3. Course Specific Content +4. Student Accounts 5. Profile +6. Student Resources +7. Advisors Appointment All of these Sections will be Accessible from a HomePage similar to Campus Connect. All the sections will be displayed as Cards to select from. The prototype for this app demonstrates these features and is located [here.](https://docs.google.com/presentation/d/1QjD8G9kpWbk5O_mX6PxxExSkT-fPpU7aEpygSH_JCzo/edit?usp=sharing) # Project Members -| Member | Area | -|--------------------------------------|--------------------------------------| -| Patel Jay Rashmitbhai | Login/Sign-up | -| Reddy Guntaka Satish Harshavardhan | Course Search (Catalog) | -| Puneeth Talluri | Enrolled Courses | -| Patel Shivangi | Course Details,Home Page | -| Siddiqui Atif | Profile | +| Member | Area | +|--------------------------------------|-------------------------------------- | +| Patel Jay Rashmitbhai | Login/Sign-up , Profile ,Events | +| Reddy Guntaka Satish Harshavardhan | Advisor | +| Puneeth Talluri |Course Search (Catalog). Enrolled Courses | +| Patel Shivangi | Course Details, Student Accounts | +| Siddiqui Atif | Student resource | # Conflict Resolution diff --git a/myappvs/src/main/resources/import.sql b/myappvs/src/main/resources/import.sql index ea36531..c111e18 100644 --- a/myappvs/src/main/resources/import.sql +++ b/myappvs/src/main/resources/import.sql @@ -22,8 +22,8 @@ INSERT INTO advisors(name, email) VALUES ('bob', 'bob@test.com') INSERT INTO advisors(name, email) VALUES ('charlie', 'charlie@test.com') -- Insert into Catalog table -INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 21251, 3); -INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Course_Instructor, Course_Credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 21351, 4); +INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Instructor_ID, Course_Credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 21251, 3); +INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Instructor_ID, Course_Credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 21351, 4); -- Insert into Enrollment table INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); From d8873fb8dc85be5ba76d91f33b9c6593a2c4e983 Mon Sep 17 00:00:00 2001 From: Shivangi Patel Date: Mon, 10 Jun 2024 19:27:38 -0500 Subject: [PATCH 3/5] Added Discussion --- ReadMe.md | 36 +- myappvs.zip | Bin 0 -> 472306 bytes myappvs/bin/.gitignore | 34 ++ myappvs/bin/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../bin/.mvn/wrapper/maven-wrapper.properties | 2 + myappvs/bin/mvnw | 308 ++++++++++++++++++ myappvs/bin/mvnw.cmd | 205 ++++++++++++ myappvs/bin/pom.xml | 155 +++++++++ .../myappvs/CourseApp.class | Bin 0 -> 2253 bytes .../myappvs/Testcontroller.class | Bin 0 -> 1454 bytes .../myappvs/advsior/Advisor.class | Bin 0 -> 6856 bytes .../myappvs/advsior/AdvisorController.class | Bin 0 -> 2492 bytes .../myappvs/advsior/AdvisorRepository.class | Bin 0 -> 1196 bytes .../myappvs/advsior/package-info.class | Bin 0 -> 162 bytes .../myappvs/appointment/Appointment.class | Bin 0 -> 7860 bytes .../appointment/AppointmentController.class | Bin 0 -> 3251 bytes .../appointment/AppointmentRepository.class | Bin 0 -> 1690 bytes .../appointment/AppointmentService.class | Bin 0 -> 2871 bytes .../myappvs/appointment/package-info.class | Bin 0 -> 166 bytes .../myappvs/courseCatalog/Catalog.class | Bin 0 -> 8189 bytes .../courseCatalog/CatalogRespository.class | Bin 0 -> 404 bytes .../myappvs/courseCatalog/Enrollment.class | Bin 0 -> 6675 bytes .../courseCatalog/EnrollmentRepository.class | Bin 0 -> 411 bytes .../myappvs/courseCatalog/package-info.class | Bin 0 -> 168 bytes .../courseDescription/CourseDescription.class | Bin 0 -> 5638 bytes .../CourseDescriptionController.class | Bin 0 -> 2793 bytes .../CourseDescriptionDto.class | Bin 0 -> 8867 bytes .../CourseDescriptionMapper.class | Bin 0 -> 4781 bytes .../CourseDescriptionRepository.class | Bin 0 -> 1511 bytes .../CourseDescriptionService.class | Bin 0 -> 855 bytes .../impl/CourseDescriptionServiceImpl.class | Bin 0 -> 2409 bytes .../courseDescription/package-info.class | Bin 0 -> 172 bytes .../myappvs/event/Event.class | Bin 0 -> 7206 bytes .../myappvs/event/EventController.class | Bin 0 -> 5880 bytes .../myappvs/event/Eventrepo.class | Bin 0 -> 1256 bytes .../myappvs/event/Eventservice.class | Bin 0 -> 1369 bytes .../myappvs/event/package-info.class | Bin 0 -> 160 bytes .../myappvs/instructor/Instructor.class | Bin 0 -> 3565 bytes .../instructor/InstructorController.class | Bin 0 -> 2511 bytes .../myappvs/instructor/InstructorDto.class | Bin 0 -> 10400 bytes .../myappvs/instructor/InstructorMapper.class | Bin 0 -> 2941 bytes .../instructor/InstructorRepository.class | Bin 0 -> 1310 bytes .../instructor/InstructorService.class | Bin 0 -> 1391 bytes .../myappvs/instructor/package-info.class | Bin 0 -> 165 bytes .../myappvs/profile/Profilecontroller.class | Bin 0 -> 6334 bytes .../myappvs/profile/package-info.class | Bin 0 -> 162 bytes .../myappvs/rentals/Equipment.class | Bin 0 -> 7482 bytes .../myappvs/rentals/EquipmentController.class | Bin 0 -> 1970 bytes .../myappvs/rentals/EquipmentRepository.class | Bin 0 -> 396 bytes .../myappvs/rentals/EquipmentService.class | Bin 0 -> 1760 bytes .../myappvs/rentals/Rental.class | Bin 0 -> 7604 bytes .../myappvs/rentals/RentalController.class | Bin 0 -> 1945 bytes .../myappvs/rentals/RentalRepository.class | Bin 0 -> 444 bytes .../myappvs/rentals/RentalService.class | Bin 0 -> 1582 bytes .../myappvs/rentals/package-info.class | Bin 0 -> 162 bytes .../security/Auth/AuthenticationService.class | Bin 0 -> 3950 bytes .../Auth/JwtAuthresp$JwtAuthrespBuilder.class | Bin 0 -> 5031 bytes .../myappvs/security/Auth/JwtAuthresp.class | Bin 0 -> 4743 bytes .../security/Controller/Authcontrol.class | Bin 0 -> 5182 bytes ...sponse$AuthenticationResponseBuilder.class | Bin 0 -> 5304 bytes .../Controller/AuthenticationResponse.class | Bin 0 -> 4966 bytes ...request$AuthenticationrequestBuilder.class | Bin 0 -> 6706 bytes .../Controller/Authenticationrequest.class | Bin 0 -> 6257 bytes .../security/Controller/Authoricontrol.class | Bin 0 -> 1784 bytes ...gisterrequest$RegisterrequestBuilder.class | Bin 0 -> 7710 bytes .../security/Controller/Registerrequest.class | Bin 0 -> 7771 bytes .../myappvs/security/Service/Jwtservice.class | Bin 0 -> 6369 bytes .../security/config/Applicationconfig.class | Bin 0 -> 3768 bytes .../security/config/Jwtauthfilter.class | Bin 0 -> 3911 bytes .../config/SecurityConfiguration.class | Bin 0 -> 2879 bytes .../student/Student$StudentBuilder.class | Bin 0 -> 7494 bytes .../myappvs/student/Student.class | Bin 0 -> 8318 bytes .../myappvs/student/Studentrepository.class | Bin 0 -> 1380 bytes .../myappvs/student/package-info.class | Bin 0 -> 162 bytes .../studentAccounts/StudentAccountDto.class | Bin 0 -> 5387 bytes .../StudentAccountService.class | Bin 0 -> 1611 bytes .../studentAccounts/StudentAccounts.class | Bin 0 -> 2969 bytes .../StudentAccountsMapper.class | Bin 0 -> 2143 bytes .../StudentAccountsRepository.class | Bin 0 -> 1310 bytes .../studentAccounts/package-info.class | Bin 0 -> 170 bytes .../studentAccountsController.class | Bin 0 -> 2640 bytes .../myappvs/user/Homecontroller.class | Bin 0 -> 1297 bytes .../myappvs/user/Loginservice.class | Bin 0 -> 4302 bytes .../myappvs/user/Role.class | Bin 0 -> 1038 bytes .../myappvs/user/Userservice.class | Bin 0 -> 723 bytes .../myappvs/user/Userserviceimpl.class | Bin 0 -> 2157 bytes .../myappvs/user/package-info.class | Bin 0 -> 159 bytes .../src/main/resources/application.properties | 27 ++ myappvs/bin/src/main/resources/import.sql | 55 ++++ myappvs/bin/src/main/resources/js/script.js | 43 +++ myappvs/bin/src/main/resources/schema.sql | 50 +++ .../resources/static/courseDescription.html | 57 ++++ .../static/css/courseDescription.css | 31 ++ .../main/resources/static/css/instructor.css | 24 ++ .../resources/static/css/studentAccounts.css | 43 +++ .../src/main/resources/static/css/style.css | 53 +++ .../bin/src/main/resources/static/events.html | 184 +++++++++++ .../bin/src/main/resources/static/home.html | 75 +++++ .../bin/src/main/resources/static/index.html | 18 + .../src/main/resources/static/instructor.html | 47 +++ .../bin/src/main/resources/static/login.html | 62 ++++ .../src/main/resources/static/profile.html | 266 +++++++++++++++ .../src/main/resources/static/rentals.html | 30 ++ .../bin/src/main/resources/static/signup.html | 111 +++++++ .../resources/static/studentAccounts.html | 113 +++++++ .../myappvs/MyappvsApplicationTests.class | Bin 0 -> 1126 bytes .../advisor/AdvisorRepositoryTest.class | Bin 0 -> 2567 bytes myappvs/pom.xml | 44 ++- .../myappvs/CourseApp.java | 37 ++- .../myappvs/Notes/StudentNote.java | 24 ++ .../myappvs/Notes/StudentNoteController.java | 56 ++++ .../myappvs/Notes/StudentNoteRepository.java | 9 + .../myappvs/Notes/StudentNoteService.java | 29 ++ .../myappvs/Notes/package-info.java | 24 ++ .../myappvs/advsior/Advisor.java | 2 +- .../myappvs/advsior/AdvisorController.java | 26 ++ .../myappvs/appointment/Appointment.java | 2 +- .../appointment/AppointmentController.java | 38 +++ .../appointment/AppointmentRepository.java | 5 +- .../appointment/AppointmentService.java | 35 ++ .../myappvs/courseCatalog/Catalog.java | 6 +- .../courseCatalog/CatalogController.java | 41 +++ .../courseCatalog/CatalogRepository.java | 7 + .../myappvs/courseCatalog/CatalogService.java | 19 ++ .../CourseEnrollmentRequest.java | 14 + .../myappvs/courseCatalog/Enrollment.java | 17 +- .../courseCatalog/EnrollmentController.java | 86 +++++ .../courseCatalog/EnrollmentRepository.java | 6 + .../courseCatalog/EnrollmentService.java | 82 +++++ .../myappvs/courseCatalog/package-info.java | 32 +- .../courseDescription/CourseDescription.java | 86 +---- .../CourseDescriptionController.java | 44 ++- .../CourseDescriptionDto.java | 28 ++ .../CourseDescriptionMapper.java | 30 ++ .../CourseDescriptionRepository.java | 7 +- .../CourseDescriptionService.java | 28 +- .../impl/CourseDescriptionServiceImpl.java | 27 ++ .../courseDescription/package-info.java | 37 ++- .../myappvs/discussion/Discussion.java | 34 ++ .../discussion/DiscussionController.java | 106 ++++++ .../discussion/DiscussionRepository.java | 16 + .../myappvs/discussion/DiscussionService.java | 66 ++++ .../myappvs/discussion/package-info.java | 6 + .../myappvs/event/Event.java | 71 +--- .../myappvs/event/EventController.java | 86 ++++- .../myappvs/event/Eventrepo.java | 12 + .../myappvs/event/Eventrepository.java | 14 - .../myappvs/event/Eventservice.java | 29 +- .../myappvs/instructor/Instructor.java | 59 +--- .../instructor/InstructorController.java | 31 ++ .../myappvs/instructor/InstructorDto.java | 22 ++ .../myappvs/instructor/InstructorMapper.java | 28 ++ .../instructor/InstructorRepository.java | 4 + .../myappvs/instructor/InstructorService.java | 19 ++ .../myappvs/instructor/package-info.java | 32 ++ .../myappvs/profile/Profilecontroller.java | 106 ++++++ .../myappvs/profile/package-info.java | 8 + .../myappvs/rentals/Equipment.java | 41 +++ .../myappvs/rentals/EquipmentController.java | 21 ++ .../myappvs/rentals/EquipmentRepository.java | 9 + .../myappvs/rentals/EquipmentService.java | 23 ++ .../myappvs/rentals/Rental.java | 31 ++ .../myappvs/rentals/RentalController.java | 21 ++ .../myappvs/rentals/RentalRepository.java | 9 + .../myappvs/rentals/RentalService.java | 18 + .../myappvs/rentals/package-info.java | 24 ++ .../security/Auth/AuthenticationService.java | 63 ++++ .../myappvs/security/Auth/JwtAuthresp.java | 14 + .../security/Controller/Authcontrol.java | 58 ++++ .../Controller/AuthenticationResponse.java | 14 + .../Controller/Authenticationrequest.java | 16 + .../security/Controller/Authoricontrol.java | 18 + .../security/Controller/Registerrequest.java | 20 ++ .../myappvs/security/Service/Jwtservice.java | 71 ++++ .../security/config/Applicationconfig.java | 58 ++++ .../security/config/Jwtauthfilter.java | 62 ++++ .../config/SecurityConfiguration.java | 56 ++++ .../myappvs/student/Student.java | 74 +++-- .../myappvs/student/Studentrepository.java | 14 +- .../studentAccounts/StudentAccountDto.java | 24 ++ .../StudentAccountService.java | 23 ++ .../studentAccounts/StudentAccounts.java | 44 +-- .../StudentAccountsMapper.java | 26 ++ .../StudentAccountsRepository.java | 8 +- .../myappvs/studentAccounts/package-info.java | 40 ++- .../studentAccountsController.java | 32 ++ .../myappvs/user/Homecontroller.java | 13 + .../myappvs/user/Login.java | 60 ---- .../myappvs/user/Loginservice.java | 48 +-- .../myappvs/user/Role.java | 6 + .../myappvs/user/User.java | 29 -- .../myappvs/user/Userrepository.java | 11 - .../myappvs/user/Userservice.java | 7 + .../myappvs/user/Userserviceimpl.java | 27 ++ .../src/main/resources/application.properties | 11 +- myappvs/src/main/resources/import.sql | 44 ++- myappvs/src/main/resources/js/script.js | 43 +++ myappvs/src/main/resources/schema.sql | 76 ++--- .../main/resources/static/courseCatalog.html | 170 ++++++++++ .../resources/static/courseDescription.html | 131 ++++++++ .../static/css/courseDescription.css | 31 ++ .../main/resources/static/css/instructor.css | 24 ++ .../resources/static/css/studentAccounts.css | 43 +++ .../src/main/resources/static/css/style.css | 63 ++-- .../src/main/resources/static/discussion.html | 237 ++++++++++++++ .../main/resources/static/enrollments.html | 177 ++++++++++ myappvs/src/main/resources/static/events.html | 193 +++++++++++ myappvs/src/main/resources/static/home.html | 142 ++++++++ myappvs/src/main/resources/static/index.html | 18 +- .../src/main/resources/static/instructor.html | 47 +++ myappvs/src/main/resources/static/login.html | 31 +- .../src/main/resources/static/profile.html | 266 +++++++++++++++ .../src/main/resources/static/rentals.html | 30 ++ myappvs/src/main/resources/static/signup.html | 133 +++++--- .../resources/static/studentAccounts.html | 113 +++++++ .../main/resources/static/studentNotes.html | 212 ++++++++++++ .../profile/ProfileControllerTest.java | 117 +++++++ .../myappvs/user/LoginServiceTest.java | 112 +++++++ 218 files changed, 6636 insertions(+), 667 deletions(-) create mode 100644 myappvs.zip create mode 100644 myappvs/bin/.gitignore create mode 100644 myappvs/bin/.mvn/wrapper/maven-wrapper.jar create mode 100644 myappvs/bin/.mvn/wrapper/maven-wrapper.properties create mode 100644 myappvs/bin/mvnw create mode 100644 myappvs/bin/mvnw.cmd create mode 100644 myappvs/bin/pom.xml create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/Testcontroller.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRespository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Enrollment.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionDto.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Event.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorDto.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorMapper.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/profile/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/Equipment.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp$JwtAuthrespBuilder.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse$AuthenticationResponseBuilder.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest$AuthenticationrequestBuilder.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authoricontrol.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest$RegisterrequestBuilder.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/Applicationconfig.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student$StudentBuilder.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsRepository.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/package-info.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Loginservice.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Role.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.class create mode 100644 myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/package-info.class create mode 100644 myappvs/bin/src/main/resources/application.properties create mode 100644 myappvs/bin/src/main/resources/import.sql create mode 100644 myappvs/bin/src/main/resources/js/script.js create mode 100644 myappvs/bin/src/main/resources/schema.sql create mode 100644 myappvs/bin/src/main/resources/static/courseDescription.html create mode 100644 myappvs/bin/src/main/resources/static/css/courseDescription.css create mode 100644 myappvs/bin/src/main/resources/static/css/instructor.css create mode 100644 myappvs/bin/src/main/resources/static/css/studentAccounts.css create mode 100644 myappvs/bin/src/main/resources/static/css/style.css create mode 100644 myappvs/bin/src/main/resources/static/events.html create mode 100644 myappvs/bin/src/main/resources/static/home.html create mode 100644 myappvs/bin/src/main/resources/static/index.html create mode 100644 myappvs/bin/src/main/resources/static/instructor.html create mode 100644 myappvs/bin/src/main/resources/static/login.html create mode 100644 myappvs/bin/src/main/resources/static/profile.html create mode 100644 myappvs/bin/src/main/resources/static/rentals.html create mode 100644 myappvs/bin/src/main/resources/static/signup.html create mode 100644 myappvs/bin/src/main/resources/static/studentAccounts.html create mode 100644 myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/MyappvsApplicationTests.class create mode 100644 myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/advisor/AdvisorRepositoryTest.class create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNote.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteRepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/package-info.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CourseEnrollmentRequest.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionDto.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionRepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/package-info.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.java delete mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorDto.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorMapper.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/package-info.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Equipment.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/package-info.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authoricontrol.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Applicationconfig.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.java delete mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Login.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Role.java delete mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/User.java delete mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userrepository.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.java create mode 100644 myappvs/src/main/resources/js/script.js create mode 100644 myappvs/src/main/resources/static/courseCatalog.html create mode 100644 myappvs/src/main/resources/static/courseDescription.html create mode 100644 myappvs/src/main/resources/static/css/courseDescription.css create mode 100644 myappvs/src/main/resources/static/css/instructor.css create mode 100644 myappvs/src/main/resources/static/css/studentAccounts.css create mode 100644 myappvs/src/main/resources/static/discussion.html create mode 100644 myappvs/src/main/resources/static/enrollments.html create mode 100644 myappvs/src/main/resources/static/events.html create mode 100644 myappvs/src/main/resources/static/home.html create mode 100644 myappvs/src/main/resources/static/instructor.html create mode 100644 myappvs/src/main/resources/static/profile.html create mode 100644 myappvs/src/main/resources/static/rentals.html create mode 100644 myappvs/src/main/resources/static/studentAccounts.html create mode 100644 myappvs/src/main/resources/static/studentNotes.html create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/profile/ProfileControllerTest.java create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/user/LoginServiceTest.java diff --git a/ReadMe.md b/ReadMe.md index 3710015..5ed4267 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,8 +1,8 @@ # COURSE_MANAGEMENT_SYSTEM The objective of the Project is to develop an Application which is similar to D2L. Major sections of this App would be: -1. Login / Sign-up -2. Course Catalog and Enrolled Section -3. Course Specific Content +1. Login / Sign-up, Events +2. Course Catalog and Enrollment Section +3. Course Detail Page 4. Student Accounts 5. Profile 6. Student Resources @@ -12,29 +12,15 @@ All of these Sections will be Accessible from a HomePage similar to Campus Conne # Project Members -| Member | Area | -|--------------------------------------|-------------------------------------- | -| Patel Jay Rashmitbhai | Login/Sign-up , Profile ,Events | -| Reddy Guntaka Satish Harshavardhan | Advisor | -| Puneeth Talluri |Course Search (Catalog). Enrolled Courses | -| Patel Shivangi | Course Details, Student Accounts | -| Siddiqui Atif | Student resource | +| Member | Area | +|--------------------------------------|-------------------------------------- | +| Patel Jay Rashmitbhai | event, student, user | +| Reddy Guntaka Satish Harshavardhan | advisor, appointment | +| Puneeth Talluri | Course Catalog, Enrollment Section | +| Patel Shivangi | Course Details, Instructor, Student Accounts | +| Siddiqui Atif | Equipment, rental | -# Conflict Resolution -Participate In Zoom Meetings and discord Chat to get a vote on the issue from all team members. - - -# Communication Mechanism -Will meet using Zoom as per milestone requirements. Mandatory meeting the day next to class, Will decide on atleast another 2 meetings before the Milestone Due Date in this meeting. - -# Decision Table - -| # | Area | Decision | Alternative | Rationale | -|---|----------------------|-----------------------|-------------------------|---------------------------------------------------------------------------------------| -| 1 | IDE | Use VS Code | IntelliJ, Eclipse | Language independent editor so that it can be used in non-java course | -| 2 | Dependency Management| Maven | Gradle | All team members are familiar with the build tool | -| 3 | ORM | JPA, Hibernate | - | Need to implement this for Java Object -> Database Rows and vice versa | -| 4 | Database | H2 | MySQL | Sticking to a RDBMS which meets current requirements. Might pivot to NoSql if data asks for that | +We have expanded the scope of the project based on the suggestions by professor. diff --git a/myappvs.zip b/myappvs.zip new file mode 100644 index 0000000000000000000000000000000000000000..ead91687205cc486978a8d542d82573af7640eac GIT binary patch literal 472306 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

    =CQd8jO-ecL1d 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%0AXIO&QA7*D7oW7#Y8)nDdOJZ!fj?%t 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 A?*IS* literal 0 HcmV?d00001 diff --git a/myappvs/bin/.mvn/wrapper/maven-wrapper.properties b/myappvs/bin/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..5f0536e --- /dev/null +++ b/myappvs/bin/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/myappvs/bin/mvnw b/myappvs/bin/mvnw new file mode 100644 index 0000000..66df285 --- /dev/null +++ b/myappvs/bin/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/myappvs/bin/mvnw.cmd b/myappvs/bin/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/myappvs/bin/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/myappvs/bin/pom.xml b/myappvs/bin/pom.xml new file mode 100644 index 0000000..db44942 --- /dev/null +++ b/myappvs/bin/pom.xml @@ -0,0 +1,155 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.4 + + + com.practice + myappvs + 0.0.1-SNAPSHOT + myappvs + Demo project for Spring Boot + + 21 + + + + org.springframework.boot + spring-boot-starter-web + + + org.apache.commons + commons-lang3 + 3.12.0 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.mysql + mysql-connector-j + runtime + + + + + org.springframework.security + spring-security-test + test + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + + net.logstash.logback + logstash-logback-encoder + 7.2 + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + + com.h2database + h2 + runtime + + + + org.postgresql + postgresql + 9.4-1201-jdbc41 + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.security + spring-security-config + + + javax.servlet + servlet-api + 2.4 + provided + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.1.0 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.class new file mode 100644 index 0000000000000000000000000000000000000000..fecd95e3f5fe2073454f2fec2979f5a853893bcf GIT binary patch literal 2253 zcmeHJO-~d-5Ut^BcSi(70l~yH=wb0Nd+`Kl0t6Gxq6Uz}cxq;Qm&TdyvAbsj|GWOOwUJGzp8%KuWG)0{qTv19?|^@4Ft4gP25PiRED4T&&`>}V#j=E}PUHFhp@>~TBP&u#_c)-z z`r=+dL+iRFDpU(-{KR&{7;UO_Ef{XUR7O~xbVZB7dnOa^q*g35dOs1VU1DKv_dqar zoC)RuBJV6Jow1lJr5)QB>^n%rHXW0eN!5}D@g&EXY6~M&3=eIiQ@p>;G1p>IoN#Md zTPDKx^|D^f|7j;J0l(gV#^X02nJr-BQGeQ_9_BH!MlYfa9ON3mNL9K%O2af3&{Vy7Qi)6N%f3>N zHxcKvJlzNTp51^Zn>yynUXShG$02thZ9pr{-)|kuXbZkf1vFiM-7lCbO$YSu60PB{ zkQY$6gQge@98It?R+efcqbRch-Pz8Sld0HLU1=qlTlHP3P#}n!Y4+77IGC_F;A`B9 z7iA-W@oe)PQNnz<%aa`bXL>e2NDvld;wVn?mX8w>0^E4>%)wu-(88IXUD6lO=$5n= zr_ig;(mbJg<0pY=08hg-g0X_Phxi)c9)6_itI6;^jeag{#xZ&u!Zm?$w6vldG>Nww r-K1Oi;t?L4L73`;FjpW9z;=*kFb>ddn#DcD(;V)1aoxi;1jPAoY!}{* literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/Testcontroller.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/Testcontroller.class new file mode 100644 index 0000000000000000000000000000000000000000..f96e86fe9b02256333fd5636aa136311292159ac GIT binary patch literal 1454 zcmb_cO>Yx15FMv!lPsYPX)6H*>h_dgvJ&D%_)w`ps+54#hDscr-D%@?*IsOIM1BoF z0|_L!^P>>sq%;YQluB?|@7jKT^JeyWe*XIU9RQxgZV3tuURo1{sgNo>7XuMSIt>qW zZY*|$5@(pAa>qmKFb&h8$g+VAyJ%gcl`}d?(3GIapf)<22z3^|>z!ld7_2;#O1c*e zmKu8}42lOj#u8K*tWB`5jnSqIw^-rvdu7n-WPmXz37JfUlUni2=w5=UeaeGMw~su= zC=rH0nTRe(9^WN&bH3o_rQls2YqVTx$5Y{=K6gZfpE8m;O+R$BJZ{ zY2&yyXFL+h2k9aIlgs~t99)%qP7v-i7u*dq3@V3dmdHptZu1Ncl~P$}^2lk!$3LdA z$ED@Dit$t`O8=C0=v(B8n?^TzC%4Y;5Q+=s>oq2xq6{iW_%SCpbjTP|%`3pPwj;C| z>A_bz9xh1Z*qMcV0hHl(6_#O@!Dgd9an<;6%e!u^P4eI7X%9_TkdYYF+d2}-i7?X7 zFBglhFD--p_CMZ*7TLZpRO|z7H1@7*Vz70TD<@MtR0C-xN!a(E8JV3F)Y`KZCBo%_ zNOIy^rL9T*T4lJ;;PVY`%`D-9x=)8#0KLgCVzB*px?QsAOv=GAb(;v^NME$|+1@g` ziVUjliT_(A;4}SZtb;%uX)T$?2e7aM)Oe`N0Tk$K8CGa4(d-GWGI|H!p!}g8e1YnZ z5oV1>j{$mWG*-tbxC8ak+B$5|$<0gDU3y<t<8 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.class new file mode 100644 index 0000000000000000000000000000000000000000..410f54cb77a1c36628fd3440368ca03bc8043386 GIT binary patch literal 6856 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 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..34cc0107eda94ac7b565ba1ff84fac9cfee239f9 GIT binary patch literal 1196 zcmb_cO>fgc5S=X{PE2UpKnj$vCA}05_ML=E5P<->MIxb6FG!p9l5DYet=&yT{t^EG z2_(4lqYz`qD2)iJ5FFO>jGo@Soj0@Je|-K50FPkLgAD>Nt>IzHqzX^jjD=jMVP8*; z6^Bf*u}Fn-gSmAg4bwTxvY8E8JhM`p@NqnoR-4x%(^fid<{nfCY!x&KQ{(W}=u~h= zpw{DwRMH&~xUhf!m_VhkW8p!aKy!(HYK%5DxJ1auH_8aBlbMJq>d9onoYabDMvoGa z+K1Gy4<~}gf+x%%C}aFRYNZ`S2kX@brTU;$-=VPWk^`MyuZa2RTu0a3QMwLUFAuwgb2HxfF&OKEXA-NnmretOvJo?efNX za5w)$3J>nBtn0!n0*ymyEqXu1X|h!UxV89R0BoS!7om!=htY#F>wkgTNz4BPjc)~J t3%@xA@N5^E{8ebd6^ySIaT_YIQ~X^kGuPn;#sD2W4Xm*Xx8M%))1RhVZ|?vA literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/advsior/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..8c7157476225ad26846a9ab275b10236c746993b GIT binary patch literal 162 zcmYk0I}XAy5Jbn}6Nw5MZUK7&Dg+&($O#s+L=N#sv5AzcQE&hbg>a~tVyZV!^Zq0FG~Ob literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.class new file mode 100644 index 0000000000000000000000000000000000000000..15466835b7a29841307fae9e606a110b93cc0358 GIT binary patch literal 7860 zcmeHMX>;2|7=D$y_0jYoq%cDZRl;R+*xX0c7DAe~32Fk3o6>S_>}{e}hgq#X%|GFv zFatC2ogc;UtX7sK;zWw=53hFt_b)o=CN(=a!+pT29moCcb9cKy`X`+Z+lXGX)F$&i&QY^Y)IlTZ@aO+ z^^muuK~r|yAY;{_^S8U6v|Ya9_3Xgja`>X>`I1T7_X2|o)=GN;1lA4ials^SZ!)LL z@v0O^)!yF4qqXEaUDw0gg2!BLP%)6*HY72qY;EXAd@Nhbk6R8t;Q6G5nd~_tZ?%otjvPxRYuCmn2>D73qvMSkDb9Y;Rl9ZF9MTH9c0XVO1|AA>B?# z@F2L$ga>Q@aAC=B^CG3HQV72p{uwgG*+m ztooTPrZ&sm;%1DOzR66v+u=_kPuC@(49y*Gx?Jw~Z4;WBun_8ORBPq~;k%{;Na>E5 z_zu;=VGK-gsn4z*1khp)iw{?&{G|COqwo7lsSf*CtDp#S9l0khLYhCazN1bp>OR86 zj%?t_GmJXpsQU;rKDvPi?tVgtImcm3tJ(iy?#eljy6f7Fr>vOt^-ECt5B6F`w;M>) z?{OjQHaC4?+HMEF89@*HZ_w><5gJl$a#O@<^ZVZ!p2KhIK(8jTwnsgFT4RsKKJBnz zN5y`VQK}p(s&zOcP|O9&F<2N5D22`(FU$@yP?1f^K*b?Q1}=yAFrFD9b%o~X^=Yb7 z&7c#PZO@ih4LVm%2Kzc6sBI#&w``BEb=@s4nmRw335DHc!dC6*WkK%P$h20iNu_+q zFE0K&scRyrOC@#{SfS_$AmORj;xw&9?-?|AZ~}t-1Id)KWBr6oF+>dvKa)0b$|)Ii z3XpiS_JWk!BtWXU7o_vASum;XY=jxDR$gF_2RZ{QR9DsVSI~@SI9-h=*#8#Gj&FU@ z)wdb+ON75#_|w&d>_bpm`aUWYeh5m7e}ezqWe&DHr8qhqhC^!TTR3plNfOSg}d? zihaqI+@m`A*gPHJjwcjADf!#Hae& zI0LhSdfb5}w{)2_9~hNZ<(~Hi_o8^AQr5-LeSs?BsFb4`YX&N=zGmPCb=eGHz>2|LW_%4ufM=1Bn%Q*Gc+h!($Yt7`k%gwGG14`O0V z#n6aVX05%4RE02>K8koOTH%3PDAHXtq75q2JyqQAm+Xu5ZNI6eP^9kxjTEg&Kc@cJ z&=bI43Ac2CQms!wbA$*9|Erv!DLRfj`lEFk?@IVB<2s3JicaC(;M*CzJB#a?@Y}OA zyYIK>==l)y0-X)3VTHc%)nr9&v-2(S@%aH$khK$SKS;!ueP9wzIlGi7&XnVmJ{ zkMP8Q;1LNV`p%C+obe@Irwi*!7Ee5QE<2yk`R+4+{`K1*MD#IzSfdJ~gVcuISSa0n zC`O_inz*}bGMmahp~XSWxFPehW8(k@1$wDTw3o%wp#XlG3nNn4{Tqf2AB zNa$hr%cF-fbc|}Lv?CQtMqdT1V(m{LdyK9hWZJ1%-qRzMs-sBmXl_!uB_D&nE=&f-Us&n#UKGgFX=Ai|yDg1eJMHtGlR`wa4XNEW4wLXj7~7blSlmE&oaNQ;cssk2$=jOCL`Y;SXw z@=Oop1ErB!4{(CD$Rd}Q?(n@Vb^ZiWTxg$)6W|QBtzqy+P>jHE*wT_$Gx!X4iiRtYqe64=0$Wk7?P zbh$}&+GKR49n4!=-&v$j&$ql*fS`Vn#YfT}dQwK4feA%4Q)2qD>W&q<=i$ow^*rU# zhFe4FayJNwF1Leezt{T(}2q7M5F4N>emApQkCkNO<1iq06X3=jj6G8g_nO!(7E&rv}E0 z*u4WuhPm-OHNV;1_?0d_!mdJ3Vf6p-C{JT-PNe7xJv09HEL{cmb68jC+A02Z?4QT4 z#vpzJiy1`)>j}jR1r%2cC^-JnqKan&5LEEk47P2-f|)%p;oB+SEo>g=d%1w`#=r9c z2z(x!(W}&khfX{*nfcE8qVHAY~K4D?x^L} literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..a004e988b03634b6c66a308c87e1c83b17b80c79 GIT binary patch literal 1690 zcmb_c-EY%C4EJrLY0Fr*!T1j${99|LmW?zJ3RQ=kPRuIRXdP@Gxakg(s}fLax(rSNDt+ z`%JN}NQH8(fpsDc(*et}z76rMrE>mDxHFOuM5e8D+6)3%Ah4W=OPK10?>Z-fI|Ah` zo=7F#Hi7y2<`IE~T^)-6Dg!5U3N_`9!+gR6zVi()D1FG ztwdT)0zKv;t(y{MC+{v?ENLAq5GnMw+wah#Bei!npiVs(2?!UJQzI39QtkLT+wGzPu)ZN=tSX zb3KD`KK%K8E1K0_Hn%a?2vX6w98w{VAR&x#+l*nQ{1o4fU&VZKz*I{RXTL^_!UKR_=Mb Y_~Q=TMcwBF+`1A_*nkJ{2RY*Nu)qh zZv7hu>~Vi(Knt|*`%y&?ZO2wOVQ~;Wh!^qb!U2yL%!3n}aa0&`yLn85t5itqr}knQvUKWeRX4VK80SvYNVO1U96<$Z)GErT z9i+Tb-%HY1gu+sjrCg&Uq_H{+(ff21YhH^ALo*rir$VA&PjLmuEQ@X4x=r^pW8Df` zQ6`o_W`15hl$!Rx<$2VxnY`tMYVaKylHWaC@pEYFM9p zxpXfO*@da|5zU!RQ*#tZW3-6J-13Kmy~vA^>BYes(1hhC)M16dsuxVtwQIGIy^c%g zr2swqBuh@XK4O@m1XcnSviO*3;pXF)^Y&C=W%#MIax{)(tS{GMjEaYYvEvCWd%<|z zX$4Myw5fMRPcoZnWsgd7{xygymXk0*hV{U`R{_ z`t`jRB`dN?V3x8zgCdUfrBfU4AeU$a{_@K6e5*XD8hlPb{eK9ZU4x|+4!oyF^#axL z9=DEb&>|o&MB>u*hCri>zeOQ`BwQg`&y~1wx(}~mOy}S%{j1PM!Y*>EaMz76K&tQ^ zf$F3lH1~xuSgww+Y8u!C{1L%lGXfR30#~uG;>`6m?5|*7hX%F_IJ<|I1pCG-X#TRY z_%~dCgR=^JfUWz&p?rvKb7Tdpur_?R4j-Y_4IEeC;|Wp)=Od(z0;J_aq)*`11nG7G z5-mVlD@59YPm$%>sis^$D?qqei0}n`nL}_Ij!xqhAZ!*O%)wVfMZTUW{teE*$ESum J-vJ-KeFu}|a^U~~ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/appointment/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..12e33b6cf17e929ab20ffecc918f4c629b5d0b7b GIT binary patch literal 166 zcmYk0Jr2S!6oZ}e6Nw2HZUOHEosf_i5JOM!h#pl+lT=Np)T=RY01kynnegDnpDn*X z&li9aTBA@n#omx(>#5;^$plA-@aUtQ*>f#Ue5%Hn#E~1h>xM|#gY{`jsAF@_)Xw@_ r(3mT%e=9Bfnl9HyOj1}?dC$nvwxY24Z|o;{3n;;xzAR;ja literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.class new file mode 100644 index 0000000000000000000000000000000000000000..322a9e38d745f49518134ffaa3d880a8c609faca GIT binary patch literal 8189 zcmeHMTXWM!6h1N`z9c{jq4$EI(AvG&z0ez`m(+w{s)QDYQ2M4=8(T!u8fopRe^#G5 z)6TT-{Q>87F3qNZ`DQ&;GfJAFr(HfuTq(=&H1w&plo=)&ZVr_h4dG$2&a z8r87=>V_a7Tg8)k_HH_Oz_s;-(WRwd%4x<}#u2q|$``>|tNGP&r#pXcbtfUim?x)nxO4xvpu*9$!r~xB9)F%RKL%?m8HZhu6mk z(gqkvgBvVQ=M_2?k9pm7xm%zMN@3@&gAchiV1|m>?U|NuX|?BanBMlTs->d*PHpRQ z8q{5;M)HEIx+;b}c7!6^U8dShbh)8+m}vOUCTFZ%QTJSKs{-$(N^0nN&=wQnsnAuv zvQ5u}fdY|W=Kp2o;ZujvJ$A)R`lp#qy5wQH9+~Z^Fppq*(}psKiAjS!g3)AHuL;cr z4<;0@!1u=2j@|c!%EOSOa#uC&9)bdbJ{G>$?=jb3YQcIe6%(M*+MI(GpKLf?-RsJb z_mqZX9A?GHoh{uwv#!Amws|I!zGbC)>kQMI!OrvUGJ%Kfd0p~|azGpou^R>-X4*}z zgWXLg1SL90uP@Ujx(tGI&2&uh#Q}m71f6UV1j;!IKnfizSHSNIqW}vg zSFR*U+lY8xEeG89(RV2=@y1_oR(1+>MJfF`SuLN#C0r$n&9erdG|c7Z!45=4EpsN8TJ(wOcCICTtbWt@p^Hj;JZC$jxK1F3e z_K+JTVd3vpnS)hjhylVAb`tD7*t)qZB*#x#xnm*^^nKk;UEt5e4x~V12C=xk%lD^Q zcY@S9@?J4a0g&0t6J%O(h?s&E#Na7HlDte2X@VA-ZBqoC5Iz>=$!f5xfHaw&+II}L zhfr@+)lJDP;pzTo)=)K_0pDk;4*PbQn?xuT=cZ+>)#PM0Q-_&^)+}qy?RbrZK_+*d zfkZrAV{h@fE1Y3WM<$YaX=L#FOdc>lp$#U4TpIt4bC~(eSS!nzeEK(K+)bQbO*Bk! z3O7Y){QNMRFpec9YkaKmASAJ+;=Eic(@-+`U37r?SnXwgUn<5&n^OccFRv_P@Ch{1 zgQbYD%5&lZIJC56y+EHS%1;@n?|fYK$WSuda9;kD$yG85WeHIVorvZ$JQR=Wl9l5q zJ*vYL3Z2A+$2LLMwi3N>jLy-QywO>(bdh41Ps#M?YlZ&$|M^IkxCui?RtXIq)k8x^ zb>GmZ%1JxR#C#$3k`qB2!b zdkdvN3c8ax3-mUyl@z>pGU6#zrP^b(lR5<2Wknm;PNDbc{ilX~i9Se-d@<7X!<3OL zDV9`lI`vTkAs%gZgpcWyRD@4cbXZN*;VLW?&tI%Vn#I!*>N6u;!|&eNboc^3G#kQ~ z^i={OUKeXAmOPtk$p&3cMM$$`I>Pmt5!UI(j5=)4&6yC6Q4=d6N4NZVa}L*UP}fj4 ZQMOQSqkN0<9m@A8B}9=sw2gJT^AAaPqsjmP literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRespository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRespository.class new file mode 100644 index 0000000000000000000000000000000000000000..e1265f031325926344ecbe03c2218d1a0e02048e GIT binary patch literal 404 zcmb_YOHRWu5Pj2zrY$XWgSZ7gK!8mp1Sl1v;R1tY8CQuNY`0Rb#)1QID1=kN0@!w> znUQARd-M7De0v9Qh0`1Z!ej7KG;FNc@Q#Iajaa&^4{F7hwQ7`&RTrXaMALEG?m~j} z?IlO9ofhADtwQU9iOzR9GQwi7RvGdZ6g~<`d?8aP6KH3kMTB1LUhLj41ZYDDU{IiK(satdjl8i%q+PRGdGK@e zVLH>!wEz1ueS=QFl@wbBB^F6YVakskNxMhi?w)h@oNv!x|NQm`5nZA0OEhIsD^zYX zV4i3`V13qfWzbxfkqY@L6Rg7nF7(*HLx`B+Wu}=gJIxiLr0*NC5=~ol zGDh*4=rr$bKH#plXv%9_H0wB0bQUc-`$HtO7x0$od!e`K^CcmqX4;b?v}oFCwINh? zmZcvB0exstr@m@`n-g zvFFn@=W(Si*6&+1pY85*rM!3p=Q7=EQLm?X82-eR@I)sB>`dQi1?pOsZC;``EIKhl zUr|b`GM%?({{B(mN9p%@+lI}1o*$dQ?kNeI1mPvSS~36GE;IJAH@Q8O*V1OT9`yK2 zk!P!y^)9yquDcR8Vq(SkOD#E7b$d(6z}65jhOkGc5N3i4hc=94MguPl;Tefk@^2xl zWv1?M-D=nNH={Z9FTi|hsMzNw)4%tz&!d~Sz*)|iyvxF_i62mi+bSl>X#a6G~9M!_am>kR3@qEn7^nZLo5XTHHQly%QPo7zo0SKU;LHR&SwWNBhXKwR$$8#x}t+?$;8+ zGGq}4-Q-T0V=u z?k(7D$wS*Pf`Dna8|N7Qs0X5#g#}4!7*5$RVFw6LIZ3r*R*R@2l{V}o$F;{q9cz!*sCTl;xNR&`2*V%eYwqThSSpJDvMC99NIFMe1A!G!sX2J zj)JlmSbqV^QOptr<|+nslWT1ZaRgVI0&9N$^s`n(KdtyOvd5h;xj9eJ^7tjbm@rBN zh79Z~+)wFAq0^OC1a<{86t-F!)(R%bjj9L}1dBQ9f3r9g4`QAHegslvJb1B8Us%?) z0$inlGZzqfAx}+_sA5qSs!ffLA{6wSet>J5p_Cq4bQ?p5R%4n8&D|XZu$0Xj@_F^8 zK_{Kj0$~tVgKmcgovRJ)X)aJ^Y-rItwZk%K484Z(tIKbA=2~`QbajfUwyCq4yC9sZ z>?Di|uk+56Bq5eaJU4z#LjPik?wBGhj(&+&QBF-aSfYDlrQPJNi1O)bQeHA)Iiw4O z`xQ#d$7qUXXck{3e7%D2GM*K*IkYMCoXCuwMBl4ur{b}BI=#!-arB>|*MMeF4f^YN zo<;jCo{^~fJDvOa)SJJO{b!8zRw`$(-^TkK{(%&|L+|2QLo1UtPchCk)q#!jGT{`Q%Ib6Z_4YZqRx6oQ>-=S4$nr@Q=ue$p$XNC52 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..672dea779ee78a26597260f6a552e03f5cb714b1 GIT binary patch literal 411 zcmb_YK~4iP44kw}w=FGj;lL-z0~WYcAV6Cov3$TpQAoAxtdg|SevJbU;8BRAmkPuY zOSUC@W~}k&*ZT*6Yn+xC2{geg*^y4rfq9dtO5fR53targyv!tlSz`@T z-1>xz^>3l7e(dRR?W+Da3sqe^Hq}ifaQ?u`aj?lc$9tXLrdH?_b literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..5eac671b6f1ff899811c205affaed3ba11ec017a GIT binary patch literal 168 zcmYk0Jr2S!6oZ}eQ;7){ZUOHEOqEy=V(1AT(W7d~Pt}A!{w__MUSm^+hY|(6OY!nQmY6QQx{N3seW_V3}In+X1hC^)BF^F zgr7Y}&(ZJxD38zVh9r=bOpWz}rypjMxpU{4mwV^AcjnK(e*K+@KBw>VG-gpPj@(MX zJW)AjO;&MbP+5~n6!R@6Sc3;#sJ&LKcu)yiEDW15RCMz?kKM=%l_y2JLysg+Ig4gf zK%a?5W#{0SyUL==eSNESizXaLipGjXS9cSkynt6l(~G?WpRWob71LwH7Ui639ZIv# zCKo(nir4p z@SII~ZFy&M`bwEuz*v8f= za4wQEuxQTd?#!Nwymajak@!Btnz7J27NfUi9lrp{={?c)8h$lsz_~)NsyLKbMgXnI zV?MTMp}|#Vy&hxeX%!ZiPB-~l@90SwMm&xmu}A-c$^_ChI&;Z&@_co$W>x z$*4e!*7(m41v*N<$?G&_3XHM_);s*{T)tQc)Xz zh>8J9+oq!f=?xzprRxEsV`cvF|HIL)JY-b{zF}r~V|y5Fwt< zI`Tj{`_A(SARwaa=Yv5FjBzF)Om^5#Q`{sd?v&gM^pQn3E~Y3j6xIreu6t;hX~1+P zm`5HeyD4waqp8bAX?iu!Nuh)0-TTE<#zlo_r>6wc3tw=)-;V+;vU%w(ELe= zklhOnJC}8$P}X|@lz%W#sikSzLfF}q23 zlFi<9u|Ge|F7esbeL$;@ah3FqBpZE2XW*qhJh8a^zNcRU7WyvqX#$4C(#gU;QqTh4 zMD#5He=j?IVHVPPr=NXv>guE%vyvwVmG*JS(>AXE+RSzCcKO- literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.class new file mode 100644 index 0000000000000000000000000000000000000000..91ca9c3368fb35dac3682bfb727079666677223e GIT binary patch literal 2793 zcmeHJTW=FN6h022(+r`7LfNjCi?<7G3MhHmCjv;T(uGPBK%|SbF9>IHHZjcDv$iK9 zzlNW&5=ijQk3xGqO*cuKD&^8Q9x`_9b3UK*os0eP)7$p|a2IX`P-5`hnz)e)sTwcE zKr~{VHa2x`EVhIaJxo!#_Ru;^8|hGF*}#&B-@cDFHZpTktC7OQ%BEJ%=p;cCK$*dr z0y+_@*Ld7{iLqm_b^xV~W*}o^@HqN5MvMTP3>NN4CEYy+FKW?oxVv}K#xn-xP2I%+ zPBB;>d%b0hHj8kYl~?~%2CYs8*yZGACKKT)&Dgz^Ok?OH9uMl~P){WD2#zEX^F1Qℜ4K5&IvGUQSX^eg0oDDF=q zgq7VSnW)B5dd~6j0UpsmVlE?#aZ5SrhI3G#2-klmj1-jJb3`LOm)b9MZLY->;hell zaqD%AMNgY!>k$wiI+wMbaJfAcYcL`v3?YQ&Dg9-Wv>%`FTUxVnn74t`JCcoaAkjRcc|-6#WieG zqR04$^mWG%Wc|1Lm_jP zz6&JdHCO0cE#@JdgY(7ODqMgv{6O;(tieSZ14bg3XmSwt@(kGXGhlh4%`VX3fliS1 Y9)BHvq|saR3ynAFw@7=};8)oA575VvGdZ6g~uYty>3L5}@=pRqRb7khDgUGv%53 z0G(-P+W&opz6;auXk|;X4U#Jv`hy?#O1nqjp39!yqfdW7`29~Jx=25jX-cD8p4+P1 zhUwJr7zakZCGGmU?7E)VG#q13*uwF*?t8wl>-K%4(>d@U!owTFYq@5}H>DFk5bN3S zWtmDE9SJZk!`Z7}+qolJzDCD}9&fZYnr=3wv$v{IMGbS`Omp4v4NG$Oyyj+QBv;us+<4R0ud*}7p z8GcT089ceZBlNz!FLgur?{~ygk*9w7pDu>&eWBaJ-F(S!$Tt`)qI}W||{MewQz!wnW2rN@Z zCXJlLwve2mz|B4hTzrmXSfHa+NR*Db7b6$RgXy~2t5|cR_m=wDrWTrLW6vI~@h6%v zzEu808079F$`-rp`MNw1u4}f1E?wQUJ1FDvo`q7~>vn`2lsu{;%9OQZdu$SkJ-!l! zuiIq)J(0Y~;Drn#Nka-OX=1?phPTh}odqvf-qBNDM5BC75e(~-6sZjUZc zbHMI+4`Fv^s*2p<2+j3{0@kV8H#!I(1|#iRV6hrEhh@r;Q3mmq(i{^6iucBq>gWwL z=iUX#CUxhINcU-RuNzQQiIt@ow$<8q@LtS!*TSO)KB<5qy3CK_vX}oF9jewE=;)na z8vPu4pl@y5su*$@6=jXme#Gcd6l*st^rbfa&!d-2Kx@VJD@3pOqHYxaxL|%eM(Zy4 zc>OFW;1!h#gADyj$k4B}1{wOZdRq!lXLi^&{MLTJn2BFHVC3V_IAB)zQ@{%6EKvT# zL`rLvw9@sNt$v8ABM#bvp0uRBBk!i+7bz7u%e!Z#%^ApbeRH%RkB&fKdb7viuUXcb zyXURr+d}v)B;|n&m{;X^kQqv;Y-L-tZ>1QawuTfTPM8!C-Um`dGEJ35C^%Gckk4)* z6Iv=Fq5bR=k>4f~GUZR(Ar_rnQ8vch7s+kd9r#EsUyh(56L|CDEPK3AVoty~o=C_<*R?TX z&(ucly36!c3?b4eE5adaV%90z3}U+gORwVo8h&5n_alBsaH@PmTXchN(QS->|1TOU BMa}>K literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..b371966ae3b7d36fa4547f8d55b435d7029a717a GIT binary patch literal 4781 zcmeI0&2AGh5P-*NXnqK^6j~@0Fg>Llk_#sSTv{qcNn0oBbJoGoGCp&-%x&FW&&*G0+@j2)xnCsd`NK)kAi~ zs*d!kyKz{;uYQ>CQJ!$p$&`O;ThOZSL(C|VZ? zmszDWP_pfEPd}u^LaWbdhdVA)C=@W~9a>JeQMwX6m&#}^m8rRG(~jht`qEI38K+MT zqWSv(4If9N(<;_!6>Bk4&Y>u@T6lp}#!l=Xrc#Ib)|xh_f80&dPa0YvK1o z`G)j+q1z|*%mKd340GiazkcHEIp{crO-|#5lwNB892kYZnndq0!&9RzWD?vGUV5;F zOoE%78=Oep@5H$z9-Qa1x1o#M%=-3;{k3*HQH>Y6u$AMKMfl)Yqp0-MpL1cwv& zw3upwrDPG+5lzP0a+56O6V#SDboFryOS+amjy#uqk5iB~+2h#JQJpN)u@7-+-AhM^^g?0G`0ZEUXZCXAQ5#Osd*|jaZHAxVEQ< z#)^HWSWm=4xz^Y^5!d1|OOlaAi2wauSZ-wEq*l`n3!X!fXe*sI<1AzdY^2l?Q@z?j zXCSyEkZbTrD(Q9!tX6i82xRtjS7aeipg2drFh-jkTqY}@-zp=ljz*$OQDY(_=8vX{ z(Va-d_Aw3e?Y^L0!6Rl6lra7g_0uw_DAEfF&8&68J*?m9zKzJqelIlC*EPy(J zd`tEeb3=oCgHwP;coA(}-^GK27WO+AFQt!!PE;;!^|T8Jd|AlKq}%J^iF>^ut&^O2 z#oLEN~4^8Us{W|-^LoYYXoql;eZ8L!K%3gYiMWDdNlP0-ywHg3cf<&XNuXt xr^f)UtEtD2%o1Ef`+90`BFl~RYisJc3AfPpyKduq8y7$sR{$Bf1NVT!>K~Z|<$wSH literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.class new file mode 100644 index 0000000000000000000000000000000000000000..b2ac8ea9578c4ca3aa83a20d4656fdf87d7addf0 GIT binary patch literal 855 zcmcIiO>Yx15FMA0k0p>2T0Ra)R!=F1-4hp5xHRRog+oFm#L00+TbK2RY&Rmm3<)H- z^P>>s?Uq)eT#z`}-Wk80dGq{!{QU9_0A9kA9&9oA5WFn3P^LH&Yf(t6i$ip+lnJ;NZqa#2~+{%|cbN557Qd(dI9-PEmxsfxGDGnA1*|3KEt zsQ8M(t;zlggU+E{5qiL2bcH_h-ugb=VeI)k<1yHJjVn$BovKCZ%bmB&8g+QVv%%sN z`3hw%Jb|2$ABjBQBXoZAIC(ox{>M0bd}T3kV3;b?j5LdO z${?GQE(3BK86RMagt-k}ihC42 qYqQx`=)WIlpJDjD!EDo>FhJ{mlSytK!-M8~r`dPmF`XSkJp2V!;s~n% literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..501da6ed7b8cd8a7ed749e3eed67815b1678fb5a GIT binary patch literal 2409 zcmds3O>Yx15FMwXo1}r1((+Z>y5%e7kX+zG0I6z0RN8{nlu8_(T{m&NYp-l?AioR= zB)IdV5aTpyQZ}?z4;(mnv$kj6jNiN+=jX4l-vQtyJn};#0n+rB2J=#*VuBC>#hj+Hg0;5CotO& z5HZ=Vzi%D#z!F%@VD0im8DW*~5m@q%Ga17iZ8r!^zYtQ`R|IJFOw09sjI^6dD`LJa zyTXW8#5bf=mbvr|ff;`zwd#}5JVf05rV6k+pe)@yd+^DF_LyB}I zBI?7?L@UIN&2w5R?sYf~c@Qx~qzMa-kV?9S*0ssx)&}I(GKAC|xob33+)&Jz#>@sC zY7w7*PLRZLd@N29u=~yjyPq=Z|5|^gkxVg{|sRl_I%&vT8ogMbMQ=nEi6}7CgVl)m7FA# zagz+{IglCq3m-G%xr05=@t;+C3CeK23?9r8Sg87=PSLbl$aceZor;gueV4{9uJ;%= z2Lf}x3Rtwyv~csmV%~NHcA*3RU-V*Za4UZ{!#(_*PBp|zo7*85mWhbKa@BX0YOH5l zE!G%8=f@}*s-;nYdxSi@K*Jn*Okny7W;*EfJXpg@WuTBn4<6txnb{eAIUYPBa64l#i0DBTFHWZr z0_7cH41NMmRR&gpz!d)BAdrJAFpY0HeD|P$t3{kmk_PM4?c{UXx|xsO5o4drL?E=%ZZNaU)h-s>hhbk{vmOA!cNXPZD)+LNeY_V13W* u&bXT|F;`gswmNnVRo7N@QdrfwrsZrpQP})9_7l7X6lVF?B!xxx0?RL_xifMA literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Event.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Event.class new file mode 100644 index 0000000000000000000000000000000000000000..f8173254bf674b14678e45841ac7aa66a184b329 GIT binary patch literal 7206 zcmeHLTW=dh6h50e@uf*yB`J`$&}q2YTx{-_CM|>{NS2&LA|VK#nCwpMZFYCe?Ajvy zF(i=Sg(rR#;+x&rUMFrc#+y_i9@gubJ@d`Xxy+gG{Q1`}zY)GOvP5qmvoJF_dfgTTI9MNi+a#?L-)WFYe66*9=S3IEy^|O4uo4-cnT6A-;hfSrVD$sM*+#g>D7%082a2OQUcD;B5tgR$=o9o@N1Ht<8kz|}j$8GVy$bUpHdo96y5w)bl;Cwr2&n#Eip^`p}Afj!~;;4Z$ z910aOxPt!RyI~0bO9YZY$;vmL)zXIN)d4)dCi=0Tl`;$>a(LZ!XZ%%!8ov5RE9y0JrkGedo}c-YeSh%4~7VYOZIxs^oG1$UeN>3xBmfrX6b z%L>P6G9w{_6=fr0s%oQE|7(Q|ba|ywl9~)GVDpC#_sR)98v9O|3@a5)4Q(oCWNQPx z8sS{A5HisP^s7V*^ujDH(H)CsR^7mj9$R#~oF<3~X|3#o1~%M4Yh?)zE^4`;v5y;*kZSPI`=?p*9>~KGQ_h2G=xhrv45r(+_)39Zw&=n6{1o)m zqFDg+@0=jToYB`wkC)nUS`^LQuo-YBQ0)jFERr!*p(Lw6P+YKb1=jL z@%5F;ccAboQ|z4F&Y+t@FP!kVmtrltR<6|1(Yxct9s33P$eRBCd}YLBJr%5{^^n!o zsIQr<05iU8O>$`%R$nG}C`Z^HSE#SFxqXB>6kA52r8>GYRXwRpRfVoeEi*@okm>&>_#p7amo(M3R6O2u2& zRk)Fp8l3ob5G2=jql6uy1{Q>o>evyuQxd>%ayMk1z!8TyIGrln(i{s`h=+N{%niEo zNH7jFwS-C|l#1JOO*O;y6zIftwEh7(V#m4;(<{lXdER()Z%DfnGsW|lSVy7o+*+Vf zdNkdI5m;tI7VVG7nyKWFI>(bqS4?_zN-6E46m5$yU7c}D@evxwD>8ONXLzK8g~l0o zLGNPYtR>N1YV_=-8@BX3oC+vC=jn44nEUF@(-%W!?PS%+a9c^KPG{qg9uTq&D(TZS zg=Yq>JX-o)zFySiFj}2+PI@uRLW9<_ND&jPTmT2(QzflqRR3n?#f5yC_p- zLWDOaUc;LcBfK>+!rN4ZFZMjS22J+7YkaNV$LIoCi$oeHNACc8;P2z(S@bTw_mtHQ zqQ}(c!>hCCeR$#MollOvga{w(e1P}ih&Z)IM*0$coI=niO5)+B2-oNnjG3ZOW82Qd X8V}K4!Ly3z5uSBC1!&+iJZpag$x2px literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.class new file mode 100644 index 0000000000000000000000000000000000000000..3562641ed3ca1ed9fcc341643b5f7ddeacf68bb0 GIT binary patch literal 5880 zcmeHLTXWk)6h7;u^(9Hurfo_o&}|6RE?~n@ZgmLFwdssfGI5%L$Bnc}w&=!cW$G7x z5C4D}n1SJyAH{H1vSqnZMhZ@c;qqWht9(A^>^a{#`m(?O@zXB=@HspxLy5pB$PrlFHswSMtEKyWFCf z3}4uhRq9I*-8jJmTC46Ib82zZX6S(W%=`uuMHdj=%uZdipSot0j0I|WJfIjab(k`b zsX}x7xsUluo5L(MbzPb|%4T8Xadg7*J*lWCkEqFXYUlx{gMIzWAyK|GIr6q10YfG1 zOyDjLQvA+Ms8_MEo{(h;XxVo(4a5d|Q}8(IE7>M3%XMlA($1LF2Zm zH>e0`=vw?xxX6h^{0rW*&{k=5lWvEB(tkk|Wv(VsY&d1IR!w>#XAh5f!T1e2dHFa)c{@txcf|QuOpoY(&W^a!^une(l%5k!+hLY)C?0YdXjIU)#j zxDg;>=12+9T$JA@%=rs8<8+J|JabKROI53`bDJxCg%=q|x#rS6bKaFt)yaxtJ`=lh zL$6iObE>6+#gS{R*ml;W);t;#ENa6VOv9CFsKOk9>vdzOJ7PMtwJw=8aEd<(odYiS z^w=aY7ZGqUM*9yZ)v-W{vo)5A8tOLGN3#P)2dh2ZCbGPGH7Jy{oZ~Q${l1aW!M4-n&?( zIw4;bs8Y&gPMH#CIk;39ImmzP>mPF;`dSM0sd11od&aAF1FM-94p?CR(w!{bi>Jj< z+#rvdq;#_gkNy`#IPd>!f(RQSmKXg-Sj^yP29@s?fW>5-HAW;C^6@?)?-t35oJu{B9$Wp}u{A~oJ|pl$fwG*ZC`e`Q zY_gF+t%GNACf^iV4_=EhGt_R;$q=5p=@Fbds=yJfAEgf@+GY3xPrkH(DZ>g%xkTQT zVU570QDT*0W8^F^rU%w%JO1xT>yH5L0G_DfK_Y96N5{Ro$T#Z?Ke_L17kHN2mWQE(mRaYf(;yaJPOGs3@B=`TQBgVH!<{fH^bX&r+Ax( z3GEGy=?mJ!y=pfE8gMV!;5(7qE2aJhPdeAxj<@<=hV#W!oZpC@<5uUf1Ud%1=sgi= z!TX8#5AxFcVTRB4DLzNi`w@Jcc=;qr^DT^EkkuhIKFx5laf*`)5X_^tGXW3qy9DjT S`Vy`;@l!+3%kU6ZVf{}SJ3q?+ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.class new file mode 100644 index 0000000000000000000000000000000000000000..f1950abccc83a6cecee31cd4834aed9d6142e378 GIT binary patch literal 1256 zcmbu9-*3|}5XaA5S=!L8qoe%(VaiL#L-J0`gcw60r6AEVX^(DdT5pLR*=|MtG9-}T zoj(e3PRrJ9MNHa5tla7A^XJZY{`LFY4*+-pPdz9RcxiMTrcB82h|O3St2EqGQ*C&U zNjBywm$si9%hNE;S(eRA$YR`g@h{p-j zD9TuTjD)m>>R>ff1drFSgN4!BJtkU@k4Yi6gYV(Zy z)xOn2u0mTDMZ#e27ZN-pQ87ziGrJ0YN#{caHfpd5bpq?%MISZW(P`(*fjX|U>XDHA z{WKkNJz&@@1R9Y$=74G8?1j_+Ead1_?hYrg-Hr;4vpPGGBkvHX_QhB-JJqP@UsQCX zt4vF07f2yawxN zduTmdc>V8CIc)e}q4u-TY~kuOfZvV6a%u$xeZTgBh)h35|3MH`@nUk%T= L2M^#8P+0o|xq*X~ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.class new file mode 100644 index 0000000000000000000000000000000000000000..eba8e7247a60e0ea276e1d232719d1a4c1ad1874 GIT binary patch literal 1369 zcmb_cOK%e~5FVG1$2O2QrM$|+1P%#@?45*4B@}_Q1&M@89G#7|b=kF7wiA&He+vmD zxbs{14T!NfZIOsns&H8E&iLE$=b3Nj$FDEn0N^P+s=yk7fzff8F(JcaHe+F|vT&fL z+VBG=S;8|e?Qm`^&%$iZ@_c4OK0{x)?^eV0OvJnbB?24%|CGrjd^0}gu_aLL$ElFQ z?h?4v?i>;*4b%kDH3E$@^uE?gS7DuypYNpRMx`@8p-3bbDYHUJnrk&qd1ju_pf)<< zbi(75X$0jg{(vND3(?)>w7U!1T~E73CyE;?m8BW8@e#Ecj(^ON?w{c>Cta75u4CE# z=imi9k>yHTs&qnQCf!kEPEYQ2QHUpCMaIvI<$+Tx(xt#*QK%(*)GErTo##BLMZ(zg zAS!0*b7q(Exmc(Gs&J(aSD`_m++WCKyB(bgV`#OINzVzV5edm(PqQ)CBZgWa(2N|D zL#BnZ7tTh)Z6VBOb4QZERy*=QXZ1RfyJ3$&Z734S>{KIS_&1^-t`Z>Q2} z`IVdrBd~0Hu04E@8!Sq+P-(9M6laC2RRvmZ<3x0Lkpp22s$ztKHDv-gS#X#Elu%8V zp^SC~t;Y**@D-}>o55$Oe@E{cY~boJfX}A)xXIOoEwrzBdmHWRa03GpxCysT{kJjV Wjz`>qyZCld?&15P|6YUp@ZdM)X{Qtb literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/event/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..88fcf4e48eb45a1a1501079288fa47b6840546d4 GIT binary patch literal 160 zcmYjLI}U7Wz&=MPg?xIKgxCBp|zNSR~uRZq0vDz;!-t_ zc%L_eIBK@yR2#9w74L~iD7!Z>Rz%Hcz>}nJno=37)4;~M**+PTsOZtf3?k&J*L>PJ z5`pz-Wh~w9dgMLv==!r%Ss978>PsU#q1aX`w%p2C8IOv7yL;E8vfqlsG*TEYr%FCg zg-5GntX&>qVcj1exM#IgJ&0c!OWhYH&@yqz&?FMVLgcZ#9Z>y!=m7bvWBC^ENae>t zri({wJz?7?H+1S>sMT?St;u84B+*Nwz)M1Z=wL+h+c9k~h`U-8)Tkz9+Qc3$A{JJ*jc0+HkAHcbMsl;v? zb%fsM@Ek`AxNvyDwRH2*V$mK-xcy^)F?@%g-*}P7`*6r9E?=4=(2%p2YxUWCl<9qs zZk|pE@WG>NQ;1Xic5L05qIelcjYz&ZweJOhs~O70&D))hg>HF%rw z;21%Y-2#Cd^TTFi6gC^b8Y7ZlK)>UjH6C`JckZbsx49~v!;0-&OP%1GLs$5`NbweZjKPwj*?IY z(lV1Kj_pWoqnycxnXy)9(y&x@#m}H`x50K&W1SOZ+rj~psvjQ<#^EK0(+JhdZoI8~ zrZoY2dXC7UaIP4bOK4Gn^1n4%^H4E%#xM~}<#i`}Pu*y0^D3={_ z2`$K29(`YXGMh%`tYqK-b=Ks=N#XReJ4y)53k3Un9@km<_)qbzG<_=Z12 zKCE8$XI~G?B|m#3jEV{cYl*(b$Z1rfJ5$y2&~~U%ccd{WBV8snbdykVqEug^0@^ZW zCCsXrmGP~h73eiu$-b|TzN@sB%`ay2682o8b@W%TdK+jSzSTcy z9Xin}-9W!Glp+QV2;+C?UG%dE@8w4L;M@o`s-IJb56`W`7JW2VhmYsj0p-ygOKwqP r0wH_N>@D&lT%aaU3-oE`2^;W=&oKWS?F+QqXkVh;MO%i{SM<%ld!;A0 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.class new file mode 100644 index 0000000000000000000000000000000000000000..6003d2fbc859edf20203d3bea9ca6c57c3e1757f GIT binary patch literal 2511 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 M*pI*+^sd0&ABa@%hX4Qo literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..e9dd65d7a2a77c4fb95bbeff3625e373967ca152 GIT binary patch literal 1310 zcmb_cOK%e~5FV!?kEJCg5THCwxwIU1@1*oV1)^w65ebzladEsRb=kES+o{MeLjnoz z{3yhDld!1>s*rN<$}{_U=9}lwUthliz*BfwhYEo=*6=7}Qbniij73~$(ViX|D-M`q zLy-yPdSmNE7G-0W=VvyO$~rURPMc`|&-JaywUwwF*P%*ay)c$CHH;1ir-C~IjUAp! zCEYH8m96a~0@Xd8h&nV0v`X}IW3*|&Wm0+cP8nf!dL|Nzta6z$C$*xv(SuZE_6ZG| z{S!eG!Bb`slr#Pj8PiQfhl^tfr!j`XL=%BmENN#N65?32ms#^}=_$SJUN{jzLM=#@HdJcbN*tZdkhtBoSGG4I|AYU6 z1QOi&QHb$2?G`BlA?2|4*gO7a=9|y{`RnU<0C)ww0W}6aYmz7vQbp%tBBDfR(Y`K> z#hy@Ngc&N=pIV1mlubpRPi!QWb*4z1Hqqg=*+(;x2{xe4V68+-g&IXigL6zAgU#yD zG3MGzIz44@94{t%h1q4W{8B3EUNboDEFOOEj6r>052@1I4BAztZ;jDr1y&jRe5wpu zolbDbiOyW6!bz=oZuB6<%)a13^JI*Ch)F68Iprd`AgcK;d581K4`<|u6_2}osL^tz z9nXYI#@rDme#(jOo0vp!=-V6mRKx#^aG9sfa%~*fX2cVre7phjs|thWtn+jJai_W9 zZkl7zJk0V`Cem?RVixEmvM)r~qpCuGW?--&&B-Mt0HJ8-(Y0{0ml{9UJBrvK)ZLC~k? zBEfgk6SiIDKdYN3JRqDJJcJ#ZeWXV;Kc%lu_T%4WxwAw7 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..40fec463b424b742a5f0b678c54c588f5890102f GIT binary patch literal 165 zcmYk0I}XAy5Jbn}6Nw5MZUK7&DkMaMC~|_uS|W$oj%+7Vu13KDI26L6Vv4EWJk9&_ zd;vJ1EKw+&W6)&TIBIxc(%#b1_aVxK9oJ&TrD}{xEZLE}Zir-DOrh7w2kKZqGPE=9 s?n}%S);~$huBPj)5uFrPRn}=anN}1w|BL+uZvll_J~TyPk-Nb13+M7Mvj6}9 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.class new file mode 100644 index 0000000000000000000000000000000000000000..5dee596033ebbbca82c76e38cb20c3f562b28d1c GIT binary patch literal 6334 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 Qqu3~}AK-5uty^&K2djT`8UO$Q literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..ab976f54de968eb14e1cdf43d4022ab9139e3a52 GIT binary patch literal 396 zcmb_YT}lH%4F1xt-L|&si{L4o1FZTYipmzj^#XAi)+swb&P)q?H6J{HhZ1M|A{8GE zB!MK~_a*uKdj9}$iQ^I@LLGw?hP4%I-m;L+h-0?qxn4Z1gMiFv} zyC`nnHrfyUC*@t#$%Vc|K{(kFb!=Pl__9_q5#~*%l)RPq)O9Pz*T2Vx?o$ kwteosiW351oPRr5frA`Jn4sL{DP}_%N7<)&YK{fQ-=_L_jQ{`u literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.class new file mode 100644 index 0000000000000000000000000000000000000000..0ccf8ae7b74ede8e070992a3886554f6c274bea6 GIT binary patch literal 1760 zcmcgt&2AGh5FV$YNw$HMl=4@8+;T}T*$XF9DpggHDz-&xN+piYuA8{*+KcTC@n)MuB2uYZaahmVp8fpIH#6R!zrTJ5fS2&B0wn_bMu&dFg!IqYkoloX z{9To4!w;BbeV%Y>yCY+H;wK}PrbFXvTw<~D_daAI&G)$;ijY^JOkg=jiJ9#CZ+d4u zv;IYBpIt12^GHFG^_vKI+(Tn+xl*%$Ilr#jEf}PB&k3#bZ zeHXWc6n2}yLTmGcKzUb1NdG2*#+3e^)=F2QK}x^gO3jUmhdiRFPb%UZm8M$ZF^PFW zz1s1B(};&L!vko_!uO~h-9Yd5d^OvJn(ac(4H_wKC^DuAv*CbR1mvGmRB#p$HEX+M zwH?p)CE&*lMUpCQsnUHKGA9r1ae5xxWnFR#nHBLxSl91(g#fzaVx7a8T16SPqm+BK z{UnV=C@eKu$~9(P8mqGqOP7wzy0uA#p_z>MsgRhVQ{2IKmc@3~yG;)=W8DsVQ6^nV z$G|g?UTspF7tjg>g8iMjS>~<~6K)3zISCo<#PK|;uDV>LbkfArUh+Js!|giMph;l0 z6--;AYqgO5j%%4lfB_w5NssGehFw6Q8K{uOCrk@BFBZ#oAh7#hUqiDOiNo$)E&`iy zCs1u|22LE@t#w6TGMj1SbXY8JUBmgE?M@XQ5%~NMx559(69KP_S9Qo=373G?i5`Vi z`6YpZ1n1IKU>z?zM~*=KKp2DBJjN<8unu?^;$MM432wk5+6vB`t)eZVt$~N*63(8Z zCqe6dgZjJXtuL_rBllUs(S6}i?%-G-d%-H)&DZY1eMEYI? literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.class new file mode 100644 index 0000000000000000000000000000000000000000..8417e6de9b3889b47baf98d6b333a63274ca4914 GIT binary patch literal 7604 zcmeHMTXWk)6h2DR_|mjZ+qBHkLO12+aIv{xnotJMiB8dKa4D_ikBN3#ws#A|&n8?WTkoR)`J4+; zba&LIGZ?j^-tYbB9PJrzRHlU9b<1Fg7#Q!A!5xML%1q(#fRCSh7J)@4L zWwx(Xz#`C?LuZL)Lml>o4jGieya~K8ga#%Q1I4ydkkk8k7I|x6VW++&3(Lv!wwCy; z6EP+m6N$N6Kh3XNNWy|-y28q$4IS-s(e~r*Hd5P>hF#%^)PBbNf_4}&)e%~Ib-|Qo zUeJQ$Mrea`4%;oEV`ELMx>(5W`8k?G_QR9vc?zw`!={OG|6b7?PZctb`5!mhfr}rL zAeg*v42gvpEJ&uvkS&xISJT-3bcATTt?AQELk20!e~y-r`YIA({6*Q+na7@)=1Y;^)5bWF)mr0c}yX^C#3?7QPhFS_f{)l#~si6h?1@-9jj z*OTH=JJ=I?Cn=*Y$DHhP?U`|JayDvuC=XXpUeP5vEy|~xPZyv&NO?0wXc6ky3uAeD z)1jqjS5hdXP!?j%plEdHKB~E?6rYzerjQhm=i^dwSXrJ2%`o0Wrs31YWucVRmPX=5 zyzT7{Y-5mO`$1_MT$`_4%J7izeZg?iXWI~+2T_{wIbqBX=bX`&#Hv=7e{yIsr9_*( z%m_!C?^`Y&`$>aCXG+UeO!N~htcKi-QB~qbMUr-5HRyKp^p!IgJo}vEiaF&j4xP-2 zvh1EbPAh*qir)#+i!9_c^1ZsK`COw<(c-lOG@aNjG%U)a+fe0R8>-xEL)~I^B|>I8 z7y*xJ&A3(-Pg-a~r2%1#Wz*#<8wDsI13ozzq~1zL>@h#!dZho$kohXuQwJk_@~Kh9 zyE1LHksn=0$1UoPcx7t)exoP$v}0&2LQ)k)idXZZq(VXGNuqJru0^O{5<`ZScp+=c zy4Z*7ub0_|sdI2*@iM>5JlRnPf^i&aQ|L58vG7Q(>PEPh0-d;fHE>B|_HIu%HW@-e zdc18^(ZYLXmoD2bwIfDn)`Y$zi95XzY?aR>4bda9Or>gtGibGrff_bp#}HaFW|v1z z6U-s67nPIPJdMbkim$21IO=bssb3TKJ=3W^mn1{6FEmZ`#6KVu=G@o|;Aze^i5?!V zxQA>Gvy1Lw9bU=E9f@`MPL zi4oqV_fkB}7HkWoqX`UROuhsWZ~jmuM}8 tFgMU}TZA)o4{K&Ae*#<9>IS5yRO0AtoWy0TYgyuEbYR?=z}hFq7RNMIpF37H&tZ@Y&)umt9_ z10AkMBH#pG`xi7hMrsjQ-buRgafoom!VE(>hGlHMuj8ZqsU1t!W5OpTA`W9Jfqdh{*coi z4?>0pXv~5S$QNBh?dEg_n_~u>V+Pk~PjN%hV;V6V45>vx{y9e0CIOMHrb|%M`Puvr z_{>8Q#Y$VM^neD;(L=kO{*CQ&RMJ2aE5fNB?QvuCs+yugt)h(DqnKAKd;DX9`fV&t zA*V$+sk{@#p$LSfCW*Pmyh>wr5?G~aR;-P6Dhy3zkN1Vd9Q5%IezPRBliE$%PKV9@l9mBaKvpZq)pte=ulPCr_XS!#oy5ryT}?*Z4i!2tWN#}Bvo3EYwU9R^T zb_sz+Uj-~YU|P8SSXi_}f!(=#(J_$M2zK}UfZIG+0_DcK?;OWpm5vxlW)qDL?T*D8 z7d776MC6*Er><3o`viWTV{GJS&dB8@rklXZzoT^@i{`|5t#46kGQE_QQ=XG_ zTH$@*pKNDj&50(P7Dclo7A822AK_efQ6shOtOT7^1FL{z8!s&a1(<~^xR!9|)-tXI zTq{t;_Z;q?q9(z$`VDID7q5PSg&(QTb$q)M4&?^EYnc`-!Oc{53vNRZ?%;O;?jGYW m*Q&1n^=`s*B=Wu3VB}J#l=&QJYj874LdH4tYnO-^o literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..237387403698fb9bf810616fac1ce4735eb36de0 GIT binary patch literal 444 zcmbtQT}s115dOBUO4TAh;a(|-;fr>UhpevAcf_YDP8>4aM2&9T%^L^h~kEO~)tdP-&TCZUY`hVMb) z)o7<&_Q8v<1Xh10jBqV5=|k9KXS_F*zjw9vQvrc7-@kts{DBdshz6Wt&NyYpg7K0I MSaZ!-vBVX|zt1#;z5oCK literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.class new file mode 100644 index 0000000000000000000000000000000000000000..6f15d6867181d555c5f86cd6413f556a762fa064 GIT binary patch literal 1582 zcmcgsO>Yx15FMwXNw%Rah4NKC+;T}TyBAKRRH`Z}s%}AQLM4vQuA8{*+AG@|$RFS@ zA%O&UeiUN7yKN#7393pQ;#rR;Z=T=G_~);$-vQtyJZnIWz=6?GkTM~Ib2er{q|#tt z<=XILCfSguT-x5mSe^#ygk{;-1R7l|F~Lb;dt8r2#2Zj2uv$PQOb&y$gL58Pbd}L3 zJX1zkr6&ZA!fU3Sf^`XOoaEAqlpo5mFk+DKJt>uCRw!u*EQNcyRUd`sF~%JkML_;3L+xe(Q83@t$ag&bE5Mfw zMVcvXsnSClF((flaC&jKtA-R5ax0R#SXDdBIiprlM(rfyUh6Q;5)lbYO`dU$>PlmE z9$|mbvT-`wR2Z7en4bxWN}S;dezQEWv(Y|1&W&{^7)6;Sgl@M?9 zCQk=k_ZhYtfwfRYEIDObxP9fU+mXN)e|_C?s!E3Qv0PoLWR2L(&UWZT!LwFR3?;L< zMmk58d*`~TySv>cJR4eo@*I|ZR_~ZKKh_%@lvW&AB!3%B54A5V(*FARsPl* q%n9q?LL1lT!Y@n! literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.class new file mode 100644 index 0000000000000000000000000000000000000000..806f03696a1745e0a23c47bac4685efc9c85616c GIT binary patch literal 3950 zcmeHKZI2r@5FX##CfkEvQ~F-0dlD!|A)&k#dVq8~6{*!8tuE;yK03Q5@!hVy*xnrB zJHH7DB>2uh;ZGoDlMTsc_nHLhr2D{!cw>9~csw(ndHm+*gS<{D4W;dVOUdtu{E}jhT61a1iAY87Q1=eAj^;lk+}PcnnRSQU#7Y{D3)l8hMF*~;+7rt> z(OT&WTqESCmr`@1!affudLb6!@XR#U3XKq%$JDLnbsA$+pQR?E9Zvs6u!=Hj2Qhc6 zGb+xJ&RkL=4$dV0bRKT8M!&*Nl!cao-%lg^lI9P=gzra1(A3 z*!V(7VZXx2sCyGPwX7DhySsCQ&hv!i-y~6o>vnnq0yR(hEIi6ilnt)gp1^oL^3LOa zVKi+{1up9Fus#!ba|5yh_X+v=yn-%o{7jjp9F|?hIcr|xRhBH`*ZqU_h}S|!WWjBB<32goHSM^KJq&{;(YZTDhy3zz`w_` z88qlYVr+Wxhs(kN6|#>>nlj7`y*$G5)ZhXc<`DT{N>cZ9*X&PO<<(RTGv$ce&hhE8 z5wj@nat2%!b(siU==f^=7*>Ub|;kNMMRqSMMW@%;RL&%7G?<>-niMop<12VOd6?9QX*IGZT9{@Cg#q8Lv6; z2nT0azXPA+1Xl5NxQ2{)9X7D%U@!ev@LPi_xP`Gxuvr*; z4PKuaTgCom*uwS-B7Kaztl-!E4Qk)j-uMNs|AD;~xQ%VP8vunn*rv!R1$W_1{1SKz z?qOR*pd|>8N)c|t_7uW;iaylg?Gglhj23iQg*uL{z|PPzF8+HL`w#H<7=K$h`W`gk M1Nacn_$hq$53gbyp#T5? literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp$JwtAuthrespBuilder.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp$JwtAuthrespBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..a278fbc92d5b39c5926801e134ccd6ea5d22ccc8 GIT binary patch literal 5031 zcmdT|TW=gS6h7W;vX`bLq~Y2^-L$kDE;BDYQ9ufzh*U``HEAm(5c1AAyKZLe!S*cd zFGB(e-uY38%z(Q~HF@ff`N_h)jA+U1F@t)R7w_%lB z`u34TIw~9Sl%fg>kyY$yp%wDa%_p?mIUI7Db30Ti9dLW-1n6zjBdv03amtPhPHP&V znjdj(s8!W;E{s8lewi25lT3M%F^zl+mK>wT=>`IbrrRKz*dRKwLF9D5K~u#IMIF(c z*<@Jp<3AOs={i|7bmR;jIR!*#X5!I`yinTGOyzxbOcUlTL;DpF#QCkR5&qF_gjYGuo$aHD4o#UMZ@v|lV6&UjYO*8=-$OApL;&8+_! zaFBZDD^(DLtt>m6>>*UUa2eK?p$k_Cywz32gQI?vjDPes6Pzad)>3*9qMC=ODxT00Qlk@{hneLU3*qSGOEq z>zGB>Yl9CaWi1YO5AcR1;a>@t=T>WnZ`GO;Sl*G6>+Osg!%YkB5V$|Pe21B}#_{ia zn)jc%r|}XXl0AQI;j$m*-S$2=_G@J<+yJ~;!D}P}4OoOFd~4#b3zu+Y8Q(s}S>i^1 zh0EWpt^5qH{*GS_SjXp5HG^jXzAyV#@H)JKUuaW!3!f(x8aU=Dygh|NXDWqj@J@}w zDTa50DNvMd0a_EJ8x_juB?_hXChl$nL9rd3Cfvkl18%{4_}@jG1a3nQI`Ba?OJEZ| ItXACq3k%tV2><{9 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.class new file mode 100644 index 0000000000000000000000000000000000000000..c96b7cebf4c131143275dbcc534b1064361d8919 GIT binary patch literal 4743 zcmdT{X>S`v7=Fibd?}$Jak*OPBowd?y&*$ zd=+~8D%OS{GRb;8!1tt7mRX^sA#gQoU>rs0l=+rviIy5{pp41r4%hi+-DbOkoZ zO6ePkj4BxLF2!(0B1q)ZNGntrnonr0>iDS7oO0UX^gg{+lum+(zQ{pBv-91 zM^z3fPoXu-GC9-F*g>~`j9Jh~2TqfoY86r(Cg*w^&xlj54NidMb100#V<{y|nR6W( z8QtSf!CCT9TGMbmF0C0y`pop*kvw}SE;<2o)NV%ivVxcqIe*44>du$U{s+=PKx6v? z;ZJ*s@C)Hm#f(OA1t@{-`7;+m5grrV^#WQlbxfqyz1#erKs__i?~cwir)k_q_&6>G z0xON?0d9=LnQWX?;09UwWxg#5Ldzs%nK|xqKVTY>VZ{71#Mg8OA!2Jb;%-Up!fS3fKc2+DR>6U}_EmzO2g_YE*E&zxXl(sZbVMm?K0FjS_ zDo1}_EU>$y_H@teXVBtY9Fzy^=Q>#~)~j45>;=JMzUPrjpmu~ePM?1z9Pr!7fY_vX zaW1so6vIZZwkKD)t@gP@AVs}>-bUPBJCKs={eT(6O&Q)N@WX{(H4(pN+!z^Mh7YIi z$7yiTxWn`?cVO1QHsGYf3p#-UtU?K&s`yui3hu1o+l}NaK<#%}|8Dcrukh@jxLbhB z_`ifSj{do1$H{mBUL5h=L_YU5<$GxcUnSvNOR3;0yo}TYUV(Z>LgBuIYq=$C!w%}M zBB!(ORs3~+IC~bC_B?W8BoyO(irn@-oteh OsXoH@5^}7-2mb(mEuG*1 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.class new file mode 100644 index 0000000000000000000000000000000000000000..b85baad583cc43b041514a9f993f834d3e697c07 GIT binary patch literal 5182 zcmeGgYi}DxaMpEl@ii%Fnzl44bO|XWMY5rkr_(?Z(k7AvQ5=f+xH&KOHg~tz-8~ck zG9-}TBN7sS2qDDm+3_Q}=1g#dKzumw!?W|A*_r+2kMDm3fQPW{K#st!R$eJ!A}l>+ zO;++`P}-2O(tL-7tj+@-nrcfM9+ZL>i=w73Y3{{Jm=?l?MoHi2s)bp23rKFmGn*@IQGE`hk zzsYM9{W21MVqY35i3Sh!$J8zK@k2dkeSjWt+C63@Wz@7H?iP*(X`3h$xXWiIWWVK8 zfZf8NLOb4`0!e$^x-bj3CSeZd(S27$D9kE>>r0iMnyN-w8!SITql(6g0X5KUe#>U?0yrdKHXvsS#9bg}IK4AMXU)DuPARJLJ3@Y`ENOU)k zJRaFRqaC=5k=b1n`1L}WdC~DX0ZW7|{2PL%Yl5?*AUkHy6KQ@!CIKIzNgKptjs zmMAAS!XFu+RO!Ldr;h&!2qtUObITM3_GhBbWrtUQZK5)OtyMBW1`FY#x{Jbg5c$Fr zhUz%t3jI0MM#UaB+_c@UFD+A{X&l!0H`rU$igYK|#>Q51%x_T@khdTVAGa0)T@0UNfHlk z*=n-SPp|~ETS=qY@dn(wm29P`qU^v!>;Y3ncHk3yVCfWF4y+Nlgcu#zAaG@{l5k)X zpIJ`H=D=g*=45w?HR_Jg8r{^ka~fU)M2v4oIhcVl7*A#nOyF(-=i@lKIF8|X873hQ zQwhWsxQe4gaC-(P*YJCQXmU8ZKfvtQGdI42mw&=l4sPSGMFT+L75tq{<}SPncal9o zLgWTcEh2*aEFiVlah}K3Vu#)vS@hmap?7x}ddqMRnQTk-R*E3S6vX#Z5EFPi1JgSx znC_=ynuB*y_R~szF9ich!EgyaK>g+5!^DOz&OX9*8NV(3ron*~SVi4_3hVG0Jo*#2 C9GSEL literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse$AuthenticationResponseBuilder.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse$AuthenticationResponseBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..af93208435b6a17ad07a9898e610b77c549a75e4 GIT binary patch literal 5304 zcmds5-ESL35TA9N_@gN)A$%sK+q4vi5Br5D3P>Ro5h+QfCKOdXp!MCv-sW!i*xj?R z_#^mpkU)ZW_@5ASw>G(!Q*~)$;_%?}-R|t{Z$5T*X8!o=m)`*3Q~0m}H3nmAf?h17 z>OB@C(F=6k+tI19xG$6#V2sKgj;+JE7mr1fjBL+hkQ(X6M5mn5QG}+qow^}W%0M`& z)dRGNRu*rU4}YG@C`8kMI)iKZu8~lK-u?b#3>!CeOH4^rAD z#$7d%R`w&@R!X~kSIc0dxFk&ygVuf{jH0!c7B7xOlp=$rPo$FWGX@Ktt%nTiJ37P$ zyu@JTbjN$fXw!si?8={CE8?T05r&-9lgKFFjweRb{;~a-w_8U;ub5aa<;{(X6UOXUpK9zj4 z0AmIbslwryEr0^|p|Ha&f>XfN$IlG4acUjcBQ!>a$hF}Vnka(P#YLyyrU{xnQ2RhW z2U;!&>9qIHa~JXp;pQe1p4Snq;GOeCQc3Jxa#a~f=lzrt5oMi814mx$qXKz`v^-TI z9!rH`m+xoZPB(kLEE;pEMwFLuLD%mPO_4*pRS7~RqUZ71Zh2}n$rJe*k8LHGQ{Mkh zN6wf7RN8G0jJF*{+h$-X5wugkd12XSE7pNN8{jIIXv0-lU4}Ni!r;|Tv0Cs2Mph22 z?9ur-NaH@5BS9H{R*C39L=T0L+4p3y?uL>|jvx0ftbn45=El?I&=FM{Pn1MIl}UMl zn47T97B(uBRR39ouHrYBts1DHyh>uv_Jmi0P>JaObn8%`qMvn07<|{+n&nBo+k_ho zZa(`gQg?$vbDDlKSR+iCclGj~jW-SjqP4={{Yi#R!|g-rB?b7U%);n;`8A)n7#J+? zDurez64s(^z`G2-ond5UaJ?MOKh3H4o@h>aK?&u)Z_s3MmZE?20ImB@)f6@8A9)qR;5#3e7P3-e|8A z3P0-H6GPGQRM^>4i8gXaMB-3}GO~LkV`bP0MKLU=(FuFW-_LkO4SLq6yUHv+Oq6&tx&k_6B4^sO))(RVj<`Z78IX&(Pw>j@g zeqY`yF1Q`V@~lL%Gk79fJu#n3Y*fna?Jy2}&$rwpvD7%L$XK0tR%xE4b+g5N!;`2l z5Bx~>+k7W6mdl?qwP3{kXo$4u0>?NwZlPW)1)-GC{y_3j+JWkGt1=BBQwM3H@Zywj z7cY-1frri!HI!QWeaYdlk65Ig0r{7P!zJN(*OIb0M>`A>ZP&=-@C{F};h4$V1c=7tbi+Uf}j}>hK{e2U zrd69obE8TtY<~A5)oqC!KO2!!8F)5Zm9X+ZL~~YIs6CPjm0^SA)AAYA|eIrj#_4BSor&|Z4lZdoGF zb1=>!$~o($FO1VV`K7QAVK5*{cHo0n{cxU?54@~u#@)S2oYC6JZ5-?iH;;7X1!%`^ zo~%kXTHi5h%6a|;f}3_!g_}2f15p6?jgh1l|4~%ALo)++_hMx*m zv9gG_H_~s3>c7*aZqMDr;em-o$Cl&|B%* iF3}vljrTU54xV@Lyo;xfJ>J7}6H*`HeE}M?^ua&L%KMlA literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest$AuthenticationrequestBuilder.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest$AuthenticationrequestBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..cf69ba17174e7ab6023af0270b0c4260035666c4 GIT binary patch literal 6706 zcmd^EZExH}5S~phxtE5fO;eyR&`nzCg_pZ8eBwdY+U(yJjbbgzCc4l^VX8ib%zkc}*06v3G9p)H3HQMWj zLPp)kVko+v3cH&s(FS)#B>EU)WcNqLV%QBwB94cqYtT!yv?G#>tX4sQy1S9s0ZB?v zSg9h7PZBitZt2}G5*hfY>ri8GIh!*OQNMe?_ZU6PppK+Wuz8xE&3pk-Y#nqDa|nR>R;{aYz!!8jX1*ER{P0R>P<_Ff+6mRG zP*~=HFoU!Qpn|FnUsS5Y#8|F|sI~NwE6u6&Pzyj!5M_0f#Hh16pLYW1GT3J7XRGpb zQnjDI6!w)VwoVDtA^fYtahS?Mq$+Ky!f{a9L1deDuk@tNw=OmJk+C}QEN$$(UQnP) z!;{FzLm8pp;k#)9pk_837L2%zhUy5pppJ8Zx`@zfI@x;4LWQK~x*0pAZ!O~&IzDAa ztj^qt0{?FJr|hw-Q|Y{f(?$?%=)R#>HZuwL6MJ#Cw(qIw6s~MdTW|@kF2Y4vVQ{To zBpPyVBBc+Ob|^ROC1DTsfgna8B{7sIf(Js&^m=@=W(ShkiqXy)aW6!L+S?GUO z-5c;WgVh(O2O?*Q0`8^sGlNI%^%>?eO0bPdQ^jC~=1POKn-Sf4AdtjL;pYAEizMA{ z?Gyd(;a4&(A2&)nu8b&Uu(%yXs5b-RfYH>U&ESXG6%-=ZOLh5&&VT}^A>1rMXqF literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.class new file mode 100644 index 0000000000000000000000000000000000000000..5b21a4b493869b25b63bd4d5993f9f133c4c5ca9 GIT binary patch literal 6257 zcmd^DTW=dh6h4!>vEzicqz=%u&`DaT&Bf+YZcRZ7AxM#&wjv>jikIw zMEomWkU)ZWeiY){UAtblZn|mKO)C^l>>Zyu_xbjm^UuG3{6$1x(aj=FF}iEC)9{5G zH13I>XgJDmtf^2NxhVp%Cw&>%tpj7F-|!Dax7#xfBb`vY_5gH&)yngvZmfp314`Es z)>VO)_d{uHkqV5?#cVwh>@{w;?n%coDoV)nHrkBlo5NqXtagLF6-K45Fy?{M_`TQ) zU9T-QqhG7F=HxWJI#&O065&wk;`bqp^W{d+bB){bVq^d>UgP?p5s8=yLUC=IN7x0*Bt| zGM%CGb5x-PM$QG5H!nYm zXxlJw1l7uW(ykAHx&rtef>z@4l@eWI#ot~e*vjWZW#E!2;h!U)45BiS{Ew~5WO{x? z8G?}lIiSP({ZM$-1kY=HS1X?bs}BJ@6bHLf8vtZX=)1qJGX=xg6Ec-wOMb9s#Y0 z?YL-Mex6`Ug~n$VK^(ZSL`#g84zCr^;V>$jRM|0$hXDuFK4>e22fasXp9IWSYIhk` zQZ>r$el-_0lmq<4*FknOI#sQ0U}F#lM%TtvR4IlDWUbV8O7sCM*uzbUyS3D%nnXH} zvLCo9KUj+Rx259=jgGV{oPCS~_%d44`uG7sy+0tR4+aFF8w?1Rd0R=tqrTM_*6GCW zBy=E{2c(&!!>>oPhy!=FuxMxWoZjnJ#SU- z8RUu?w5^ABLs^C(lePVpI-0_{#WV&j^myehOz0f>og1}xi(@<6_yz$oo6+k47&y}$ zPO~b_$9)cx^UcQ$!|vQh5JWe_ z4X&Xjf)g?RoWkE}n#MPxV*EKvGgQK2^a}Rgjj4#rf6|$s=Fk03^M7M^ieAJ2Y0wZT zUypYPPZwyhf9^WYMZYHJE{-`@iqFj@RP-jj1!_i@pTL1<=CDi)DIKOB>X4nom1A?b zN^isdGGs?SdIz78FC(8EU7t5_vP7&xF`oim1Meg@&&H2Ym1<^aTK(LA3}u0u7_XAZ9`aC#=hYP{qNn zO10s2CRv-uT-rv@SRMy)k0nXh1cryH7Pf~tX|;+Xu7jP_c9a%j-&2GBl)DE~wlr(%#TBO?~P;Q8}WH!~D!1@?qt2SV4SS@6Ga~luc zK1lI=%=cwi7}1RQj+DwWE0CH%rS^i`ItK3G1oFG8#fxy2!2E!0Piv)1Fi+syk<{F% zsLNXvGm(fWvxFR8>!(;)kV8He2FwkFy-bA(-I47kY={aqLi254#|D^gDM_&IBoGTVj4@G zu<#VMPS>#J{$%z0=j!(_)Q`9e^{>&E;)XgY#LR{rYLT43Pf+v2QfLILtn%&ZcW@mWBxhtDgxo*Gna`UwerE8hSB literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest$RegisterrequestBuilder.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest$RegisterrequestBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..52d06068f9bed37fb65132c49f220c485b5c8a0b GIT binary patch literal 7710 zcmeHM-E$i?5MQ}z{DIq))GZ$^R1F0jC_X-4_?ihJ44H9LrU?ZeAH}db*~E5TqBQ4gnaP8#J8AXPYPGw!+WqVA-~IrA&)}mfR0td>>3cB? z6Yl{VGS3&Ww<$8I_#Kw8K96~#cMp~3u@@h*G#x5WaX*uxK18}iOA$p}diQugL?S8q z!;C9^Yv%onEQ|s!tFT1iQoc^alD>Dh_kjDFz*53uPGGfrG_WSoooj?S={52z;d@M za{MaC%}3h-b|s^+TFR9AQApGGX_$oia{}ku>-Uk-O%d=aTt>trR=1=SvIbYkxs}7?SCeDM~K(`*@6ZF^>Hh5+|IJi6$h5j(qE3#-g^3s7?`3Sb(BDZgCQE zP_hYmU}ROG4NLIPv03XC}`BeDgj1bVt;;o8)r&WF~r+L7;q{i#V7^CWsKJ` z08m-VWgZsWsJSTBoECp^ajk=*I*=@iyK-;~w7nC{YC&o|U}|74f6ulW7rFUTefO74 zmvaXwbyp6`>p)U!c;dj%8Oal0#zuLtV}eZw0dGXnhU_a$B`7U3U*kvf(aZb^Z;CtO zWROm#RI2j2aMXZRc%ca^@FIaL?aB0^%{ZDg-%2-3xD5&R7-sHFYEt+ty3b^2-bbBF zdJtj`GVYd`LdB%!joFOo9wrT^vZ6oF+gGVv)_{_8O^0--gRVP}xEy@liO6BGVn|9g zjAB?mLz(aRoxD1MtZi!!>m^&_YXolowoJ zI>7|3fWcXUb^NcuTktlv4dj!+ZRkK9KEU^79P!{i)FDH2 F`yb!s<)#1t literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.class new file mode 100644 index 0000000000000000000000000000000000000000..e2d166fc3db0a770c8f58e297e670321a31f3db6 GIT binary patch literal 7771 zcmds6TX)+;5S~rl*m1(8Zdy`Ws2U2`1#Iq@rWDdN1#{dKnh*}WDfY%uBWc~;RUm(Z zKf^h24!rZDID9L~@g;7$sg*P*53+Tc{WLQ>GrRNY-~aynn~1)o@A5RkXidpxEpWZC z_Q>6FYfTZQ^CgFTW9ae#;CH*0>4 zybYf(hM~}|_C%-{UFo+o>U1Pm>L*u*Fj!&m*&Wx9;EvpqXz@IqhYxywS(Z}B0$pHd zW_}DYQ20B%zy*TrrhLG+lq)m7cjyZ(bcv;x#19KqBYcT(88XYZfKOxV{$GwX}E@$YC?}V@uQ1 zH}$8_qO~pV1YB>4mV?+?9bDSV6=ze5z|jyg#n~BJUr@g{xl|6Sw-E_ErLbfqqNd+=VyONKcx2%J@D4x&E)V)%X9J7iHc`fSr8nP0$)&C!KD zh?I834jLt|#T_9XFX&(okG2QqywX3Z}DL?wO3mhP2;>fK_F;Uw|gq#Y^eNWU^#iM>DY=8NK*>%&6>onNw`FI0YEG~3stJxI$f>@IY74>;|HIioY>N*y=4<(ttD zBl^ii$3EC39u{owRMrdh1A$>DjTLy76tg?f^L%}$X zN0P?Oz_)nQcO}@mj@#S@hw99OwyTb2RjVnhTJ5r`kn6Il^G-`}oi?XfYIi+RP)Yw;z z&4sRr!$Ddt4=1kuii@AAyQ|>*oBW<IwB4%L&uw?3srQg(IdcT8~dFPk@Jmx z{=?mwdKhxKY|l^zN7l?~ScPb!>#%*a+{_2Z+TN;XxCxAL8G{wTaKed-V!N z7KqJKjFY2}fSu&Yv*9u5@yQdk>t&DaoDXWp=u<@DXv@dPo}IB`2=e9&Sd?qHkjpHjEU*lNBQN%m$;JAxARmXJ!9$Cim F&Hp%yE1&=X literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.class new file mode 100644 index 0000000000000000000000000000000000000000..653e4926f0259a1b52d08ca58474f9fd10e831c8 GIT binary patch literal 6369 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 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.class new file mode 100644 index 0000000000000000000000000000000000000000..1729ddc850ca7558743847f646b893afce8d6e50 GIT binary patch literal 3911 zcmeHK?@t>y7=8}|M*y~s|_oJnqglH$2Qa}Y-?W1#XiQ&$^*-n7J zY|Z3?6nnKF4lQfj)=Lpt zu6-(bG?PL_Ozzb-8~Z%89#!@a?KamP5ps{F>hLk$+OkKJZM^q8FV%NZ9rVt+-pAZB z5t+WxTxvAj3Z$8)`aTU~T_P6AB9HDb)z_>|oM*)CGyYSX8@oK*W)dY0U#@q3S6j%& z^6lpc`pHqq6D!c`(=_0FDE(%i-bMK9oBallu03l@D`LJbJHm)Y#8;$LmZcyb&DArh z>2R$@lOyh1C!MyKW--SchP=!54J9|)Q3RLLs%mnd-t%aB0Qp2~r6=fpuXJZuYHn22 z;mrVRnusV3AxN}BOtE=j{H$kRlity0rA~D$(1``sUe!YyOhuV2FDZ7Y8oG5JrrSmxHf0K*J z%h{`wbDD>e{^p+h?0{*@iU#;k%pw&x)Io7**w{klnyun?qa>I)r#CAR?r;>Cyp}dV z9^7rV05T(C?jlj_@HWKYZpi}NwW9Y7RN7eG4z0@5=xl;FWyrUQAQ4Zq&sWDtX^^)vE=zWH?t>NWx&Owz6iu9*&7$3E2nlDTsF z^f`t)eP#CPOOGxOwRi8lK7EBi2kG+Z8+=UUW!$IxfIhwLd_s7WuD!Q$@fr417z2fK z0&3_(@@NzvhNCn~V>FJpS@LNjEz49vIYK3xq$%`XLTw!NcW4Gy?j2#HoWpZ@6qR|r zWdE=S}yYvNSdyl@xtiPoP Fe*+q528;jz literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..9602752535fb3bc62afc770bf9897e2c7bffdb8e GIT binary patch literal 2879 zcmeHJOLNmO5MG6}X-s*gP~ITQE9DViI8k7xbjkqZLWh4l4|h^)Ce5g3*WNVN>9N_LLR@Cni~~$d5dDQ5)owxG|>tn zV{@N+Rfj}F=HO|Q(}BKKlu_GDxK|zF{uqnl^N&#-9D0o2=p>9WdTqFtEat1sm>s2C zMUZ|veh=Zn37DOR({KjE{y<1!9}zfJ5B9>nX0?#*h4~FkLLel6k;YA~*BM5bKrK)q zi#C`RPTpNC+m662zCCym=b0&7C#;LhKbOxsCbCdM+x3I*Uc5s4T@x3W3&ZhBlLV{G zykS~m;0(Gu(PdG}r(lju%>F^iu6HpEfKHgXT0!vb%NW~0U~8#T->`!xD& zG)G&C8|o@QW;X0lBml}kBuGBPz(_R>M|usHb2R@USj36amMYyIQE~rO{>Np& zy@g`fzuv}`QKaIg+8(J@;ENF&bcp?zrK7GlyqS~D7=3q3#;6o&IB%$9jGo0wBtl`S zNfWNIpGjkN8d{}k|G`k7r^3)ww)iH}aH~OAQe)kH&dj176|$?gIc0d^J4FPq`cE#s z;_p*|B($j8217dV=lAXOU$(;6!WzD`LXJHP+se5-7llM-1m(I=VHNpxCio?ZxOz6& z$Nz;2%;SS-w4W8YO<;Ps!B^leZjpO5^u|HG6=4jLylX!Ot^k2U_?#?34JKd`XEmt6 zRJMZ8AMl_Ihfyk{-ZUJ=*(A=6;qP%A_t3V4zusp!@vb)W5l($YsRU>7>+}FF!#Vs; zXLAqE!v&Ns;+O(*5;7coQ^F literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student$StudentBuilder.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student$StudentBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..965cab97bddbde19eb80f348c2977a83673d2e6b GIT binary patch literal 7494 zcmeHMZF3tn5MCvY?Hq0s(lorZ&`T)b@Zy8=-n2|pCk&Z!6R6uV{V1PR=aReAjifW= zhwxjNp)>HEZ~P&K)!msmu2aiCw}l~Jtke0qXIHD;m9+ZfuU~%yfSYi$1TzHoq;Q>p zdZBYbyVP-c;M936B)daH+F=0;Rr5$H7C6BXjiRn}q>9`4)@i2g)vUc8dw!dV5)=q5 zCR{!ZJI-F~fVqmmLiX8Cdp8bROb{qG8a(W55V&+V4wVPIVqAjFgy4$$9e<5Q*uf!mF|14rUw zn2n_%xR26{jl0<5ALWQj`6Cx7vUtM_J@qw#+3NZO)U(dptOT#1MUKa{Ed&>3c#SOn zc|XJfa=**kHqJ%l`H3CuNN_YvAg|lj{Jni<2Tbkrw%uWB7sp*)w;u@}*b4tqM-j8L zIk5$M#DugJPyPx#DbXT5h_=okTlQgZmL?(AvpPt-old|cbj@TI2MNE+>^nV1J#&+= z>F)-$OI>^tw*Jw!nd?)5ju27z5M$9^LyxEpkIq^aowdxt*X%ZD(#ANl1FGEpWd7Mt z5yoOaA;v&W2Y*fbVr>libi`f|aiQ$w<5+pV?NS}Oc8j6srCvN4kc-YJuIWHdAMz;q z2lS8%MMuGW9<=!3zXY|7c~%__QATG7n&btXFN&FF1V+#J86?ZoeYQKZ%W>rQ`_yx@ z%gMEI3d@dx<}X6#*lOk7COmh6C#{-)MKu_}bRb)F=&CSgIHVha{5jT$NAF?si!v~u z-W%o@WHcrtkb%l)kQbcNr!xWB@if2l?eb00k##(qDiOPii~N+EzCRx4eaXZYQ+TMA zBc$)(G4hE$d4DRZb3YEk5g>!GH3~N)VMa_wplv*!GePx<=jle!zX7vg{Qa0 z*1SQgG}3La%Y^XSr;F6*cx(Q@53^teE>++HTqba_`eb=V7ey8tUdYlVJ~@5pIu3WK z{~$Aa_OhV%J*)_QpSyH3P_x2<&6U9#ly-*`b*P8cv|hD7b?IfeN@gD$6n+dcp^@)R zi^m`q3`7|~4Dycwi;-=NKnB9jApf6j0|7QHu|0!C@h*YYrzZ+55EJ;hnp^h9^z$46 z%%M7GJQMD@mcD=>uvN{kxvtOK~)nJmF41a9TMg&=S~lkv|5%;$K^pfhF(zQiYO@Df};Z8BcK;MTv*GyOsa3WRImzoUxBwoctr$rP{gMhu;8Vntz_*vIG^+vvi>5xob;EH zzJ<>hU>SKX;?t+dMzFOW!^*>@SAT)me^0P);BPVchrpZoTuD)I1#Il$?GCKrZ;xRH z-=z$14PjUr%3#6ULmA#NW~k(5I0x07IxOVYVG-7I>adhshxg$9J{^wz!F(=0fDh4= zO6UjLYiii`d}DmJRs6aPWEm2k0yx;8fsf#0Y%OFba1H%-9ySu(EPMuEz*lf1L0$VB D8aPxC literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/Student.class new file mode 100644 index 0000000000000000000000000000000000000000..7361dfa634fbae590245c7a6a2489260670604d0 GIT binary patch literal 8318 zcmeHMYje{^6uk;bWIHL)kU$Hxh(Ox}TDw#Fpadv+7;q~BB_S00ROBUIqK8?@Dfub= zC7mfV?RS1ur{_va{J@D7E2T__4{K?)ch5b0_wMf9>*s&}@h1^op}I~38eI#NU2-ky zl^$CgR>}6=(!AeLfw*OP)|zmI7cOlEp>Rv?rd6+R1f?KsRPnX66hCzu)aY>3*|EH} z((Tp9!VWb$l*m=8iw$>GD2;|q)A!b9G&*s&;f2x_6>mcZa@7&Dp67>FD19%`Xwa-w zA(S)ceW&4icpYwd@<~IW$+KKM#>}R=rBKNTR2LY9Q>kjCCz>^yGqaA4wR;KwLFGHp zK5X8_6Ahzg8BIc2pNc~}lCgu$Xy zeo3x*R@hMJc&4rK@_F-yvOHjKA#BcEMUU~8!Qb8xO35md8Jzd4LZ^3N_@;5nO8F{B zr!=~G&r>4soefbnFvoT2MCLZ?%7^{kOGY8T1!mY5PlvH8jO{L=Z&*gSSr>%@out#F zG)ZS*iObTH;Z=<$rdmiPGcvsbDyH;AJpIcS^zhXAw&ko?N^(8jB~2fEta9M z%{4|~&wGJTu^WuTUd^#?JHine%-XgO7hCkb^3%Fh0#k8dYWgA6x3+=GIyW7Y!8~N( z)6#N+)=qgDlszWOUbWhgPL=(533{{o)!AhA%*CLXz>}?GY1HemeQ@7W9=to4$Dfmo+%z|+fdFg7)9 zJW{@EglOdO!AMpBB8x{t1qR{@ZgOQ1;GEkM;fOBPQTAWx+_Nbb5wpHjJ7iVZZq+z^ z`pY(_DNvlx>`)fa)m_g>cu?OJp!iKlg3)LQ{@ z?JIJ!q{zEbaS!nEh^1TiRcJ(=8=-W%#Ekt3`l{RIrwwa=M0Or>@3E{~s_XvTM$_@# zRe!w~*h`WsBP9@Sb|J%oOOg=DM@ftxGARzPMSoVU1@lOOg{onPzRC_c>o|MEpXs>vl zQ1cGrDiP>pX>>cQF*)XWY(m zaoa&U6tx{rWZtB)s6G+ZPeAS{9iu^dEBg9&gwDN>qkaPAQ)t)lEIgx=560g8os7RC z$+P%nIihKL55KILdA%R$`vC7b(#9#m(P#=%2l~J+rocW&=ljCGkOKR|KCv&R!2YOD z>?Jafx8KI!5cMFI?d&xA7Av9G z$<#0QB;9Qpd6Vl>m;FlXy5mjKy%q#M@#9sN7Ga21&}V?|M`!PGoY>!?{s846%J(Qg jp!|sP6AIDKCfgc5S=ZdPE1Nlpe>(eDPJiE`%X#^R7Iq6sYF60xNYnu+1B2*b~jb?%aA~V zJAa2eVjMd(5f%l(!HH(_^5)I>&3yg-@iPECgU1dm5ZE(1^b;nef5c9hAF9OPQ6p{m zK9g*~6E1CcY%EXwWX#g^#Q4UJBFy^T{9E%>8DW(kJ5V98JfVr19QX(QBOY1;)vYiV zQrK+*7h0Q#1S&f!;ttdZG|tewS}R?JON4xTBQ-ZFKH(8XJ*kM96-v@ntA5NA^OU-^ z-jLIXhcVL#N?CY}TImL&y>j(lq24RhZ_r3_L#47bVKy96i-i0%MZvR#I2{yF9n1htAXYR4&eYk`twB(so% zG@B zpc$x;#fMCbEH08u?}dz>k9Y9}#+``3dKq0X9Y&i#tt$qS*^x%Z{%^rs!N0Cedm9Tj z_^B|~%xEla`5l3^DYDqQPL%hLqFX^W-u5P<+%B$e$X|$TCab?J=)}bYj%TKt?`S)i zbJ&0AF4vUxxYCiKk_P+4qw!L3&2%`#TXC1b(p*&s?%`?3dU4=BUXAICap2+HS;>t+ zpuR7RL4)?t_GXa)UKhM;02Q>-MOehx!RSembw5G%ZPWb#^)HxRfMxv5Fo4gMNhZ5q uO}L8jwMo2!@hYq#A%W{~19KI)Ir-&Qfw&EKFa~&pPaSKn1BDH&_uvPvSE|JT literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/package-info.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/student/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..bf7b47b74a51ebd23469cd5441e3e5ef2235ad99 GIT binary patch literal 162 zcmYk0Jr2S!6oZ}e6Nw2HZUOHEOb9l_&=Wkuqv}u6s7WjJY788JLm^ToJb17^TYi6@ zF8~KlDrnPiz`!2|Z9T#H7#e57=EZLF09|DEg-&0DSO`V8c=^m}d qTw(oNXxJ5Wy;WkO!YWT&M$Tm;3Y-7NeuB4v!YsX+q_9YyVfh6f120+t literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.class new file mode 100644 index 0000000000000000000000000000000000000000..bc048a7faf0f34600c02dc1fc96bc2f0f4b43dc7 GIT binary patch literal 5387 zcmds5TXP#V6h3mC_)-^|G;M$us)U=(#pY6Ob)mRPnemL%&eWj{yvb|DR=IaOwWQyx6DTB|wz1GkFtI(?VF==I0%VWCW{;c6`LrF7FIR>* z*B+u$!sAVUAhhVXyy5%OFe9X|30!ZD)oO=9pt#mQG35)tr*X2?0dqr~D!VJYJO>*D zULDKdQ%b5lY?3_v(Z_+(9q=wihXulo@M)kVPUz`dv{~7YBN7F?cEMp2Mj5BDFN2IpTTH=hWk-FL7rw|K6`5bIWo5snA0uJ!(+E zZa+GiMlfyR9zEnrQ+%^Rp3oZ8LM$9Z%-pgwJ1p36yQfr}mc_~oDQJECqHEFYF6M(I zqR;Mzr74gKb)V_JttM!iJe;-iyigk|2V5!98;{eb1I&>V)TuO1T9$HMK+2VD zxOyJ832Z-^6d@-fP(+NoLq4}su2@E=r!u-iIVN=0L8Y;Xow-yVO>BFM*gL|^miKJi z8n=lby*1(UIEmLQzu>H?P&`QX9eN=@tQq(^+_(f#(Iz$wmlBRf+sC{xUSK%-a-#D{ zJ=7%+H_2+_$*zg`Vk%{f9X;gOi|&lLI!v8nQRq?9wdh^$xJ)4{4w!R{rw6)&^td|x zJW)-~6IDHNe$YF#E4ikYH+#%D{iqo8-vT^Bq=9i4RPC{)Y6DSyhG~igt1%{8sf=au zGt`{ILMKKZv16vD=7axV%#~h89zV^3=Oi@;d0QG$Y-0HojxcfU#OV6ksL(N3S>q&t zCsgD#s;oc;R$&d_GLVCO^ejLTpCy#I z5Zy1~*G-fp_$>Yj>pyQ?{vEFT9m&3q_qC|!BD{g`b`(m%HMovX0&l?$yq`v(b0h4) z+Y2JR1Mj8~GFHFHiurYT58hu8p$wH2g7y4ab@%{2#28$}k=EZI;dAKKvs?5gj?M$w zga{`KA0zfSN@vF-P=(qI?Z&HSUVl$&N8l6q^xUww;IowFtE0GlK4pE9sVjU7zDOaA nt(_NP1-`^tGw@Xu+gH%iukrgEyl&yuz^e#ZsN?U?6}a;s(cC;{ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.class new file mode 100644 index 0000000000000000000000000000000000000000..7f6e5000d3d248853d787d8cb790c09b3c3e02b0 GIT binary patch literal 1611 zcmcIk%We}f6unMElS~6?3xz&_x?QE4nGGufNL33`r71{FsX#)i9FIxd&e$W{6Udh# zfdqU0gr7iMr|Balq6n3RJ-#0M`1+i4{r%_XuK@5A)+?Y^BP|il}vA8WvUvg1_GJ)A4WXe=Gdeu1+ z+!0v1w0lqF+DfO*fWW)>nsc$|=q&=%Po$FW8G*y*|2$~pfWXQgG9xpwqx#ayPAWE) z(vCT)l_f9}Zx&8}kVYh!R(VS&NY_mQjdQx58>3AX8if3Kt&Ffb?Tdt>IJr!RFf=zB zaWngv2DSa3po!oqLqwW0evHD=bzB`zmNFbk8D0`&ohDjXimB3!Io_iVfyKuhmAeRx zDuv!Lq0cw`hht7MmRYWiquO*SXPzJ05%lz~f3;-fwF%p))09y+$VE^)Bm0VVJ6WDe zE*-T+E)0^btTP2iZ_*R@HaDoWv`~q7FO^6_x?5Q1`5A6Y2UM!QJ{FYWU3%jPK`qv5 z(mgLE8bBT9>QI4s0t?Of+zf4Jr0TZ3u^KU+{IbY8!t68DpTK;qIZF?ikv<+xmR(Px z(cWCQ&qsu#YgaEjd>^?UbNOOdxbdgKZVSg`iiO^cJsqu$>&|c6=~fk12yFkkYJAaL zEeL_2jZYyLFQjLBdHgmbE`~)wpcbEUQvr%a?a>L;ccrzcohQe_8W5Pmr^F=`a2tES&ZFGHzCIiWumE>4x`(X_ n1b=uO0*kPO{qK0o6Y%CH;7!4O#3{jpv-}=nyoRlexU0Va=Ue*_ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.class new file mode 100644 index 0000000000000000000000000000000000000000..c9a580114050577b5fa638a0109cb5ebe64bd15c GIT binary patch literal 2969 zcmcguYjYbl6uq0+@uQ(FNy<=Kh!PmEdDuM4t0~N+X<*E3Ql<%E_$aScN6D_VNLo+* z%b0-~_|A`FI9l6DoVc+|OFu|jX|Il?dymf5-~asnClP%^_ewMu(2v$c&4f$UJmNjx zjC9i6(wVVhhb!I{iBN8@Z=Fb*NuQ@_&o-^gIvCxIBAqE`n|tH^5)}fvo`c0)b(;^{ zMb3R8Lyjj>V=@+HohfvH=ysRtHAqa7)KoqVTzp zDfw$A0;&vAJz6CkZUqLFaQjIVW25-4h7Xn4*Qn5041ds4od6XSPXM!G#A9KEibQAd zYd0S*wK>iZ!60}5qpoo04(pdK*XpBV+zwCAy_cn_5!U|9jgqQsv39Y?W54ObmhOlW zy%Es0Q~PaWv?n5RTn}#Z&Tm(p>@R zMrVJEIqCKf1?z|?<_646d2|ecVC$f0 zW3ps4hLX{+;}WsXI$Bufxtnko9Wn=C@g#*#oCSuT8(x_jp6rePuuQe$cPx`s8|QD* zQ?@yQN@FvR_%Szb(sdg%i*?f0$J4-GlGQfk)b%H9hCQ1?w30NIk#x*vslRm4V`s9+ zX~PD>UaK={S*AMTF>X<(!FDq1d@%EAai2-m)5n5wMEh_Yp<3D1o2F~G&VarQNt;b( z{@;_oFg4ta<7e|>u4Yq+(L&<6G`9?ra#;cVHEut^Pqbe_6Wq8@>5gZo7usuRuUtN9|GlT5r=k zXajne-a~y6p*AzZ`}DzcBCOJf6A?a|u!mscDORa@2BGLrnEPQ?gn9ZHbLQxiJQAga$CS;UQs zwoPW8*kzjag%a9#4xJY&Qim)}hc0qHi}Cac=O)wMMV(oB7g55NVTr&>L76b!k6!K{ z2<{0iKa^Vf#{@1kx4HzDwoNR`P$f`5!alRs*a}=CrLV8F70x6>5mWRml?n6GXqsBH zp9tk1(4e|E5HuD%VHQCt<8RSxx{2s;ejMRAj__C04UQEfa`%<}>DNG#r^==L-* zrYp?T73Thi|6nGl?x-}8Tzcv<%oGNuowphH#?n!mnp;#ln(0{dq(73MkT7cU|_fIf!R_d`IC$LYh-yf~GMY(?}@x=K6DsZ_57vTzlwPyS1l6SntB)0M< zsJF3xFEX_+>>k5=O`y>>oF!dmWiF2om;69F0DU&5RmDe1O^)JS{;T*Bk@* xt>9WK_5oal21-@92CHL+dov7ca~LWGL#fca4malN-JGMh@>`FuSKq{blMDSus~p?44X35kM?_~ zf;$5B4o{_$ZkxdT=GGyBg&m!U8Z-zr$LMFqXj6yFg#37;jIcT#h=d})T&B!Pt!Qp^ zFBO@6M1#h`iJ*z#DKiMl8Gn!5=?0?1+1Z3uHsNpCY|umtOO3#T#xl#baXzVYXj0CU=h74OtOQdhwdr33DH#?{rZa&rb2e_+3M&?B~8SY}Q?qu!|!FP>1CuxB^WAi=9d>tDEsyA6;jp>bJdqnz2;k zRgv|CIbbLW0aOBi zS&3UhxffCxX7~wC|6KyhQ!Hw5ABWvnxCZOE2hNI2U};ZUi|sr>q1iV(1AT;Ze0TN!6s4dNl?Pz@ZQ+6CONRpDn*X z&li9Lv___oht81Y%2CY&lkt{LzVCwM?6?#wE*4{mV#$u&wnLy0`&&wn#`xaFKrNd` wB6pR$dyTom`nS}uE9r8r#YBZwkv5H-t40(y|Bd|wZvll_dNoO5kvzll3nN@Iq5uE@ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.class new file mode 100644 index 0000000000000000000000000000000000000000..1be7bb402d4b71eddf62378ceb54f1d6fa1b2f18 GIT binary patch literal 2640 zcmeHJ-ER{)5FdxoG<&@kdbAWBAEta<%0u$P69FVtdUut!fSQ81gBNErB&NIeVtXU< zmmz_4_kMrW>BifXWYbisuJC}wi|zH!jDIt~nX&)*_v2px@Br>qpv2%$YobOXq-wks zebIA^gGdP!< zjfLtqp0?j&84p!g? z21_Hiw~Wzd9)4uywdcy9)o~v?oC2N7SU9N_PmONJnAm$fsP6TUcQA^DA)!=6`$Pg? zC+YfhTIxeu>cybib>7ivxzdg&!bLsq$S}T7iGgv$6!E%ezwYtY|Hm;0h-H#$x8I-e`KT0G!V_4Ph-K?L@S7J}+; zctRNDU`j{hmU7Y!W;pmvxZVq4q@cQ(AsXtL5tw;2MU+~ZOmORcglS%rNAq<&rYErY zyK`yF376Sp9q11|3<3yXX#py5j=Ezl9QBTtGemIH_m-uQ$a#__Z8Up6EDV-I9f|lb zOvBBx>q*Pt_37K(L_--RC-u|SF1m^T?ZI}3!CEc!gfut8Vu(nm+LB#G@h}8k9V2%C z^stLpz+pXn8-F<2}nJ0;YPw3aH@L$Poj7@VOu7lRU< zg*jT4XkCGM8mshmm;RP$4n9Hf$MV7lSo}MeIZxvp$#~6W8W-|)06)Qnd~XF-p$r#k zU4k{ZOml^i$Q4=~HG6f6+0`j#d9KY?Y4V275PENa9WK%A(cGYUBVU)`7X0!biJ)j2 literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.class new file mode 100644 index 0000000000000000000000000000000000000000..86afb6da878a339d60a6c40dcf23b660092bfd9c GIT binary patch literal 1297 zcmb_c&2AGh82sF(O|k@9(pCZ$sM}L=*}ZTgfP@N#N(o4`RO0AtzNRi~du4m0=E;yi zf;*4GLm)n93rT6D=D@+fJ06e6QV(`-0G*Lq8z`xl8LU2)TKeY< zmRs!;29^QSMTk zRJpO98$0Bw&|#-O@;|3q2(tgz)j15@8!osX=NQ!wRi4RIdhUuGEjgy0w?*oW<)#0v zHkXbUdVr@=(*aNE3-v{j`B`+#dxi7i3!%8s!I6@9hBB(ZM&F|VNImalv$~GFy%7{a z4Q@AJ1@17|YIUb+C>M7^TGqOx=WU_-XpaR2fI+isQjwhqE5rD5vf|IAV{p*@A3^Rg zSdnDd1%u62`?@X$+wTkQrNTo!l1`G07vYvCK_wN9?$oBhH4<5YHMq|pUm)DmwKrV- zA{H~)`B&;O<>rdq=!l+riU%^dyK(hRPtqSwG!0~@3OiTcd8vayJ?R`>df33hF3^Lg zUktz!^;Te&>MD&M(=4Ml`UJ2mlBp?H9{D+$y3X{>@B>Bj+A_#W@Oqf={R- z7jFnD%q;@4SrEyDBQtt$>k)zK9gNn2HDq8!^^Q`ps=-;Z`1eDpxQ@df4=5%v5n)Cj zO;n70M*2E!)b|cJ4Y(gNWRfP#e}W07n`qrGPI)^|dE1h?NrRYcig}?CGyVZJh{m5K znCfvfB)V z^b_8w4>!UTyNOLU#l9@=v5ht()cd%%gf9%$X~GreUuvUL9~FZRw4~XhLeo?R{0AX< z(5AboHn#Y(WnrHR*^8fW%CI;Njv_SbC*|T~G0q!Z30YK`<3*9XFeMo~&wQR(MV(?- z4sE_+&&AhragWZWa`rQ^ns3RK&1m^jD@~F;K<{$HM5xON+({QSU=_|U!)drc;C#~? zos1o0!`ZSY=Zc4-@l6`-bG66tFeI?<#XbukF(vFcpRAe#f!)U47d*4aJ0ffpPKCBZ zBCs*+6Si8D?h$AVYh63=CV~2JT!YJmY?nCJ2cgcS5Qi_H3EE2`5=b!%g4`7X=f?Aq z&u-P=9Rfd>qB`qn{||NuI2ecBA2nza`0GFRcCHeIJ$#p&JR7(BJJ>*m+18od&xc(% z=Ing}Kh2PZ*~=dajqRL|3Lt?C&6YQ*a~RNv1b!?L(B#@F^?1?+xMe!{4e0Z)g;mS7 zacRr?dXyNz5Lm$P*afJ-DOkjjgCl#d;k^QNXiUs4!Sb;=YkwNf;B^I8T|=}g-W$Kc z>i6sGzreXaGOSndYApeOuj19BpcT9ZuV-@?;SGG_20mBupG!lminYqHXaUwnA=W0m zg&2q4j1b-~K)6zfaOF7&?-n3jEktO+)j}WMD?o4y5k7$S7(&KY#)DgcaIFAg0X{Yx15FMv!(riOh0xc9SR!^;jc7?>LEvTpj5h*EBlUCyBcqfU=uD#gaiu^Jp zkl@abLX4B5=8ywI9M<-%pWn=zkDtH3eg}Y;@U#vU21m}yBo|62*WyMb(&WjRDXqi4 z&|-o)YCo7ck9m^ML{Z$hq;zPL3zK0TstmU0&oZGW$@|eYO3$ErIp|z4IO+X6^)Z9> z*KhjWa|X2&rImlhVE3SR=WF1t(v#!v;T8EiGbshrWYD?;bgVUY1GZQNF11BxvKve} z$tzSQyfT^>){HXD-4Tx(!zpqu5AIoY2|x=VR1GvOQ`s|?*r9}5-#-Ajt(I0R4#`H_mq_epoWx~%bSS>sUF zeV!V0JV?%kms9R3FZj72oy%-g*EqCHJkQqOaz~ABUSvut&s|xdrDAC3Z7IF6JY@S| zk&b7STYngGTgwCSO{PMGy_e~hZ+Fw^{~_b3dP=_JtFG` yp#m=Y2Adz+_r5^u2U!(p(^?};z(1h1IX_46aL%y?J9E@7Jfa=o34K*UJpK*T^F40> literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.class new file mode 100644 index 0000000000000000000000000000000000000000..d3ffa47f49e4d7ab3ec8e60e1679478f52c7ab2a GIT binary patch literal 723 zcma))O>Yx15QfJkNOOkU^C3+TBsJ=3y z+-G(EICQ>&&J*;$oI48Ax+o1sbtxlvqi+?{{@slY$&(>@g3SN7_brM~4j&3i;9qmwA(x}q$DHazdbHuMBEk2hxS4#)TQO`_L!F-rFK z#@f=SrJ0eRB0DBvFm?*d3-mhWcg1AIzYqfUh6m$^a3cZPgoi=VN1gihlZ03L>$N*A zc*UnY+$f-XrbA$|DPJQr1@H{;&;e}mjh;f2^A=}^n`(9g?JtAuJ9K~6nm)&*0e*Js VN}90&yr{ol)^QhJ^Si-{y+6Pj)C2$k literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.class b/myappvs/bin/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.class new file mode 100644 index 0000000000000000000000000000000000000000..706796e16e1beb65f8653aaffef56726f3c2d00f GIT binary patch literal 2157 zcmc&#ZBJ7%6h0lWm+RzZ3=lC=@ooFEeesj12|+L<0}=)pKX!L@E8N>&+unu!1b>l< zCi>kUWjq}NH#ZmyCMLJ{w!P<^KJ9tV)1SY-eg}ZpP)tFBz?RW|Ib=eXPgskUeHE5B zRjdu)Ws)^`$fd2ejpboEY_lk8nR0BnE+63wpO)~s2%{hclLTfv5dtO~<^9?T_iYN2 z1U7EH0D)<@<^hkC5mxCof%!_+#&yJ|FDKUtU|>Pr(dqpCVnNK)uu3MDZotXICZ~1o2TUVzBj%rC>C-i2aA~+0l)7S2 zauv5m>xvudxEwO;H>t&F{47ER=#7SlR&qj9a)nd6X>2d!u;FpJIVj+|UiP*#qTz#T;`L0$vqw zI-hR~SMhl#O!!<}X&ssp$W*#H!J=BOTmfu71y2dg4FE{NbCi-nB`1*G6~$JA6pto-pvF4$-@f1FXAPfWhdUlA@RtNcoRU;CxO@ zF8~Kr!uS`-{WG}G%0$l4Z4*&oF literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/main/resources/application.properties b/myappvs/bin/src/main/resources/application.properties new file mode 100644 index 0000000..0a943d1 --- /dev/null +++ b/myappvs/bin/src/main/resources/application.properties @@ -0,0 +1,27 @@ +spring.application.name=myappvs +server.port=8585 + + +#Database Configuration: mysql +#spring.datasource.name=CourseManagementDatabase +#spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/CourseManagementDatabase?allowPublicKeyRetrieval=true&useSSL=false&createDatabaseIfNotExist=true +#spring.datasource.username=${MYSQL_USER:root} +#spring.datasource.password=${MYSQL_PASSWORD:password} +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=false;MODE=PostgreSQL +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.show-sql=true +security.basic.enabled=false +spring.jpa.hibernate.ddl-auto=create-drop +spring.defer-datasource-initialization=true +spring.jpa.properties.hibernate.globally_quoted_identifiers=true +spring.h2.console.enabled=true +spring.sql.init.mode=always +spring.main.allow-bean-definition-overriding=true + + +spring.data.mongodb.uri=mongodb+srv://dbUser:Password%40123@coursemanagement.pf6hifa.mongodb.net/?retryWrites=true&w=majority&appName=CourseManagement +spring.data.mongodb.database=CourseManagement diff --git a/myappvs/bin/src/main/resources/import.sql b/myappvs/bin/src/main/resources/import.sql new file mode 100644 index 0000000..3480131 --- /dev/null +++ b/myappvs/bin/src/main/resources/import.sql @@ -0,0 +1,55 @@ +-- Insert student data +INSERT INTO students(student_id_number, name, email_id, number) VALUES (123456789, 'ABC', 'ABC@example.com', '2246387532'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (987654321, 'CDE', 'CDE@example.com', '2257865437'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (114365567, 'FGH', 'FGH@example.com', '2235679043'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (978563412, 'IJK', 'IJK@example.com', '2247864538'); + + + +-- Insert user data +INSERT INTO users(emailId, password) VALUES ('ABC@example.com', 'ABC@123'); +INSERT INTO Users(emailId, password) VALUES ('CDE@example.com', 'CDE@123'); +INSERT INTO Users(emailId, password) VALUES ('FGH@example.com', 'FGH@123'); +INSERT INTO Users(emailId, password) VALUES ('IJK@example.com', 'IJK@123'); + +-- Insert advisor data +INSERT INTO advisors(name, email) VALUES ('alice', 'alice@test.com') +INSERT INTO advisors(name, email) VALUES ('bob', 'bob@test.com') +INSERT INTO advisors(name, email) VALUES ('charlie', 'charlie@test.com') + + +-- Insert into Enrollment table +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789, 101); +INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); + +-- Insert into instructor table +<<<<<<< HEAD +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (1, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (2, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); +INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (3, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); +======= +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (201, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (202, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (203, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); +-- Insert into Catalog table +INSERT INTO course_catalog(course_id, course_name, course_description, instructor_id, course_credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 201, 3); +INSERT INTO course_catalog(course_id, course_name, course_description, instructor_id, course_credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 202, 4); + +-- Insert into Course Description table +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'Introduction to Programming', 'Lecture Slides'); +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'Advanced Database Management', 'Textbook, Exercises'); +--INSERT INTO course_description(courseDescriptionId, courseId, instructorId, room, date, time, meeting_info, materials) VALUES (3, 103, 203, 'Room C', '2024-05-15', '11:00:00', 'Machine Learning Fundamentals', 'Online Resources'); + +-- Insert into Student Account table +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (1, 123456789, 100.00); +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (2, 987654321, 200.00); +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (3, 114365567, 150.00); +>>>>>>> f1af734651c4217e6638d28f4dea30cb11ce7aee + +-- Insert initial data into the Equipment table +INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (1, 'Laptop 1', 'Laptop', 'Available'); +INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (2, 'Projector 1', 'Projector', 'Rented'); + +-- Insert initial data into the Rentals table +INSERT INTO rentals (allocation_id, class_id, resource_id, allocation_date, return_date) VALUES (1, 101, 2, '2024-04-01', '2024-04-10'); \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/js/script.js b/myappvs/bin/src/main/resources/js/script.js new file mode 100644 index 0000000..5435348 --- /dev/null +++ b/myappvs/bin/src/main/resources/js/script.js @@ -0,0 +1,43 @@ +document.getElementById('signupForm').addEventListener('submit', function (e) { + e.preventDefault(); + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + fetch('/api/v1/auth/signup', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email: email, password: password }), + }) + .then(response => response.json()) + .then(data => { + alert('Signup successful!'); + window.location.href = '/login.html'; + }) + .catch(error => { + alert('Error during signup: ' + error.message); + }); +}); + +document.getElementById('loginForm').addEventListener('submit', function (e) { + e.preventDefault(); + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + fetch('/api/v1/auth/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email: email, password: password }), + }) + .then(response => response.json()) + .then(data => { + alert('Login successful!'); + // Handle the token, redirect or set up user session here + }) + .catch(error => { + alert('Error during login: ' + error.message); + }); +}); diff --git a/myappvs/bin/src/main/resources/schema.sql b/myappvs/bin/src/main/resources/schema.sql new file mode 100644 index 0000000..d542675 --- /dev/null +++ b/myappvs/bin/src/main/resources/schema.sql @@ -0,0 +1,50 @@ +CREATE TABLE IF NOT EXISTS Students ( + studentIdNumber INT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + emailId VARCHAR(255) NOT NULL, + number VARCHAR(20) NOT NULL +); +-- Create Users table if it doesn't exist +CREATE TABLE IF NOT EXISTS Users ( + emailId VARCHAR(255) PRIMARY KEY, + password VARCHAR(255) NOT NULL +); + +--CREATE TABLE IF NOT EXISTS Course_Catalog ( +-- courseId INT PRIMARY KEY, +-- courseName VARCHAR(100) NOT NULL, +-- Course_Description VARCHAR(255) NOT NULL, +-- Instructor_ID INT NOT NULL, +-- Course_Credits INT +--); +-- +--CREATE TABLE IF NOT EXISTS Enrollment ( +-- Enrollment_Id INT PRIMARY KEY, +-- student_id INT NOT NULL, +-- courseId INT NOT NULL +--); +-- +--CREATE TABLE IF NOT EXISTS Course_Description ( +-- courseDescriptionId INT PRIMARY KEY, +-- courseId INT, +-- instructorId INT, +-- room VARCHAR(255), +-- date DATE, +-- time TIME, +-- meetingInfo VARCHAR(255), +-- materials VARCHAR(255) +--); +-- +--CREATE TABLE IF NOT EXISTS Instructor ( +-- instructorId INT PRIMARY KEY, +-- instructorName VARCHAR(255), +-- instructorDescription VARCHAR(255), +-- meetingHours TIME, +-- instructorCabinLocation VARCHAR(255) +--); +-- +--CREATE TABLE IF NOT EXISTS Student_Accounts ( +-- studentAccountsId INT PRIMARY KEY, +-- student_id INT, +-- balance DOUBLE +--); diff --git a/myappvs/bin/src/main/resources/static/courseDescription.html b/myappvs/bin/src/main/resources/static/courseDescription.html new file mode 100644 index 0000000..c35e2c5 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/courseDescription.html @@ -0,0 +1,57 @@ + + + + + + Course Description + + + +

    + + + diff --git a/myappvs/bin/src/main/resources/static/css/courseDescription.css b/myappvs/bin/src/main/resources/static/css/courseDescription.css new file mode 100644 index 0000000..cc0400c --- /dev/null +++ b/myappvs/bin/src/main/resources/static/css/courseDescription.css @@ -0,0 +1,31 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + padding: 20px; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +h1 { + text-align: center; +} + +#courseDetails { + margin-top: 20px; +} + +p { + margin-bottom: 10px; +} + +strong { + font-weight: bold; +} diff --git a/myappvs/bin/src/main/resources/static/css/instructor.css b/myappvs/bin/src/main/resources/static/css/instructor.css new file mode 100644 index 0000000..d95c130 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/css/instructor.css @@ -0,0 +1,24 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1, h2 { + color: #333; +} + +p { + color: #666; +} + diff --git a/myappvs/bin/src/main/resources/static/css/studentAccounts.css b/myappvs/bin/src/main/resources/static/css/studentAccounts.css new file mode 100644 index 0000000..14fe1a6 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/css/studentAccounts.css @@ -0,0 +1,43 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1 { + color: #333; +} + +p { + color: #666; + margin-bottom: 10px; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +table, th, td { + border: 1px solid black; +} + +th, td { + padding: 8px; + text-align: left; +} + +th { + background-color: #f4f4f4; +} diff --git a/myappvs/bin/src/main/resources/static/css/style.css b/myappvs/bin/src/main/resources/static/css/style.css new file mode 100644 index 0000000..75fea3f --- /dev/null +++ b/myappvs/bin/src/main/resources/static/css/style.css @@ -0,0 +1,53 @@ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f4; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + background: #fff; + padding: 20px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + border-radius: 5px; + text-align: center; +} + +h1 { + margin-bottom: 20px; +} + +form { + display: flex; + flex-direction: column; +} + +label { + margin: 10px 0 5px; +} + +input { + padding: 10px; + margin-bottom: 20px; + border: 1px solid #ccc; + border-radius: 3px; +} + +.button, button { + padding: 10px; + border: none; + background: #007bff; + color: white; + border-radius: 3px; + cursor: pointer; + text-decoration: none; + display: inline-block; + margin: 10px; +} + +.button:hover, button:hover { + background: #0056b3; +} diff --git a/myappvs/bin/src/main/resources/static/events.html b/myappvs/bin/src/main/resources/static/events.html new file mode 100644 index 0000000..2b0cbe0 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/events.html @@ -0,0 +1,184 @@ + + + + Event Calendar + + + + + + + +
    +

    Event Calendar

    + +
    +
    +
    +
    +

    Events

    +
      +

      Save New Event

      + + +
      + + +
      + + +
      + +
      +
      + + \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/static/home.html b/myappvs/bin/src/main/resources/static/home.html new file mode 100644 index 0000000..7581284 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/home.html @@ -0,0 +1,75 @@ + + + + + + Home Page + + + +
      +

      Welcome to the Home Page

      + + + +
      + +
      + + +
      + + + + diff --git a/myappvs/bin/src/main/resources/static/index.html b/myappvs/bin/src/main/resources/static/index.html new file mode 100644 index 0000000..8b39808 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/index.html @@ -0,0 +1,18 @@ + + + + + + Course Management System + + + +
      + + \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/static/instructor.html b/myappvs/bin/src/main/resources/static/instructor.html new file mode 100644 index 0000000..d5af4e2 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/instructor.html @@ -0,0 +1,47 @@ + + + + + + Instructor Details + + + +
      +

      Instructor Details

      +
      + +
      +
      + + + diff --git a/myappvs/bin/src/main/resources/static/login.html b/myappvs/bin/src/main/resources/static/login.html new file mode 100644 index 0000000..e1ed2a3 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/login.html @@ -0,0 +1,62 @@ + + + + + + Login Page + + +

      Login

      +
      +
      + + +
      +
      + + +
      + +
      + + +

      Don't have an account? Sign Up

      + + + + \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/static/profile.html b/myappvs/bin/src/main/resources/static/profile.html new file mode 100644 index 0000000..60f5e81 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/profile.html @@ -0,0 +1,266 @@ + + + + + + User Profile + + + +
      +

      User Profile

      +

      Email:

      +

      Name:

      +

      Student ID:

      +

      Phone Number:

      + + + + +
      + + + + + + + + + + diff --git a/myappvs/bin/src/main/resources/static/rentals.html b/myappvs/bin/src/main/resources/static/rentals.html new file mode 100644 index 0000000..9d93753 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/rentals.html @@ -0,0 +1,30 @@ + + + + + + Inventory + + + +

      Inventory List

      + + + + + + + + + + + + + + + + + +
      IDNameTypeStatus
      1ProjectorAudio-VisualAvailable
      + + \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/static/signup.html b/myappvs/bin/src/main/resources/static/signup.html new file mode 100644 index 0000000..b48c3d6 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/signup.html @@ -0,0 +1,111 @@ + + + + + + Signup Page + + + +
      +

      Signup

      +
      +
      + + +
      +
      + + + +
      +
      + + +
      +
      + + +
      +
      + + + +
      + +
      +
      + + + + \ No newline at end of file diff --git a/myappvs/bin/src/main/resources/static/studentAccounts.html b/myappvs/bin/src/main/resources/static/studentAccounts.html new file mode 100644 index 0000000..dc8a887 --- /dev/null +++ b/myappvs/bin/src/main/resources/static/studentAccounts.html @@ -0,0 +1,113 @@ + + + + + + Student Account Details + + + + +
      +

      Student Account Details

      +
      + +
      +
      + + + diff --git a/myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/MyappvsApplicationTests.class b/myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/MyappvsApplicationTests.class new file mode 100644 index 0000000000000000000000000000000000000000..1dd86a0350f837d291d8cef4b4568e137862992e GIT binary patch literal 1126 zcmb_b%We}f6ulnOJcd9@puEb$>MGsLY*-OMDg{K*1SAqFv2&Pv)ZEFUjX0{Y_}jF@WPrjcHFx7m@QbGsv_Q3rLla(B%ASq zOE+Fx$BVdFGOZUj9@Xof*11TT6G~3-yKO;(z-C2~GdYW2Pmg)(2s9rGDcoZMmj=6s z1RDD)<1OeA=&i8Nj8UcymkIg!RvKqjWW*?VL&1ukjU$cE@`GI} zEG=cmkAy`3j_?Kdtjv*mg^uW`L}N9IGU)?S6Q2R0{BsqB(1t5r*nq19wg$;6xnt+u z8v5k-5|r|)ET-H{80M2eKT#>m51A4Ee0te%b72X*O#WAG4heM89mh{xqF9F9+iyzg zM8OZ_LRf*O_k7B#TEo|7;{6@A;TD0X|E|cYAkPgBfpCmnmGbApdwuUOJyew(c2V+s zDGY%E_78R~K!9Tdns{#E?mpfUT*J@Me%B8_K=*5f>EY}#fMXNqZjFL#(8m+Nb$kur e2JSp+3)er{ZmwbLtYHh_HvSLb&M&^Z06zd}b57X+ literal 0 HcmV?d00001 diff --git a/myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/advisor/AdvisorRepositoryTest.class b/myappvs/bin/src/test/java/com/CourseManagementSystem/myappvs/advisor/AdvisorRepositoryTest.class new file mode 100644 index 0000000000000000000000000000000000000000..b1e11f9ce42215e1ad8043d77cfb2f82fdc6bf3b GIT binary patch literal 2567 zcmc&$O>Yx15FMw1B-=pSl=9K?;r7&Cb}yU=Ae9QFO51{(P>G|n>!vQd_R97K^2?Aw zf;<0!KZ6)2p(#pGHWCqsc-GGI^UU~p?C(E6e+7VNuw8)?fn%eiz;a`Q3)W*nq|)F( z<=XHgCRvxKT-sLOSe^!HpJiFk1T5|eqja!8v?n}MMp&i$ZDgrHnZW9RDq*r4yzX4^ z$P!o^%^IT#tcMd6O#)jdxwInXhZ2_&orLd8sVuWXNkd>c+|RB0AT*B=d;O`9!agUk zw7YjopnRZWUV$3~R>mH@)LQ8(tdR1Lw^DPXk{*vK#+iv^z)CZ%aGBIRp}+WBWglzsE4k#W`oTGA(5Hg;Lh(Z3;QHiZW{Z8TV?3X_kmc zSZeZ&Yut5dtj;4;D;+9xcaI7~a~bn9A#sP!@E`nUd4kkqv`>$6Tx^J9Z}98DuxP`oF=TRiJdosdGU*Lp;(5-b*dP?7;0YDqIeJLuvUi} zGze_$hU4PbvhJ`nU2$9qQQ*gU+Tps*u-*}9geqdmDbvFBM}uX1F0jtN3IFZAfW^A% z3Z9Dy>vrfA-K@eUDIFB4%Ck>;F=ZD+ElzwzH?+1m7Z#(`#jqAl7Xhz@kCuqP5>D8g z6V=AaZE)A(<0Sm^25DB{5x!3*rVywf31jg1wDBr2unqXkz=soo5?q7pXe-!rwu-id zwgw)y%h-F2NP^b;0`+%|o1b9y+W@nUt()OkZed#=qF@7V5612wL+O(DE{;vI-J8PJ Yn8LOMTR6W2_b>S#V4vczjH^EU1#ost8~^|S literal 0 HcmV?d00001 diff --git a/myappvs/pom.xml b/myappvs/pom.xml index 8607f33..db44942 100644 --- a/myappvs/pom.xml +++ b/myappvs/pom.xml @@ -21,7 +21,11 @@ org.springframework.boot spring-boot-starter-web - + + org.apache.commons + commons-lang3 + 3.12.0 + org.projectlombok lombok @@ -69,6 +73,12 @@ 0.11.5 + + io.jsonwebtoken + jjwt + 0.9.1 + + net.logstash.logback logstash-logback-encoder @@ -91,8 +101,38 @@ postgresql 9.4-1201-jdbc41 + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.security + spring-security-config + + + javax.servlet + servlet-api + 2.4 + provided + + + + org.springframework.boot + spring-boot-starter-data-mongodb + - + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.1.0 + + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.java index df7aa79..a836dc6 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/CourseApp.java @@ -2,12 +2,36 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; import org.springframework.context.annotation.Bean; -//import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.context.annotation.FilterType; +import com.CourseManagementSystem.myappvs.event.Eventrepo; -@SpringBootApplication +@SpringBootApplication(scanBasePackages = { + "com.CourseManagementSystem.myappvs.event.EventController", + "com.CourseManagementSystem.myappvs.event.Eventrepository", + "com.CourseManagementSystem.myappvs.discussion.DiscussionRepository", + "com.CourseManagementSystem.myappvs.discussion.DiscussionController", + "com.CourseManagementSystem.myappvs.Notes.StudentNoteController", + "com.CourseManagementSystem.myappvs.Notes.StudentNoteRepository" +}) +@EnableMongoRepositories(basePackages = { + "com.CourseManagementSystem.myappvs.event", + "com.CourseManagementSystem.myappvs.discussion", "com.CourseManagementSystem.myappvs.Notes" +}) +@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { + com.CourseManagementSystem.myappvs.discussion.DiscussionRepository.class, + com.CourseManagementSystem.myappvs.event.Eventrepo.class,com.CourseManagementSystem.myappvs.Notes.StudentNoteRepository.class })) +//(type = FilterType.ASSIGNABLE_TYPE, value = Eventrepo.class)) + +@ComponentScan("com.CourseManagementSystem.myappvs") public class CourseApp { public static void main(String[] args) { @@ -15,13 +39,4 @@ public static void main(String[] args) { System.out.println("Started..."); } - @Bean - public WebMvcConfigurer corsConfigurer() { - return new WebMvcConfigurer() { - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**").allowedMethods("*").allowedOrigins("*"); - } - }; - } - } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNote.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNote.java new file mode 100644 index 0000000..86ab1cb --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNote.java @@ -0,0 +1,24 @@ +package com.CourseManagementSystem.myappvs.Notes; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Data +@Getter +@Setter +@Document(collection = "student_notes") +public class StudentNote { + + @Id + private String id; + private String studentEmail; + private String courseId; + private String noteTitle; + private String noteContent; + + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteController.java new file mode 100644 index 0000000..31dbdbc --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteController.java @@ -0,0 +1,56 @@ +package com.CourseManagementSystem.myappvs.Notes; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +import java.util.List; + +@RestController +@RequestMapping("/studentNotes") +public class StudentNoteController { + + @Autowired + private StudentNoteService service; + +// @Autowired +// private Studentrepository sturepo; + + @GetMapping + public List getNotesByStudentEmail() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + + return service.getNotesByStudentEmail(emailId); + } + return null; + } + + @GetMapping("/{studentEmail}/{courseId}") + public List getNotesByStudentEmailAndCourseId(@PathVariable String studentEmail, @PathVariable String courseId) { + return service.getNotesByStudentEmailAndCourseId(studentEmail, courseId); + } + + @PostMapping + public StudentNote addOrUpdateStudentNote(@RequestBody StudentNote studentNote) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + String emailId = authentication.getName(); + studentNote.setStudentEmail(emailId); + } + return service.addOrUpdateStudentNote(studentNote); + } + + @DeleteMapping("/{id}") + public void deleteStudentNoteById(@PathVariable String id) { + service.deleteStudentNoteById(id); + } +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteRepository.java new file mode 100644 index 0000000..2eda671 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteRepository.java @@ -0,0 +1,9 @@ +package com.CourseManagementSystem.myappvs.Notes; + +import org.springframework.data.mongodb.repository.MongoRepository; +import java.util.List; + +public interface StudentNoteRepository extends MongoRepository { + List findByStudentEmail(String studentEmail); + List findByStudentEmailAndCourseId(String studentEmail, String courseId); +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteService.java new file mode 100644 index 0000000..4e81e57 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/StudentNoteService.java @@ -0,0 +1,29 @@ + package com.CourseManagementSystem.myappvs.Notes; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class StudentNoteService { + + @Autowired + private StudentNoteRepository repository; + + public List getNotesByStudentEmail(String studentEmail) { + return repository.findByStudentEmail(studentEmail); + } + + public List getNotesByStudentEmailAndCourseId(String studentEmail, String courseId) { + return repository.findByStudentEmailAndCourseId(studentEmail, courseId); + } + + public StudentNote addOrUpdateStudentNote(StudentNote studentNote) { + return repository.save(studentNote); + } + + public void deleteStudentNoteById(String id) { + repository.deleteById(id); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/package-info.java new file mode 100644 index 0000000..d1e7975 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/Notes/package-info.java @@ -0,0 +1,24 @@ +/** + * This Package consists of the Student Notes section which uses MongoDB. The main functionality of this section is that it enables + * the students to create course specific notes and allows them to be managed. The various parts of this section are + * + * + * 1.StudentNote.java + * This entity represents the document storing the note Information such as Student emailId, CourseID Note Title, Note Description. + * + * 2.Catalog Controller + * The Controller class deals with GET, POST, DELETE Mapping of requests in this scenario. + * + * 3.Course Service + * THis is the service class where I make use of the repository to write the logic to fetch the data and return it. + * + * 4.Course Repository + * This is the Interface which extends MongoRepository which is used to retrieve the Students Notes from the online Mongo Atlas configured in the application.properties + * + * 5. studentNotes.html + * The HTML file contains front end code to send requests and to handle responses. + * + * + * @author Puneeth Talluri + */ +package com.CourseManagementSystem.myappvs.Notes; \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.java index 7051d77..231f3a4 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/Advisor.java @@ -32,6 +32,6 @@ public class Advisor { private String email; @Exclude - @OneToMany(mappedBy = "advsior",fetch = FetchType.LAZY) + @OneToMany(mappedBy = "advisor",fetch = FetchType.LAZY) private List appointments; } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorController.java new file mode 100644 index 0000000..b28c364 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/advsior/AdvisorController.java @@ -0,0 +1,26 @@ +package com.CourseManagementSystem.myappvs.advsior; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.CourseManagementSystem.myappvs.appointment.Appointment; +import com.CourseManagementSystem.myappvs.appointment.AppointmentService; + +@RestController +@RequestMapping("/advisors") +public class AdvisorController { + + @Autowired + private AppointmentService service; + + @GetMapping + public List getAppointments(@RequestParam(name = "advisorId", required = true, defaultValue = "none") String advisorId){ + Long id = Long.parseLong(advisorId); + return service.listByAdvisor(id); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.java index 11e0f1f..20b7eb2 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/Appointment.java @@ -39,7 +39,7 @@ public class Appointment { @Exclude @ManyToOne @JoinColumn(name = "advisor_id", nullable = false) - private Advisor advsior; + private Advisor advisor; @Temporal(TemporalType.DATE) private LocalDate appointmentDate; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentController.java new file mode 100644 index 0000000..eb5a04f --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentController.java @@ -0,0 +1,38 @@ +package com.CourseManagementSystem.myappvs.appointment; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +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.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.CourseManagementSystem.myappvs.student.Student; + +@RestController +@RequestMapping("/appointments") +public class AppointmentController { + + @Autowired + private AppointmentService service; + + @GetMapping + public List getAppointments(@RequestParam Student Student) { + return service.listByStudent(Student); + } + + @PostMapping + public Appointment save(@RequestBody Appointment appointment) { + return service.save(appointment); + } + + @DeleteMapping("/{id}") + public void delete(@PathVariable Long id) { + service.delete(id); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.java index 54899a2..5903cbb 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentRepository.java @@ -9,8 +9,11 @@ public interface AppointmentRepository extends CrudRepository { - List findAllByAdvsior(Advisor advsior); + List findAllByAdvisor(Advisor advisor); List findAllByStudent(Student student); + // List findByStudentId(long studentId); + + List findByAdvisorId(long id); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentService.java new file mode 100644 index 0000000..566ffe2 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/appointment/AppointmentService.java @@ -0,0 +1,35 @@ +package com.CourseManagementSystem.myappvs.appointment; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.CourseManagementSystem.myappvs.student.Student; + + +@Service +public class AppointmentService { + + @Autowired + private AppointmentRepository appointmentRepo; + + public List listByStudent(Student student) { + List appointments = appointmentRepo.findAllByStudent(student); + return appointments; + } + + public List listByAdvisor(Long advisorId) { + List appointments = appointmentRepo.findByAdvisorId(advisorId); + return appointments; + } + + public Appointment save(Appointment appointment) { + appointmentRepo.save(appointment); + return appointment; + } + + public void delete(long id) { + appointmentRepo.deleteById(id); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java index 8a8a3ae..e418450 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Catalog.java @@ -10,15 +10,13 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; import lombok.ToString.Exclude; @Data @Entity @AllArgsConstructor +@NoArgsConstructor @Getter @Setter @Table(name="Course_Catalog") diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogController.java new file mode 100644 index 0000000..20ca80f --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogController.java @@ -0,0 +1,41 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +@RestController +public class CatalogController { + + @Autowired + private CatalogService service; + + @Autowired + private Studentrepository stuRepo; + + + @GetMapping("/getCourses") + private List displayCourses(){ + return service.getAllCourses(); + } + + @GetMapping("/getName") + public String getStudentName() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + String emailId = authentication.getName(); + return stuRepo.findNameByEmailId(emailId); + } + return "User"; + } + + + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRepository.java new file mode 100644 index 0000000..87503bd --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogRepository.java @@ -0,0 +1,7 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CatalogRepository extends JpaRepository { + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogService.java new file mode 100644 index 0000000..d62a220 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CatalogService.java @@ -0,0 +1,19 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CatalogService { + + @Autowired + private CatalogRepository repo; + + public List getAllCourses(){ + System.out.println(repo.count()); + return repo.findAll(); + } + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CourseEnrollmentRequest.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CourseEnrollmentRequest.java new file mode 100644 index 0000000..86670e2 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/CourseEnrollmentRequest.java @@ -0,0 +1,14 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +public class CourseEnrollmentRequest { + private String courseId; + + // Getters and Setters + public String getCourseId() { + return courseId; + } + + public void setCourseId(String courseId) { + this.courseId = courseId; + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Enrollment.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Enrollment.java index 4245e50..fa1a6f6 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Enrollment.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/Enrollment.java @@ -1,7 +1,7 @@ package com.CourseManagementSystem.myappvs.courseCatalog; import com.CourseManagementSystem.myappvs.student.Student; - +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -12,31 +12,32 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; import lombok.ToString.Exclude; @Data @Entity @AllArgsConstructor +@NoArgsConstructor @Getter +@ToString @Setter public class Enrollment { - + @Id @Column(unique = true, name="Enrollment_Id") @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - + private Long id; + @Exclude @ManyToOne @JoinColumn(name = "student_id", referencedColumnName = "studentIdNumber") private Student student; - + @Exclude @ManyToOne @JoinColumn(name = "courseId") private Catalog catalog; - - - } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentController.java new file mode 100644 index 0000000..1448879 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentController.java @@ -0,0 +1,86 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.DeleteMapping; +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.RequestMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import com.CourseManagementSystem.myappvs.student.Student; + +@RestController +@RequestMapping("enroll") +public class EnrollmentController { + + @Autowired + private EnrollmentService enrollmentService; + + @PostMapping("/enrollCourse") + public ResponseEntity> enrollStudentInCourse(@RequestBody CourseEnrollmentRequest request) { + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + System.out.println("Email id of student is :" + emailId); + System.out.println("Enrollment Controller triggered"); + + Long id = Long.parseLong(request.getCourseId()); + + enrollmentService.enrollStudent(emailId, id); + return ResponseEntity.ok().build(); + } else { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + } + + @GetMapping("/test3") + public ResponseEntity testEndpoint() { + return ResponseEntity.ok("Endpoint is working"); + } + + @GetMapping("/showEnrollments") + public List showEnrollments() { + // Retrieve authentication information from SecurityContextHolder + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + System.out.println("email id the user is "+emailId); + + List currentEnrollments=enrollmentService.getStudentEnrollment(emailId); + return currentEnrollments; + + + } + return null; + } + + @DeleteMapping("/deleteEnrollment/{id}") + public ResponseEntity deleteEnrollment(@PathVariable Long id) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + enrollmentService.deleteEnrollmentById(id); + return ResponseEntity.ok().build(); + } else { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.java index 5eb6442..0b4f5f6 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentRepository.java @@ -1,7 +1,13 @@ package com.CourseManagementSystem.myappvs.courseCatalog; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; public interface EnrollmentRepository extends JpaRepository{ + Optional findByStudent_StudentIdNumberAndCatalog_CourseId(Long studentIdNumber, Long courseId); + + List findByStudent_StudentIdNumber(Long studentIdNumber); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java new file mode 100644 index 0000000..7a37d0b --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java @@ -0,0 +1,82 @@ +package com.CourseManagementSystem.myappvs.courseCatalog; + +import java.util.List; +import java.util.Optional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; +import jakarta.persistence.EntityManager; + +@Service +public class EnrollmentService { + + @Autowired + private Studentrepository studentRepo; + + @Autowired + private EnrollmentRepository repo; + + @Autowired + private CatalogRepository catalogRepo; + + @Autowired + private EntityManager entityManager; + + @Transactional + public void enrollStudent(String email, Long courseId) { + entityManager.clear(); + Optional op1 = studentRepo.findByEmailId(email); + Student student = op1.get(); + System.out.println(student); + + Optional opt2 = catalogRepo.findById(courseId); + Catalog course = opt2.get(); + System.out.println(course); + + boolean enrollmentExists = repo.findByStudent_StudentIdNumberAndCatalog_CourseId(student.getStudentIdNumber(), course.getCourseId()).isPresent(); + if (enrollmentExists) { + throw new RuntimeException("Enrollment already exists"); + } + + Enrollment enrollment = new Enrollment(); + enrollment.setStudent(student); + enrollment.setCatalog(course); + enrollment.toString(); + + System.out.println(enrollment); + repo.save(enrollment); + } + + public Long getStudentId(String email) { + Optional s = studentRepo.findByEmailId(email); + Student x = s.get(); + long id = x.getStudentIdNumber(); + return id; + } + + public void addSudentEnrollement(Enrollment current) { + repo.save(current); + } + + public List getAllEnrollments() { + return repo.findAll(); + } + + public List getStudentEnrollment(String email) { + Long id = getStudentId(email); + return repo.findByStudent_StudentIdNumber(id); + } + + @Transactional + public void deleteEnrollmentById(Long id) { + Optional enrollmentOpt = repo.findById(id); + if (enrollmentOpt.isPresent()) { + Enrollment enrollment = enrollmentOpt.get(); + enrollment.setStudent(null); // Break relationship + enrollment.setCatalog(null); // Break relationship + repo.delete(enrollment); + } + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.java index 3653d78..bc7cc0a 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/package-info.java @@ -1,12 +1,38 @@ /** - * This Package consists of Two Entities : a) Catalog b)Enrollment - * Catalog Entity: + * This Package consists of Two Entities : a) Catalog + * 1.Catalog Entity: * This entity represents the table storing all the Courses and its respective information to be displayed to students for them to be able to enroll. * - * Enrollment Entity: + * 2.Catalog Controller + * This is the controller class which is responsible to get the requests and display the Courses in the courseCatalog page. It displays a table and allows enrollment for each course. + * + * 3.Course Service + * This is the service class where I make use of the repository to write the logic to fetch the data and return it from the H2 Database. + * + * 4.Course Repository + * This is the JPA Repository class which is used to retrieve the course_catalog table information from the H2 DataBase. + * + * 5. courseCatalog.html + * This is the HTML file containing HTML, CSS, Javascript code to send appropriate requests and to handle the responses. + * + * b)Enrollment + * 1.Enrollment Entity: * This represents the table storing all the enrollments per student for each enrolled course + * + * 2.Enrollment Repository + * This is the JPA Repository class responsible to communicate with enrollment table in the Database. + * + * 3.Enrollment Service + * Service class the fetch student, catalog object and insert an enrollment record into the enrollment table after student enrolls particular course + * + * 4.Enrollment Controller + * Receives the request to post the enrollment of a student. *
    • One to one relationship between student and user. * + * 5. enrollments.html + * This is the HTML file containing HTML, CSS, Javascript code to send appropriate requests and to handle the responses. This is a completely dynamic page. + * + * * @author Puneeth Talluri */ package com.CourseManagementSystem.myappvs.courseCatalog; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java index feaf9a3..43ddb78 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescription.java @@ -3,105 +3,45 @@ import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; import com.CourseManagementSystem.myappvs.instructor.Instructor; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.ToString.Exclude; import java.sql.Time; import java.util.Date; @Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor @Table(name = "Course_Description") public class CourseDescription { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(unique = true) - private long courseDescriptionId; + private Long courseDescriptionId; @Exclude @OneToOne - @JoinColumn(name = "course_id", referencedColumnName = "courseId") + @JoinColumn(name = "courseId", referencedColumnName = "courseId") private Catalog courseId; @Exclude @ManyToOne @JoinColumn(name = "instructorId", referencedColumnName = "instructorId") private Instructor instructorId; - + @Column(name = "room", nullable = false) private String room; - + @Column(name = "date", nullable = false) private Date date; - + @Column(name = "time", nullable = false) private Time time; - + @Column(name = "meeting_info", nullable = false) private String meetingInfo; - + @Column(name = "materials", nullable = false) private String materials; - public CourseDescription() { - // Default constructor required by Hibernate - } - - public CourseDescription(long courseDescriptionId, Instructor instructorId, String room, Date date, Time time, String meetingInfo, String materials){ - this.courseDescriptionId = courseDescriptionId; - this.instructorId = instructorId; - this.room = room; - this.date = date; - this.time = time; - this.meetingInfo = meetingInfo; - this.materials = materials; - } - - public long getCourseId() { return courseDescriptionId; } - - public void setCourseId(long courseId) { - this.courseDescriptionId = courseId; - } - - public Date getDate() { - return date; - } - - public Instructor getInstructorId() { - return instructorId; - } - - public String getMaterials() { - return materials; - } - - public String getRoom() { - return room; - } - - public String getMeetingInfo() { - return meetingInfo; - } - - public Time getTime() { - return time; - } - - public void setDate(Date date) { - this.date = date; - } - - public void setInstructorId(Instructor instructorId) { - this.instructorId = instructorId; - } - - public void setMaterials(String materials) { - this.materials = materials; - } - - public void setMeetingInfo(String meetingInfo) { - this.meetingInfo = meetingInfo; - } - - public void setRoom(String room) { - this.room = room; - } - public void setTime(Time time) { - this.time = time; - } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java index 3e43a88..af60297 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionController.java @@ -1,32 +1,48 @@ package com.CourseManagementSystem.myappvs.courseDescription; -import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; -import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController +@RequestMapping("/api/coursedescription") public class CourseDescriptionController { - @Autowired private CourseDescriptionService courseDescriptionService; - public CourseDescriptionController(CourseDescriptionService courseDescriptionService){ + public CourseDescriptionController(CourseDescriptionService courseDescriptionService) { this.courseDescriptionService = courseDescriptionService; } + @GetMapping("/testCD") + public ResponseEntity testEndpoint() { + return ResponseEntity.ok("CD Endpoint is working"); + } + //Get CourseDetails Rest Api + @GetMapping("/{id}") + public ResponseEntity getCourseDescriptionbyId(@PathVariable Long id){ + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + -// @GetMapping("/course-descriptions/{id}") -// public ResponseEntity getCourseDescriptionById(@PathVariable Long id)throws Exception { -// CourseDescription courseDescription = courseDescriptionService.getCourseDescriptionById(id); -// if (courseDescription != null) { -// return new ResponseEntity(courseDescription, HttpStatus.OK); -// } else { -// return new ResponseEntity(HttpStatus.NOT_FOUND); -// } - // } + try { + CourseDescriptionDto courseDescriptionDto = courseDescriptionService.getCourseDetail(id); + return ResponseEntity.ok(courseDescriptionDto); + } catch (RuntimeException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // Return 404 Not Found + } + + } + return null; + +} } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionDto.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionDto.java new file mode 100644 index 0000000..8769bb7 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionDto.java @@ -0,0 +1,28 @@ +package com.CourseManagementSystem.myappvs.courseDescription; + +import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; +import com.CourseManagementSystem.myappvs.instructor.Instructor; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Time; +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CourseDescriptionDto { + private Long courseDescriptionId; + private Catalog courseId; + private Instructor instructorId; + private String room; + + private Date date; + + private Time time; + + private String meetingInfo; + + private String materials; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.java new file mode 100644 index 0000000..3bb58bc --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionMapper.java @@ -0,0 +1,30 @@ +package com.CourseManagementSystem.myappvs.courseDescription; + +public class CourseDescriptionMapper { + public static CourseDescription maptoCourseDescription(CourseDescriptionDto courseDescriptionDto){ + CourseDescription courseDescription = new CourseDescription( + courseDescriptionDto.getCourseDescriptionId(), + courseDescriptionDto.getCourseId(), + courseDescriptionDto.getInstructorId(), + courseDescriptionDto.getRoom(), + courseDescriptionDto.getDate(), + courseDescriptionDto.getTime(), + courseDescriptionDto.getMeetingInfo(), + courseDescriptionDto.getMaterials() + ); + return courseDescription; + } + public static CourseDescriptionDto maptoCourseDescriptionDto(CourseDescription courseDescription){ + CourseDescriptionDto courseDescriptionDto = new CourseDescriptionDto( + courseDescription.getCourseDescriptionId(), + courseDescription.getCourseId(), + courseDescription.getInstructorId(), + courseDescription.getRoom(), + courseDescription.getDate(), + courseDescription.getTime(), + courseDescription.getMeetingInfo(), + courseDescription.getMaterials() + ); + return courseDescriptionDto; + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java index 309d61f..683ef46 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionRepository.java @@ -1,11 +1,12 @@ package com.CourseManagementSystem.myappvs.courseDescription; -import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.Optional; +@Repository +public interface CourseDescriptionRepository extends JpaRepository { -public interface CourseDescriptionRepository extends JpaRepository { + Optional findByCourseId_CourseId(Long courseId); - // Optional findByCourseId(Long courseId); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java index f3ae702..75ff9b5 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionService.java @@ -1,30 +1,6 @@ package com.CourseManagementSystem.myappvs.courseDescription; -import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; -import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Optional; - -@Component -public class CourseDescriptionService { - - @Autowired - private CourseDescriptionRepository courseDescriptionRepository; - - public CourseDescriptionService(CourseDescriptionRepository courseDescriptionRepository){ - this.courseDescriptionRepository = courseDescriptionRepository; - } - - -// public CourseDescription getCourseDescriptionById(Long id) throws Exception { -// Optional optionalCourseDescription = courseDescriptionRepository.findByCourseId(id); -// -// if(!optionalCourseDescription.isPresent()){ -// throw new Exception("Course with " +id+" does not exist"); -// } -// return optionalCourseDescription.orElse(null); -// } +public interface CourseDescriptionService { + CourseDescriptionDto getCourseDetail(Long courseId); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.java new file mode 100644 index 0000000..4b2033a --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/impl/CourseDescriptionServiceImpl.java @@ -0,0 +1,27 @@ +package com.CourseManagementSystem.myappvs.courseDescription.impl; + + +import com.CourseManagementSystem.myappvs.courseDescription.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CourseDescriptionServiceImpl implements CourseDescriptionService { + + + private CourseDescriptionRepository courseDescriptionRepository; + + @Autowired + public CourseDescriptionServiceImpl(CourseDescriptionRepository courseDescriptionRepository) { + this.courseDescriptionRepository = courseDescriptionRepository; + } + + @Override + public CourseDescriptionDto getCourseDetail(Long courseId) { + + CourseDescription courseDescription= courseDescriptionRepository + .findByCourseId_CourseId(courseId) + .orElseThrow(()-> new RuntimeException("Course Doesn't Exist")); + return CourseDescriptionMapper.maptoCourseDescriptionDto(courseDescription); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java index 50f6f53..498661a 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/package-info.java @@ -2,10 +2,43 @@ /** * The courseDescription entity * This entity has detailed information regarding course which can be accessed after enrolling into the course. - * + * The key components include the CourseDescription entity, the CourseDescriptionRepository, + * the CourseDescriptionService interface and its implementation, the CourseDescriptionController, + * the CourseDescriptionDto, and the CourseDescriptionMapper. *
    • One to one relationship between courseDescription and courseCatalog *
    • Many to one relationship between courseDescription and instructor - * + * + * Entity class (CourseDescription.java): + * Contains fields such as courseDescriptionId, courseId (references Catalog),instructorId (references Instructor), + * room, date, time, meetingInfo, and materials. + * Annotated with JPA annotations to define the table structure and relationships. + * + * Data Transfer Object (CourseDescriptionDto.java): + * Simplifies data exchange between client and server. + * Contains similar fields to CourseDescription entity for ease of mapping and use in the REST API. + * + * Repository Interface (CourseDescriptionRepository.java): + * Extends JpaRepository to provide CRUD operations. + * Contains a custom query method findByCourseId_CourseId(Long courseId) to find course descriptions by course ID. + * + * Service Interface and Implementation (CourseDescriptionService.java and CourseDescriptionServiceImpl.java): + * Defines the service layer interface for business logic related to course descriptions. + * The implementation class provides the logic for fetching course details using the repository. + * + * Controller (CourseDescriptionController.java): + * Exposes REST API endpoints for course descriptions. + * Contains a GET endpoint /api/coursedescription/{id} to fetch course details by ID. + * Handles exceptions and returns appropriate HTTP status codes. + * + * Mapper (CourseDescriptionMapper.java): + * Provides static methods to map between CourseDescription entity and CourseDescriptionDto. + *Ensures a clear separation between entity and DTO for better manageability and data consistency. + * + * For this page there is frontend page which displays details of course which is HTML file courseDescription.html + * demonstrates how to use the REST API to fetch and display course details in a web page. + * + *Error handling is also done i.e. The controller returns a 404 Not Found status if the course details are not found + * The use of DTOs and mappers ensures that the data transfer between layers is consistent and decoupled from the database entity structure. * @author Shivangi Patel */ package com.CourseManagementSystem.myappvs.courseDescription; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java new file mode 100644 index 0000000..0db4551 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java @@ -0,0 +1,34 @@ +package com.CourseManagementSystem.myappvs.discussion; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDate; + + + + + +@Data +@NoArgsConstructor +@AllArgsConstructor + +@Document(collection = "discussion") +public class Discussion { +// @Id +// private Long id; + + + private LocalDate date; + + private String topicHeading; + + private Long courseId; + private String emailId; + private String description; + + + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java new file mode 100644 index 0000000..6b2ebd5 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java @@ -0,0 +1,106 @@ +package com.CourseManagementSystem.myappvs.discussion; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.util.List; + +@RestController +@RequestMapping("/discussions") +public class DiscussionController { + + + private DiscussionService discussionService; + + + + public DiscussionController(DiscussionService discussionService) { + this.discussionService = discussionService; + } + + @GetMapping("/showDiscussion/{id}") + public List showDiscussion(@PathVariable Long id){ + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + System.out.println("email id the user is "+emailId); + List currentDiscussion = discussionService.getDiscussion(id); + + return currentDiscussion; + + + } + return null; + + } + @PostMapping("/create") + public Discussion createDiscussion(@Validated @RequestBody Discussion discussion) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { +// String emailId = authentication.getName(); +// // Here you can fetch and set the student object based on the +// +// +// Long courseid = discussion.getCourseId(); +// UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); +// discussion.setEmailId(userDetails.getUsername()); +// +// //discussion.setEmailId(emailId); +// discussion.setId(Long.valueOf(UUID.randomUUID().toString())); +// discussion.setDate(LocalDate.now()); + String emailId = authentication.getName(); + // Here you can fetch and set the student object based on the + + + Long courseid= discussion.getCourseId(); + + + discussion.setEmailId(emailId); + discussion.setDate(LocalDate.now()); + return discussionService.saveDiscussion(discussion); + + + } + return null; + } + @PutMapping("/update/{id}") + public Discussion updateDiscussion(@PathVariable String emailId, @RequestBody Discussion discussionDetails) { + return discussionService.updateDiscussion(emailId, discussionDetails); + } + + @DeleteMapping("/delete/{id}") + public void deleteDiscussion(@PathVariable Long id) { + discussionService.deleteDiscussion(String.valueOf(id)); + } +// @PostMapping("/testInsert") +// public Discussion insertTestDiscussion() { +// Student student = new Student(); +// student.setStudentIdNumber(1L); +// student.setEmailId("student@example.com"); +// student.setName("John Doe"); +// +// Catalog catalog = new Catalog(); +// catalog.setCourseId(1L); +// catalog.setCourseId(101L); +// catalog.setCourseName("Computer Science"); +// +// +// Discussion discussion = new Discussion(); +// //discussion.setId(1L); +// discussion.setDate(LocalDate.now()); +// discussion.setTopicHeading("Introduction to CS101"); +// +// discussion.setCourseId(catalog.getCourseId()); +// discussion.setDescription("Discussion about the introduction to CS101 course."); +// +// return discussionService.saveDiscussion(discussion); +// } + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionRepository.java new file mode 100644 index 0000000..65b4fe4 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionRepository.java @@ -0,0 +1,16 @@ +package com.CourseManagementSystem.myappvs.discussion; + + +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.List; +import java.util.Optional; + +public interface DiscussionRepository extends MongoRepository { + + List findByCourseId(Long id); + + Optional findByEmailId(String emailId); + + void deleteByEmailId(String emailId); +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java new file mode 100644 index 0000000..b363ddb --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java @@ -0,0 +1,66 @@ +package com.CourseManagementSystem.myappvs.discussion; + +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; +import jakarta.persistence.EntityNotFoundException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class DiscussionService { + + @Autowired + private DiscussionRepository discussionRepository; + + private Studentrepository studentrepository; + + public DiscussionService(DiscussionRepository discussionRepository) { + this.discussionRepository = discussionRepository; + } + + public Student getStudentId(String email) { + Optional s = studentrepository.findByEmailId(email); + return s.orElse(null); + } + + public List getDiscussion(Long id) { + return discussionRepository.findByCourseId(id); + } + + public Discussion saveDiscussion(Discussion discussion) { + return discussionRepository.save(discussion); + } + + public void deleteDiscussion(String emailId) { + Optional optionalDiscussion = discussionRepository.findByEmailId(emailId); + if (optionalDiscussion.isPresent()) { + Discussion discussion = optionalDiscussion.get(); + if (discussion.getEmailId().equals(emailId)) { + discussionRepository.deleteByEmailId(emailId); + } else { + throw new SecurityException("You are not authorized to delete this discussion."); + } + } else { + throw new EntityNotFoundException("Discussion not found"); + } + } + + public Discussion updateDiscussion(String emailId, Discussion discussionDetails) { + Optional optionalDiscussion = discussionRepository.findByEmailId(emailId); + if (optionalDiscussion.isPresent()) { + Discussion discussion = optionalDiscussion.get(); + if (discussion.getEmailId().equals(emailId)) { + discussion.setTopicHeading(discussionDetails.getTopicHeading()); + discussion.setDescription(discussionDetails.getDescription()); + return discussionRepository.save(discussion); + } else { + throw new SecurityException("You are not authorized to update this discussion."); + } + } else { + throw new EntityNotFoundException("Discussion not found"); + } + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/package-info.java new file mode 100644 index 0000000..1ffcf46 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/package-info.java @@ -0,0 +1,6 @@ +/** + * The Discussion entity + * + * @author Shivangi Patel + */ +package com.CourseManagementSystem.myappvs.discussion; \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Event.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Event.java index a423420..abaf662 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Event.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Event.java @@ -1,63 +1,26 @@ package com.CourseManagementSystem.myappvs.event; -import com.fasterxml.jackson.annotation.JsonIgnore; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.PrimaryKeyJoinColumn; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; -import java.sql.Date; -import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; -import org.springframework.data.mongodb.core.mapping.Document; +import java.time.LocalDate; -@Document(collection = "users") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Document(collection = "events") public class Event { + @Id private String id; - private Date date; - private String title; - private String description; - - public Event(String id, Date date, String title, String description) { - this.id = id; - this.date = date; - this.title = title; - this.description = description; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Date getDate() { - return date; - } - - public void setDate(java.util.Date date2) { - this.date = (Date) date2; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } + private LocalDate date; + private String eventName; + private String organizerName; + private String emailId; - public void setDescription(String description) { - this.description = description; - } -} + // Getters and Setters +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.java index 15c5408..5e291dd 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/EventController.java @@ -1,29 +1,81 @@ package com.CourseManagementSystem.myappvs.event; -import java.util.Date; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.util.List; @RestController +@RequestMapping("/events") public class EventController { @Autowired - private Eventservice eventService; + private Eventrepo eventRepository; + + // Get events by date + @GetMapping("/{date}") + public List getEventsByDate(@PathVariable LocalDate date) { + return eventRepository.findByDate(date); + } + + // Create a new event + @PostMapping + public Event createEvent(@Validated @RequestBody Event event) { + UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + event.setEmailId(userDetails.getUsername()); // Set the emailId from the authenticated user + return eventRepository.save(event); + } + + // Update an event + @PutMapping("/{id}") + public ResponseEntity updateEvent(@PathVariable String id, @Validated @RequestBody Event eventDetails) { + UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + String authenticatedUserEmail = userDetails.getUsername(); + + Event event = eventRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Event not found")); + + // Check if the authenticated user is the owner of the event + if (!event.getEmailId().equals(authenticatedUserEmail)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN) + .body("You are not authorized to update this event. This event is not hosted by you."); + } + + event.setDate(eventDetails.getDate()); + event.setEventName(eventDetails.getEventName()); + + final Event updatedEvent = eventRepository.save(event); + return ResponseEntity.ok(updatedEvent); + } + + // Delete an event + @DeleteMapping("/{id}") + public ResponseEntity deleteEvent(@PathVariable String id) { + UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + String authenticatedUserEmail = userDetails.getUsername(); + + Event event = eventRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Event not found")); + + // Check if the authenticated user is the owner of the event + if (!event.getEmailId().equals(authenticatedUserEmail)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN) + .body("You are not authorized to delete this event. This event is not hosted by you."); + } - @PostMapping("/events") - public Event addEvent(@RequestBody Event event) { - return eventService.saveEvent(event); + eventRepository.delete(event); + return ResponseEntity.ok().build(); } - @GetMapping("/events") - public List getEventsByDate(@RequestBody Date date) { - return eventService.getEventsByDate(date); + // Get all events + @GetMapping + public List getAllEvents() { + return eventRepository.findAll(); } -} +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.java new file mode 100644 index 0000000..293b976 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepo.java @@ -0,0 +1,12 @@ +package com.CourseManagementSystem.myappvs.event; + +import com.CourseManagementSystem.myappvs.event.Event; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.time.LocalDate; +import java.util.List; + +public interface Eventrepo extends MongoRepository { + List findByDate(LocalDate date); + +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepository.java deleted file mode 100644 index 8d2e53d..0000000 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventrepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.CourseManagementSystem.myappvs.event; - -import java.util.Date; -import java.util.List; -import java.util.Optional; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface Eventrepository extends MongoRepository { - List findByDate(Date date); -} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.java index 9356027..0e4b4a2 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/event/Eventservice.java @@ -1,31 +1,16 @@ package com.CourseManagementSystem.myappvs.event; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; -import java.util.Date; +import java.time.LocalDate; import java.util.List; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; @Service -public class Eventservice { - @Autowired - private Eventrepository eventRepository; - - public Event saveEvent(@RequestBody Event event) { - // Example validation: Ensure event title is not empty - if (event.getTitle() == null || event.getTitle().isEmpty()) { - throw new IllegalArgumentException("Event title cannot be empty"); - } - - return eventRepository.save(event); - } +public interface Eventservice { + List getEventsByDate(LocalDate date); - public List getEventsByDate(Date date) { - return eventRepository.findByDate(date); - } + Event createEvent(Event event); -} + List getAllEvents(); +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java index bd7b9f5..e0cf202 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java @@ -4,10 +4,16 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import java.sql.Time; @Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor @Table(name = "Instructor") public class Instructor { @@ -24,55 +30,4 @@ public class Instructor { private String instructorCabinLocation; - public Instructor(){ - - } - - public Instructor(long instructorId, String instructorName, String instructorDescription, Time meetingHours, String instructorCabinLocation){ - this.instructorId = instructorId; - this.instructorName = instructorName; - this.instructorDescription = instructorDescription; - this.meetingHours = meetingHours; - this.instructorCabinLocation = instructorCabinLocation; - } - - public long getInstructorId() { - return instructorId; - } - - public void setInstructorId(long instructorId) { - this.instructorId = instructorId; - } - - public String getInstructorCabinLocation() { - return instructorCabinLocation; - } - - public String getInstructorDescription() { - return instructorDescription; - } - - public String getInstructorName() { - return instructorName; - } - - public Time getMeetingHours() { - return meetingHours; - } - - public void setInstructorCabinLocation(String instructorCabinLocation) { - this.instructorCabinLocation = instructorCabinLocation; - } - - public void setInstructorDescription(String instructorDescription) { - this.instructorDescription = instructorDescription; - } - - public void setInstructorName(String instructorName) { - this.instructorName = instructorName; - } - - public void setMeetingHours(Time meetingHours) { - this.meetingHours = meetingHours; - } -} +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.java new file mode 100644 index 0000000..518f0df --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorController.java @@ -0,0 +1,31 @@ +package com.CourseManagementSystem.myappvs.instructor; + +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/instructor") +public class InstructorController { + + InstructorService instructorService; + + public InstructorController(InstructorService instructorService) { + this.instructorService = instructorService; + } + //Get Instructor Rest Api + @GetMapping("/{id}") + public ResponseEntity getIndtructorbyId(@PathVariable Long id){ + + try { + InstructorDto instructorDto = instructorService.getInstructorDetail(id); + return ResponseEntity.ok(instructorDto); + } catch (RuntimeException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // Return 404 Not Found + } + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorDto.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorDto.java new file mode 100644 index 0000000..b5b8de3 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorDto.java @@ -0,0 +1,22 @@ +package com.CourseManagementSystem.myappvs.instructor; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Time; +@NoArgsConstructor +@AllArgsConstructor +@Data +public class InstructorDto { + private long instructorId; + + private String instructorName; + + + private String instructorDescription; + + private Time meetingHours; + + private String instructorCabinLocation; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorMapper.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorMapper.java new file mode 100644 index 0000000..9f6a15f --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorMapper.java @@ -0,0 +1,28 @@ +package com.CourseManagementSystem.myappvs.instructor; + +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionDto; + +public class InstructorMapper { + public static Instructor maptoInstructor(InstructorDto instructorDto){ + Instructor instructor= new Instructor( + instructorDto.getInstructorId(), + instructorDto.getInstructorName(), + instructorDto.getInstructorDescription(), + instructorDto.getMeetingHours(), + instructorDto.getInstructorCabinLocation() + ); + return instructor; + } + public static InstructorDto maptoInstructorDto(Instructor instructor){ + InstructorDto instructorDto= new InstructorDto( + instructor.getInstructorId(), + instructor.getInstructorName(), + instructor.getInstructorDescription(), + instructor.getMeetingHours(), + instructor.getInstructorCabinLocation() + ); + return instructorDto; + } + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.java index 4ad7a52..65cb992 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorRepository.java @@ -1,7 +1,11 @@ package com.CourseManagementSystem.myappvs.instructor; import com.CourseManagementSystem.myappvs.instructor.Instructor; +import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccounts; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface InstructorRepository extends JpaRepository { + Optional findByInstructorId(Long instructorId); } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorService.java new file mode 100644 index 0000000..25c5de7 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/InstructorService.java @@ -0,0 +1,19 @@ +package com.CourseManagementSystem.myappvs.instructor; + + +import org.springframework.stereotype.Service; + +@Service +public class InstructorService { + private InstructorRepository instructorRepository; + + public InstructorService(InstructorRepository instructorRepository) { + this.instructorRepository = instructorRepository; + } + public InstructorDto getInstructorDetail(Long instructorId) { + Instructor instructor = instructorRepository + .findByInstructorId(instructorId) + .orElseThrow(()-> new RuntimeException("Instructor Doesn't Exist")); + return InstructorMapper.maptoInstructorDto(instructor); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.java index 37730e1..87b24c3 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/package-info.java @@ -2,7 +2,39 @@ /** * The instructor entity *This entity consist information regarding instructor. + * The key components include the Instructor entity, the InstructorRepository, the InstructorService, + * the InstructorController, the InstructorDto, and the InstructorMapper. * + * This package manages the instructor details, including fetching and displaying detailed information about each instructor + * + * Entity Class (Instructor.java): + * Contains fields such as instructorId, instructorName, instructorDescription, meetingHours, and instructorCabinLocation. + * Annotated with JPA annotations to define the table structure and relationships. + * + * Data Transfer Object (InstructorDto.java): + * Simplifies data exchange between client and server. + * Contains similar fields to Instructor entity for ease of mapping and use in the REST API. + * + * Repository Interface (InstructorRepository.java): + * Extends JpaRepository to provide CRUD operations. + * Contains a custom query method findByInstructorId(Long instructorId) to find instructor details by instructor ID. + * + * Service Class (InstructorService.java): + * Implements the service layer for business logic related to instructor details. + * Provides the logic for fetching instructor details using the repository. + * Throws a RuntimeException if the instructor is not found. + * + * Controller (InstructorController.java): + * Exposes REST API endpoints for instructor details. + * Contains a GET endpoint /api/instructor/{id} to fetch instructor details by ID. + * Handles exceptions and returns appropriate HTTP status codes. + * + * Mapper (InstructorMapper.java): + * + * Provides static methods to map between Instructor entity and InstructorDto. + * Ensures a clear separation between entity and DTO for better manageability and data consistency. + * + * All the instructor details are displayed on course description page so that students are able to access those details. * @author Shivangi Patel */ package com.CourseManagementSystem.myappvs.instructor; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.java new file mode 100644 index 0000000..ecc6640 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/Profilecontroller.java @@ -0,0 +1,106 @@ +package com.CourseManagementSystem.myappvs.profile; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +import java.util.Map; +import java.util.Optional; + +@RestController +@RequestMapping("/api/v1/profile") +public class Profilecontroller { + + @Autowired + private Studentrepository studentRepository; + + @GetMapping + public ResponseEntity> showProfile() { + // Retrieve authentication information from SecurityContextHolder + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + System.out.println("email id the user is "+emailId); + + + // Fetch user profile using email + Optional student = studentRepository.findByEmailId(emailId); + if (student.isPresent()) { + Student studentOp = student.get(); + // Construct a map to hold the profile data + Map profileData = Map.of( + "emailId", studentOp.getEmailId(), + "name", studentOp.getName(), + "studentIdNumber", studentOp.getStudentIdNumber(), + "number", studentOp.getNumber()); + // Return the profile data as JSON response + return ResponseEntity.ok(profileData); + } else { + return ResponseEntity.notFound().build(); + } + } else { + // User is not authenticated + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + } + + @PutMapping + public ResponseEntity updateProfile(@RequestBody Student updatedStudent) { + // Retrieve authentication information from SecurityContextHolder + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + + // Fetch user profile using email + Optional existingStudent = studentRepository.findByEmailId(emailId); + if (existingStudent.isPresent()) { + Student student = existingStudent.get(); + student.setName(updatedStudent.getName()); + student.setNumber(updatedStudent.getNumber()); + studentRepository.save(student); + return ResponseEntity.ok().build(); + } else { + return ResponseEntity.notFound().build(); + } + } else { + // User is not authenticated + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + } + + @DeleteMapping + public ResponseEntity deleteProfile() { + // Retrieve authentication information from SecurityContextHolder + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + // Check if user is authenticated + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + + // Fetch user profile using email + Optional student = studentRepository.findByEmailId(emailId); + if (student.isPresent()) { + studentRepository.delete(student.get()); + return ResponseEntity.ok().build(); + } else { + return ResponseEntity.notFound().build(); + } + } else { + // User is not authenticated + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + } +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/package-info.java new file mode 100644 index 0000000..184dbb8 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/profile/package-info.java @@ -0,0 +1,8 @@ +/** + * This package helps to display the data of the particular user which signed + * in. + * + * @author Jay Rashmitbhai Patel + */ + +package com.CourseManagementSystem.myappvs.profile; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Equipment.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Equipment.java new file mode 100644 index 0000000..a5deabb --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Equipment.java @@ -0,0 +1,41 @@ +package com.CourseManagementSystem.myappvs.rentals; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.PrimaryKeyJoinColumn; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.util.List; + +@Entity +@Table(name = "Inventory") +@Data +public class Equipment { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "resource_id") + private Long resourceId; + + @Column(name = "resource_name", nullable = false) + private String resourceName; + + @Column(name = "type", nullable = false) + private String type; // E.g., laptop, projector + + @Column(name = "status", nullable = false) + private String status; + + @OneToMany(mappedBy = "equipment", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @JsonIgnore + private List rentals; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentController.java new file mode 100644 index 0000000..bbf01a2 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentController.java @@ -0,0 +1,21 @@ +package com.CourseManagementSystem.myappvs.rentals; +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +@Controller +public class EquipmentController { + @Autowired + private EquipmentService equipmentService; + + @GetMapping("/inventory") + public String viewInventory(Model model) { + model.addAttribute("inventoryList", equipmentService.findAllEquipment()); + return "inventory"; + } +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.java new file mode 100644 index 0000000..84a74e4 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentRepository.java @@ -0,0 +1,9 @@ +package com.CourseManagementSystem.myappvs.rentals; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EquipmentRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.java new file mode 100644 index 0000000..89f957e --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/EquipmentService.java @@ -0,0 +1,23 @@ +package com.CourseManagementSystem.myappvs.rentals; + +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Service +public class EquipmentService { + @Autowired + private EquipmentRepository equipmentRepository; + + public List findAllEquipment() { + return equipmentRepository.findAll(); + } + + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.java new file mode 100644 index 0000000..d1614c9 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/Rental.java @@ -0,0 +1,31 @@ +package com.CourseManagementSystem.myappvs.rentals; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.time.LocalDate; + +@Entity +@Table(name = "Rentals") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Rental { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long allocationId; + + @Column(name = "class_id") + private Long classId; + + @ManyToOne + @JoinColumn(name = "resource_id", nullable = false) + private Equipment equipment; + + @Column(name = "allocation_date", nullable = false) + private LocalDate allocationDate; + + @Column(name = "return_date") + private LocalDate returnDate; +} + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalController.java new file mode 100644 index 0000000..f07b1a8 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalController.java @@ -0,0 +1,21 @@ +package com.CourseManagementSystem.myappvs.rentals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import java.util.List; + +@RestController +@RequestMapping("/rentals") +public class RentalController { + + @Autowired + private RentalService rentalService; + + @GetMapping + public List getAllRentals() { + return rentalService.findAllRentals(); + } + +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.java new file mode 100644 index 0000000..8de672a --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalRepository.java @@ -0,0 +1,9 @@ +package com.CourseManagementSystem.myappvs.rentals; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import com.CourseManagementSystem.myappvs.rentals.Rental; + +@Repository +public interface RentalRepository extends JpaRepository { + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.java new file mode 100644 index 0000000..1733fa9 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/RentalService.java @@ -0,0 +1,18 @@ +package com.CourseManagementSystem.myappvs.rentals; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +@Service +public class RentalService { + + @Autowired + private RentalRepository rentalRepository; + + public List findAllRentals() { + return rentalRepository.findAll(); + } + + +} + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/package-info.java new file mode 100644 index 0000000..33b4452 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/rentals/package-info.java @@ -0,0 +1,24 @@ +/** + * /** + * For Milestone 3: + * Added UI elements to display the rental button on the homepage + * Added a new page to display rentals interface (work in progress as of now) + * Added service to rentals to fetch the data from the tables and display which items are available. + * Will implement service to take out rentals and have them tracked via the rental and Equipment tables + * The rental tables currently are tied to user account info, and are only displayed ot logged-in users + * and keep track of the rentals they have taken out. + * Added One for one between the Rentals repository and the Rental Service + * Everything in the rentals package is a work in progress and is being worked on by me. + * * + * Previous milestone: + * * The Equipment Entity + * * Mapped one to many + * * The Rental Entity + * * Mapped one to one + * * Can return all rentals + * * + * @author Atif Siddiqui + */ + + +package com.CourseManagementSystem.myappvs.rentals; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java new file mode 100644 index 0000000..a0ea20e --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java @@ -0,0 +1,63 @@ +package com.CourseManagementSystem.myappvs.security.Auth; + +import com.CourseManagementSystem.myappvs.security.Controller.AuthenticationResponse; +import com.CourseManagementSystem.myappvs.security.Controller.Authenticationrequest; +import com.CourseManagementSystem.myappvs.security.Controller.Registerrequest; +import com.CourseManagementSystem.myappvs.security.Service.Jwtservice; +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; +import com.CourseManagementSystem.myappvs.user.Role; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class AuthenticationService { + + @Autowired + private final Studentrepository srepository; + + @Autowired + private final PasswordEncoder passwordEncoder; + @Autowired + private final Jwtservice jwtService; + @Autowired + private final AuthenticationManager authenticationManager; + + public AuthenticationResponse register(Registerrequest request) { + var student = Student.builder() + .name(request.getName()) + .emailId(request.getEmailId()) + .studentIdNumber(request.getStudentIdNumber()) + .password(passwordEncoder.encode(request.getPassword())) + .role(Role.USER) + .number(request.getNumber()) + .build(); + srepository.save(student); + /* + * var user = User.builder() + * .emailId(request.getEmailId()) + * .password(passwordEncoder.encode(request.getPassword())) + * .role(Role.USER) + * .build(); + * urepository.save(user); + */ + + var jwtToken = jwtService.generateToken(student); + return AuthenticationResponse.builder().token(jwtToken).build(); + } + + public AuthenticationResponse authenticate(Authenticationrequest request) { + authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(request.getEmailId(), request.getPassword())); + var user = srepository.findByEmailId(request.getEmailId()) + .orElseThrow(() -> new IllegalArgumentException("Invalid email or password.")); + var jwtToken = jwtService.generateToken(user); + return AuthenticationResponse.builder().token(jwtToken).build(); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.java new file mode 100644 index 0000000..0b5313a --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/JwtAuthresp.java @@ -0,0 +1,14 @@ +package com.CourseManagementSystem.myappvs.security.Auth; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JwtAuthresp { + private String token; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.java new file mode 100644 index 0000000..9efdf5c --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authcontrol.java @@ -0,0 +1,58 @@ +package com.CourseManagementSystem.myappvs.security.Controller; + +import com.CourseManagementSystem.myappvs.security.Auth.AuthenticationService; +import com.CourseManagementSystem.myappvs.security.Service.Jwtservice; +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +import lombok.RequiredArgsConstructor; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/v1/auth") +@RequiredArgsConstructor +public class Authcontrol { + // private final AuthenticationManager authenticationManager; + // private final Loginservice loginService; + // private final Jwtservice jwtService; + + private final AuthenticationService service; + @Autowired + private Studentrepository studentRepository; + + @PostMapping("/signup") + public ResponseEntity signup(@RequestBody Registerrequest request) { + return ResponseEntity.ok(service.register(request)); + } + + @PostMapping("/login") + public ResponseEntity login(@RequestBody Authenticationrequest request) throws Exception { + return ResponseEntity.ok(service.authenticate(request)); + } + + @GetMapping("/check-email") + public ResponseEntity> checkEmailExists(@RequestParam("email") String email) { + boolean exists = studentRepository.existsByEmailId(email); + Map response = new HashMap<>(); + response.put("exists", exists); + return ResponseEntity.ok(response); + } + + @GetMapping("/check-student-id") + public ResponseEntity> checkStudentIdExists(@RequestParam("studentId") String studentId) { + boolean exists = studentRepository.existsByStudentIdNumber(Long.valueOf(studentId)); + Map response = new HashMap<>(); + response.put("exists", exists); + return ResponseEntity.ok(response); + } + +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse.java new file mode 100644 index 0000000..8b24b27 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/AuthenticationResponse.java @@ -0,0 +1,14 @@ +package com.CourseManagementSystem.myappvs.security.Controller; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuthenticationResponse { + private String token; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.java new file mode 100644 index 0000000..31ade77 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authenticationrequest.java @@ -0,0 +1,16 @@ +package com.CourseManagementSystem.myappvs.security.Controller; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Authenticationrequest { + + private String emailId; + String password; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authoricontrol.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authoricontrol.java new file mode 100644 index 0000000..d70f38c --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Authoricontrol.java @@ -0,0 +1,18 @@ +package com.CourseManagementSystem.myappvs.security.Controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/api/v1/auth/resource") +@RequiredArgsConstructor +public class Authoricontrol { + @GetMapping + public ResponseEntity sayHello() { + return ResponseEntity.ok("Here is your resource"); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.java new file mode 100644 index 0000000..11ace7c --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Controller/Registerrequest.java @@ -0,0 +1,20 @@ +package com.CourseManagementSystem.myappvs.security.Controller; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Registerrequest { + + // For Student table + private String name; + private Long studentIdNumber; + private String emailId; + private String number; + private String password; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.java new file mode 100644 index 0000000..8003ccb --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Service/Jwtservice.java @@ -0,0 +1,71 @@ +package com.CourseManagementSystem.myappvs.security.Service; + +import java.security.Key; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Service; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +@Service +public class Jwtservice { + + private static final String SECRET_KEY = "cd1ac13dc26636c1bf5c1f8da03432236b53ffb9d0a02b3cfcbeefb6d08a3f5d78fbc75166abf393d967061a78c11b2154d2dce0669d6e1755f2033897b55199"; + + public String extractUserName(String token) { + return extractClaim(token, Claims::getSubject); + }// Done + + public String generateToken(UserDetails userDetails) { + Map claims = new HashMap<>(); + return generateToken(claims, userDetails.getUsername()); + }// Done + + public boolean isTokenValid(String token, UserDetails userDetails) { + final String userName = extractUserName(token); + return userName.equals(userDetails.getUsername()) && !isTokenExpired(token); + }// Done + + private T extractClaim(String token, Function claimsResolvers) { + final Claims claims = extractAllClaims(token); + return claimsResolvers.apply(claims); + }// Done + + private String generateToken(Map claims, String subject) { + return Jwts.builder() + .setClaims(claims) + .setSubject(subject) + .setIssuedAt(new Date(System.currentTimeMillis())) + .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24)) + .signWith(getSigningKey(), SignatureAlgorithm.HS256) + .compact(); + }// Done + + private boolean isTokenExpired(String token) { + return extractExpiration(token).before(new Date()); + // final Date expiration = extractExpiration(token); + // return expiration.before(new Date()); + }// Done + + private Date extractExpiration(String token) { + return extractClaim(token, Claims::getExpiration); + }// Done + + private Claims extractAllClaims(String token) { + return Jwts.parserBuilder().setSigningKey(getSigningKey()).build().parseClaimsJws(token).getBody(); + }// Done + + private Key getSigningKey() { + byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY); + return Keys.hmacShaKeyFor(keyBytes); + } // Done +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Applicationconfig.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Applicationconfig.java new file mode 100644 index 0000000..be2179c --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Applicationconfig.java @@ -0,0 +1,58 @@ +package com.CourseManagementSystem.myappvs.security.config; + +import jakarta.persistence.criteria.CriteriaBuilder; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.domain.AuditorAware; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +@Configuration +@RequiredArgsConstructor +public class Applicationconfig { + + @Autowired + private final Studentrepository srepository; + + @Bean + public UserDetailsService userDetailsService() { + return username -> srepository.findByEmailId(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + } + + @Bean + public AuthenticationProvider authenticationProvider() { + DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + authProvider.setUserDetailsService(userDetailsService()); + authProvider.setPasswordEncoder(passwordEncoder()); + return authProvider; + } + + /* + * @Bean + * public AuditorAware auditorAware() { + * return new ApplicationAuditAware(); + * } + */ + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception { + return config.getAuthenticationManager(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.java new file mode 100644 index 0000000..2cfea48 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/Jwtauthfilter.java @@ -0,0 +1,62 @@ +package com.CourseManagementSystem.myappvs.security.config; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.lang.NonNull; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import com.CourseManagementSystem.myappvs.security.Service.Jwtservice; +import com.CourseManagementSystem.myappvs.user.Userservice; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; + +import java.io.IOException; + +@Component +@RequiredArgsConstructor +public class Jwtauthfilter extends OncePerRequestFilter { + private final Jwtservice jwtService; + private final Userservice userService; + private final UserDetailsService userDetailsService; + + @Override + protected void doFilterInternal(@NonNull HttpServletRequest request, + @NonNull HttpServletResponse response, + @NonNull FilterChain filterChain) + throws ServletException, IOException { + + final String authHeader = request.getHeader("Authorization"); + final String jwt; + final String userEmail; + + if (StringUtils.isEmpty(authHeader) || !StringUtils.startsWith(authHeader, "Bearer ")) { + filterChain.doFilter(request, response); + return; + } + + jwt = authHeader.substring(7); + userEmail = jwtService.extractUserName(jwt); + + if (StringUtils.isNotEmpty(userEmail) && SecurityContextHolder.getContext().getAuthentication() == null) { + UserDetails userDetails = userService.userDetailsService().loadUserByUsername(userEmail); + + if (jwtService.isTokenValid(jwt, userDetails)) { + UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken( + userDetails, null, userDetails.getAuthorities()); + authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authToken); + } + } + filterChain.doFilter(request, response); + } +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..777e081 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/config/SecurityConfiguration.java @@ -0,0 +1,56 @@ +package com.CourseManagementSystem.myappvs.security.config; + +import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import com.CourseManagementSystem.myappvs.user.Userservice; + +import lombok.RequiredArgsConstructor; + +@Configuration +@EnableWebSecurity +@RequiredArgsConstructor +public class SecurityConfiguration { + private final Jwtauthfilter jwtAuthenticationFilter; + private final AuthenticationProvider authenticationProvider; + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .authorizeHttpRequests(auth -> auth + .requestMatchers("/h2-console/**").permitAll()) + .csrf(csrf -> csrf.disable()) + .authorizeHttpRequests(requests -> requests + .requestMatchers("/api/v1/auth/**") + .permitAll() + .requestMatchers("/h2-console/**") + .permitAll() + .requestMatchers("/**") + .permitAll() + .requestMatchers("/index.html") + .permitAll() + .anyRequest() + .authenticated()) + .sessionManagement(management -> management + .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authenticationProvider(authenticationProvider) + .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); + http.headers(headers -> headers.frameOptions(frameOptions -> frameOptions.sameOrigin())); + return http.build(); + + } +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Student.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Student.java index 6228b2d..8123939 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Student.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Student.java @@ -1,41 +1,71 @@ package com.CourseManagementSystem.myappvs.student; -import com.CourseManagementSystem.myappvs.user.User; -import com.fasterxml.jackson.annotation.JsonIgnore; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OneToOne; -import jakarta.persistence.PrimaryKeyJoinColumn; -import jakarta.persistence.Table; +import java.util.Collection; +import java.util.List; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import com.CourseManagementSystem.myappvs.user.Role; + +import jakarta.persistence.*; + import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; - @Entity @Table(name = "Students") @Data +@Builder +@NoArgsConstructor @AllArgsConstructor -public class Student { - +public class Student implements UserDetails { @Id @Column(unique = true) private Long studentIdNumber; private String name; - + @Column(unique = true) private String emailId; - @OneToOne(mappedBy = "student", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private User user; + private Student student; private String number; + @Enumerated(EnumType.STRING) + private Role role; + + private String password; + + @Override + public Collection getAuthorities() { + return List.of(new SimpleGrantedAuthority(role.name())); + } + + @Override + public String getUsername() { + return emailId; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } -} +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java index 3fae296..20a1b1e 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java @@ -1,11 +1,17 @@ package com.CourseManagementSystem.myappvs.student; import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - -import com.CourseManagementSystem.myappvs.user.User; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface Studentrepository extends JpaRepository { + Optional findByEmailId(String emailId); + + @Query("SELECT s.name FROM Student s WHERE s.emailId = :emailId") + String findNameByEmailId(@Param("emailId") String emailId); + + boolean existsByEmailId(String email); -} + boolean existsByStudentIdNumber(Long studentIdNumber); +} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java new file mode 100644 index 0000000..81bbf8d --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java @@ -0,0 +1,24 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +import com.CourseManagementSystem.myappvs.student.Student; +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class StudentAccountDto { + + private Long studentAccountsId; + + private Student studentId; + + private double balance; + +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java new file mode 100644 index 0000000..791d672 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java @@ -0,0 +1,23 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class StudentAccountService { + + private StudentAccountsRepository studentAccountsRepository; + + @Autowired + public StudentAccountService(StudentAccountsRepository studentAccountsRepository) { + this.studentAccountsRepository = studentAccountsRepository; + } + + + public StudentAccountDto getStudentAccountsDetail(Long studentId) { + StudentAccounts studentAccounts= studentAccountsRepository + .findByStudentId_studentIdNumber(studentId) + .orElseThrow(()-> new RuntimeException("Student Doesn't Exist")); + return StudentAccountsMapper.maptoStudentAccountDto(studentAccounts); + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java index d195c1e..db2871d 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java @@ -1,11 +1,16 @@ package com.CourseManagementSystem.myappvs.studentAccounts; - import com.CourseManagementSystem.myappvs.student.Student; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.ToString.Exclude; @Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor @Table(name = "Student_Accounts") public class StudentAccounts { @@ -16,43 +21,8 @@ public class StudentAccounts { @Exclude @OneToOne @JoinColumn(name = "student_id", referencedColumnName = "studentIdNumber") - private Student student; - + private Student studentId; private double balance; - - public StudentAccounts(){ - - } - - public StudentAccounts(long studentAccountsId, Student student, double balance){ - this.studentAccountsId = studentAccountsId; - this.student = student; - this.balance = balance; - } - - public void setStudentId(Student student) { - this.student = student; - } - - public long getStudentAccountsId() { - return studentAccountsId; - } - - public void setStudentAccountsId(long studentAccountsId) { - this.studentAccountsId = studentAccountsId; - } - - public Student getStudent() { - return student; - } - - public double getBalance() { - return balance; - } - - public void setBalance(double balance) { - this.balance = balance; - } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java new file mode 100644 index 0000000..f252efd --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java @@ -0,0 +1,26 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +public class StudentAccountsMapper { + + + public static StudentAccounts maptoStudentAccounts(StudentAccountDto studentAccountDto){ + StudentAccounts studentAccounts = new StudentAccounts( + studentAccountDto.getStudentAccountsId(), + studentAccountDto.getStudentId(), + studentAccountDto.getBalance() + ); + return studentAccounts; + } + public static StudentAccountDto maptoStudentAccountDto(StudentAccounts studentAccounts){ + StudentAccountDto studentAccountDto= new StudentAccountDto( + studentAccounts.getStudentAccountsId(), + studentAccounts.getStudentId(), + studentAccounts.getBalance() + + ); + return studentAccountDto; + } +} + + + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsRepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsRepository.java index 2ce495c..90309d1 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsRepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsRepository.java @@ -1,7 +1,13 @@ package com.CourseManagementSystem.myappvs.studentAccounts; -import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccounts; +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface StudentAccountsRepository extends JpaRepository { + Optional findByStudentId_studentIdNumber(Long studentId); + + + } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/package-info.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/package-info.java index a4f8027..5b858a9 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/package-info.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/package-info.java @@ -2,9 +2,47 @@ /** * The studentAccounts entity * This entity represents the balance of student after enrolling into the course. + * The main components include the StudentAccounts entity, the StudentAccountDto, the StudentAccountsRepository, + * the StudentAccountService,the StudentAccountsController, and the StudentAccountsMapper. *
    • One to one relationship between studentAccounts and student * - * + *This package manages the details of student accounts, including fetching and displaying information about each student’s account + *Entity Class (StudentAccounts.java): + * Contains fields such as studentAccountsId, studentId, and balance. + * Annotated with JPA annotations to define the table structure and relationships. + * The studentId field is a foreign key linked to the Student entity. + * + * Data Transfer Object (StudentAccountDto.java): + * + * Simplifies data exchange between client and server. + * Contains similar fields to the StudentAccounts entity for ease of mapping and use in the REST API. + * Includes fields for studentAccountsId, studentId, and balance. + * + * Repository Interface (StudentAccountsRepository.java): + * + * Extends JpaRepository to provide CRUD operations. + * Contains a custom query method findByStudentId_studentIdNumber(Long studentId) to find student account details by student ID. + * + * Service Class (StudentAccountService.java): + * + * Implements the service layer for business logic related to student account details. + * Provides the logic for fetching student account details using the repository. + * Throws a RuntimeException if the student account is not found. + * + * Controller (StudentAccountsController.java): + * + * Exposes REST API endpoints for student account details. + * Contains a GET endpoint /api/studentaccounts/{id} to fetch student account details by ID. + * Handles exceptions and returns appropriate HTTP status codes. + * + * Mapper (StudentAccountsMapper.java): + * + * Provides static methods to map between StudentAccounts entity and StudentAccountDto. + * Ensures a clear separation between entity and DTO for better manageability and data consistency. + * + * For front-end, the html page is created named studentAccounts.html which displays student accounts. Which can directly accessed using Home page. + * The controller returns a 404 Not Found status if the student account details are not found, ensuring appropriate client feedback. + * * @author Shivangi Patel */ package com.CourseManagementSystem.myappvs.studentAccounts; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java new file mode 100644 index 0000000..5e5ff4c --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java @@ -0,0 +1,32 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionDto; +import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccountService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/studentaccounts") +public class studentAccountsController { + + private StudentAccountService studentAccountService; + + public studentAccountsController(StudentAccountService studentAccountService) { + this.studentAccountService = studentAccountService; + } + + @GetMapping("/{id}") + public ResponseEntity getstudentAccountsbyId(@PathVariable Long id){ + + try { + StudentAccountDto studentAccountDto = studentAccountService.getStudentAccountsDetail(id); + return ResponseEntity.ok(studentAccountDto); + } catch (RuntimeException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // Return 404 Not Found + } + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.java new file mode 100644 index 0000000..fbb2bc7 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Homecontroller.java @@ -0,0 +1,13 @@ +package com.CourseManagementSystem.myappvs.user; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class Homecontroller { + + @GetMapping("/") + public String redirectToIndex() { + return "redirect:/index.html"; + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Login.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Login.java deleted file mode 100644 index 5af9e3d..0000000 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Login.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.CourseManagementSystem.myappvs.user; - -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -//import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RestController; - -import com.CourseManagementSystem.myappvs.student.Student; - -@RestController -public class Login { - - @Autowired - Loginservice loginservice; - - public Login(Loginservice loginService) { - this.loginservice = loginService; - } - - @PostMapping("/login") - public ResponseEntity login(@RequestBody User user) throws Exception { - - String loginstudent; - try { - loginstudent = loginservice.login(user); - } catch (Exception exception) { - throw exception; - } - - return ResponseEntity.ok("Login successfully by " + loginstudent); - - } - - @PostMapping("/signup") - public ResponseEntity signup(@RequestBody Student student) { - Student saveStudent; - User userData; - try { - saveStudent = loginservice.addStudent(student); - - // Extract data from the student object to create a user object - User user = new User(null, null, saveStudent); - user.setEmailId(student.getEmailId()); - user.setPassword(student.getUser().getPassword()); // Assuming the password is stored in the student's - // associated user object - user.setStudent(saveStudent); - - // Save the user - userData = loginservice.addUser(user); - } catch (RuntimeException exception) { - throw exception; - } - return ResponseEntity.of(Optional.of(saveStudent)); - - } -} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Loginservice.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Loginservice.java index 4577779..6cae6c9 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Loginservice.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Loginservice.java @@ -2,44 +2,54 @@ import com.CourseManagementSystem.myappvs.student.Student; import com.CourseManagementSystem.myappvs.student.Studentrepository; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -//import java.util.Optional; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.security.core.userdetails.UserDetailsService; -@Component +@Service public class Loginservice { @Autowired private Studentrepository studentRepository; @Autowired - private Userrepository userRepository; + private PasswordEncoder passwordEncoder; + + @Autowired + private Userserviceimpl userService; - public Loginservice(Studentrepository studentRepository) { + public Loginservice(Studentrepository studentRepository, + PasswordEncoder passwordEncoder, Userserviceimpl userService) { this.studentRepository = studentRepository; + this.passwordEncoder = passwordEncoder; + this.userService = userService; } - /* - * public List getStudents() { - * return studentRepository.findAll(); - * } - */ - - public String login(User user) throws Exception { - User existingUser = userRepository.findByEmailIdAndPassword(user.getEmailId(), user.getPassword()) + public String login(Student student) throws Exception { + Student existingUser = studentRepository.findByEmailId(student.getEmailId()) .orElseThrow(() -> new Exception("Invalid credentials")); + if (!passwordEncoder.matches(student.getPassword(), existingUser.getPassword())) { + throw new Exception("Invalid credentials"); + } return existingUser.getStudent().getName(); } public Student addStudent(Student student) { - studentRepository.save(student); - return student; + return studentRepository.save(student); } - public User addUser(User user) { - userRepository.save(user); - return user; + public Student addUser(Student student) { + student.setPassword(passwordEncoder.encode(student.getPassword())); + return studentRepository.save(student); } + public Student getStudentByEmail(String emailId) { + return studentRepository.findByEmailId(emailId) + .orElseThrow(() -> new RuntimeException("Student not found")); + } + + public UserDetailsService userDetailsService() { + return (UserDetailsService) userService; // Return the Userserviceimpl directly + } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Role.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Role.java new file mode 100644 index 0000000..5b18657 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Role.java @@ -0,0 +1,6 @@ +package com.CourseManagementSystem.myappvs.user; + +public enum Role { + USER, + ADMIN +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/User.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/User.java deleted file mode 100644 index 991b988..0000000 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/User.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.CourseManagementSystem.myappvs.user; - -import com.CourseManagementSystem.myappvs.student.Student; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -@Entity -@Table(name = "Users") -public class User { - - @Id - private String emailId; // Primary key - - private String password; - - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "studentIdNumber") - private Student student; - -} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userrepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userrepository.java deleted file mode 100644 index 2465fc1..0000000 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userrepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.CourseManagementSystem.myappvs.user; - -import java.util.Optional; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface Userrepository extends JpaRepository { - - Optional findByEmailIdAndPassword(String emailId, String password); - -} \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.java new file mode 100644 index 0000000..a267ad4 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userservice.java @@ -0,0 +1,7 @@ +package com.CourseManagementSystem.myappvs.user; + +import org.springframework.security.core.userdetails.UserDetailsService; + +public interface Userservice { + UserDetailsService userDetailsService(); +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.java new file mode 100644 index 0000000..26beb40 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/user/Userserviceimpl.java @@ -0,0 +1,27 @@ +package com.CourseManagementSystem.myappvs.user; + +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import com.CourseManagementSystem.myappvs.student.Studentrepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class Userserviceimpl implements Userservice { + private final Studentrepository userRepository; + + @Override + public UserDetailsService userDetailsService() { + return new UserDetailsService() { + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + return userRepository.findByEmailId(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found with email: " + username)); + } + }; + } +} \ No newline at end of file diff --git a/myappvs/src/main/resources/application.properties b/myappvs/src/main/resources/application.properties index de3c7b9..2654b7e 100644 --- a/myappvs/src/main/resources/application.properties +++ b/myappvs/src/main/resources/application.properties @@ -14,15 +14,18 @@ spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.show-sql=true +security.basic.enabled=false spring.jpa.hibernate.ddl-auto=create-drop spring.defer-datasource-initialization=true spring.jpa.properties.hibernate.globally_quoted_identifiers=true spring.h2.console.enabled=true spring.sql.init.mode=always +spring.main.allow-bean-definition-overriding=true -#MongoDB Configuration -spring.data.mongodb.host=localhost -spring.data.mongodb.port=27017 -spring.data.mongodb.database=events +spring.data.mongodb.uri=mongodb+srv://dbUser:Password%40123@coursemanagement.pf6hifa.mongodb.net/?retryWrites=true&w=majority&appName=CourseManagement +spring.data.mongodb.database=CourseManagement + +spring.mvc.view.prefix=/static/ +spring.mvc.view.suffix=.html diff --git a/myappvs/src/main/resources/import.sql b/myappvs/src/main/resources/import.sql index c111e18..3480131 100644 --- a/myappvs/src/main/resources/import.sql +++ b/myappvs/src/main/resources/import.sql @@ -1,17 +1,13 @@ - - - - -- Insert student data -INSERT INTO Students(studentIdNumber, name, emailId, number) VALUES (123456789, 'ABC', 'ABC@example.com', '2246387532'); -INSERT INTO Students(studentIdNumber, name, emailId, number) VALUES (987654321, 'CDE', 'CDE@example.com', '2257865437'); -INSERT INTO Students(studentIdNumber, name, emailId, number) VALUES (214365879, 'FGH', 'FGH@example.com', '2235679043'); -INSERT INTO Students(studentIdNumber, name, emailId, number) VALUES (978563412, 'IJK', 'IJK@example.com', '2247864538'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (123456789, 'ABC', 'ABC@example.com', '2246387532'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (987654321, 'CDE', 'CDE@example.com', '2257865437'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (114365567, 'FGH', 'FGH@example.com', '2235679043'); +INSERT INTO students(student_id_number, name, email_id, number) VALUES (978563412, 'IJK', 'IJK@example.com', '2247864538'); -- Insert user data -INSERT INTO Users(emailId, password) VALUES ('ABC@example.com', 'ABC@123'); +INSERT INTO users(emailId, password) VALUES ('ABC@example.com', 'ABC@123'); INSERT INTO Users(emailId, password) VALUES ('CDE@example.com', 'CDE@123'); INSERT INTO Users(emailId, password) VALUES ('FGH@example.com', 'FGH@123'); INSERT INTO Users(emailId, password) VALUES ('IJK@example.com', 'IJK@123'); @@ -21,9 +17,6 @@ INSERT INTO advisors(name, email) VALUES ('alice', 'alice@test.com') INSERT INTO advisors(name, email) VALUES ('bob', 'bob@test.com') INSERT INTO advisors(name, email) VALUES ('charlie', 'charlie@test.com') --- Insert into Catalog table -INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Instructor_ID, Course_Credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 21251, 3); -INSERT INTO Course_Catalog(courseId, courseName, Course_Description, Instructor_ID, Course_Credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 21351, 4); -- Insert into Enrollment table INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); @@ -31,17 +24,32 @@ INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789 INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); -- Insert into instructor table +<<<<<<< HEAD INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (1, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (2, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (3, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); +======= +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (201, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (202, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); +INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (203, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); +-- Insert into Catalog table +INSERT INTO course_catalog(course_id, course_name, course_description, instructor_id, course_credits) VALUES (101, 'Database Systems', 'Introduction to Database Design', 201, 3); +INSERT INTO course_catalog(course_id, course_name, course_description, instructor_id, course_credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 202, 4); -- Insert into Course Description table -INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'Introduction to Programming', 'Lecture Slides'); -INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'Advanced Database Management', 'Textbook, Exercises'); -INSERT INTO Course_Description(courseDescriptionId, courseId, instructorId, room, date, time, meetingInfo, materials) VALUES (3, 103, 203, 'Room C', '2024-05-15', '11:00:00', 'Machine Learning Fundamentals', 'Online Resources'); +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'Introduction to Programming', 'Lecture Slides'); +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'Advanced Database Management', 'Textbook, Exercises'); +--INSERT INTO course_description(courseDescriptionId, courseId, instructorId, room, date, time, meeting_info, materials) VALUES (3, 103, 203, 'Room C', '2024-05-15', '11:00:00', 'Machine Learning Fundamentals', 'Online Resources'); -- Insert into Student Account table -INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (1, 101, 100.00); -INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (2, 102, 200.00); -INSERT INTO Student_Accounts(studentAccountsId, student_id, balance) VALUES (3, 103, 150.00); +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (1, 123456789, 100.00); +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (2, 987654321, 200.00); +INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (3, 114365567, 150.00); +>>>>>>> f1af734651c4217e6638d28f4dea30cb11ce7aee + +-- Insert initial data into the Equipment table +INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (1, 'Laptop 1', 'Laptop', 'Available'); +INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (2, 'Projector 1', 'Projector', 'Rented'); +-- Insert initial data into the Rentals table +INSERT INTO rentals (allocation_id, class_id, resource_id, allocation_date, return_date) VALUES (1, 101, 2, '2024-04-01', '2024-04-10'); \ No newline at end of file diff --git a/myappvs/src/main/resources/js/script.js b/myappvs/src/main/resources/js/script.js new file mode 100644 index 0000000..5435348 --- /dev/null +++ b/myappvs/src/main/resources/js/script.js @@ -0,0 +1,43 @@ +document.getElementById('signupForm').addEventListener('submit', function (e) { + e.preventDefault(); + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + fetch('/api/v1/auth/signup', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email: email, password: password }), + }) + .then(response => response.json()) + .then(data => { + alert('Signup successful!'); + window.location.href = '/login.html'; + }) + .catch(error => { + alert('Error during signup: ' + error.message); + }); +}); + +document.getElementById('loginForm').addEventListener('submit', function (e) { + e.preventDefault(); + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + fetch('/api/v1/auth/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email: email, password: password }), + }) + .then(response => response.json()) + .then(data => { + alert('Login successful!'); + // Handle the token, redirect or set up user session here + }) + .catch(error => { + alert('Error during login: ' + error.message); + }); +}); diff --git a/myappvs/src/main/resources/schema.sql b/myappvs/src/main/resources/schema.sql index 7ad0998..d542675 100644 --- a/myappvs/src/main/resources/schema.sql +++ b/myappvs/src/main/resources/schema.sql @@ -10,41 +10,41 @@ CREATE TABLE IF NOT EXISTS Users ( password VARCHAR(255) NOT NULL ); -CREATE TABLE IF NOT EXISTS Course_Catalog ( - courseId INT PRIMARY KEY, - courseName VARCHAR(100) NOT NULL, - Course_Description VARCHAR(255) NOT NULL, - Instructor_ID INT NOT NULL, - Course_Credits INT -); - -CREATE TABLE IF NOT EXISTS Enrollment ( - Enrollment_Id INT PRIMARY KEY, - student_id INT NOT NULL, - courseId INT NOT NULL -); - -CREATE TABLE IF NOT EXISTS Course_Description ( - courseDescriptionId INT PRIMARY KEY, - courseId INT, - instructorId INT, - room VARCHAR(255), - date DATE, - time TIME, - meetingInfo VARCHAR(255), - materials VARCHAR(255) -); - -CREATE TABLE IF NOT EXISTS Instructor ( - instructorId INT PRIMARY KEY, - instructorName VARCHAR(255), - instructorDescription VARCHAR(255), - meetingHours TIME, - instructorCabinLocation VARCHAR(255) -); - -CREATE TABLE IF NOT EXISTS Student_Accounts ( - studentAccountsId INT PRIMARY KEY, - student_id INT, - balance DOUBLE -); +--CREATE TABLE IF NOT EXISTS Course_Catalog ( +-- courseId INT PRIMARY KEY, +-- courseName VARCHAR(100) NOT NULL, +-- Course_Description VARCHAR(255) NOT NULL, +-- Instructor_ID INT NOT NULL, +-- Course_Credits INT +--); +-- +--CREATE TABLE IF NOT EXISTS Enrollment ( +-- Enrollment_Id INT PRIMARY KEY, +-- student_id INT NOT NULL, +-- courseId INT NOT NULL +--); +-- +--CREATE TABLE IF NOT EXISTS Course_Description ( +-- courseDescriptionId INT PRIMARY KEY, +-- courseId INT, +-- instructorId INT, +-- room VARCHAR(255), +-- date DATE, +-- time TIME, +-- meetingInfo VARCHAR(255), +-- materials VARCHAR(255) +--); +-- +--CREATE TABLE IF NOT EXISTS Instructor ( +-- instructorId INT PRIMARY KEY, +-- instructorName VARCHAR(255), +-- instructorDescription VARCHAR(255), +-- meetingHours TIME, +-- instructorCabinLocation VARCHAR(255) +--); +-- +--CREATE TABLE IF NOT EXISTS Student_Accounts ( +-- studentAccountsId INT PRIMARY KEY, +-- student_id INT, +-- balance DOUBLE +--); diff --git a/myappvs/src/main/resources/static/courseCatalog.html b/myappvs/src/main/resources/static/courseCatalog.html new file mode 100644 index 0000000..5630475 --- /dev/null +++ b/myappvs/src/main/resources/static/courseCatalog.html @@ -0,0 +1,170 @@ + + + + + + Course Catalog + + + +
      + +
      + Welcome, User +
      +
      +

      Course Catalog

      + + + + + + + + + + + + + +
      Course IDCourse NameDescriptionInstructorCreditsEnroll
      + + + + + diff --git a/myappvs/src/main/resources/static/courseDescription.html b/myappvs/src/main/resources/static/courseDescription.html new file mode 100644 index 0000000..8cfcb7d --- /dev/null +++ b/myappvs/src/main/resources/static/courseDescription.html @@ -0,0 +1,131 @@ + + + + + + Course Description + + + +
      +
      + Home + Enrollments + + +
      +
      + Welcome, User +
      +
      +

      Course Description

      +
      + +
      + + + + diff --git a/myappvs/src/main/resources/static/css/courseDescription.css b/myappvs/src/main/resources/static/css/courseDescription.css new file mode 100644 index 0000000..cc0400c --- /dev/null +++ b/myappvs/src/main/resources/static/css/courseDescription.css @@ -0,0 +1,31 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + padding: 20px; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +h1 { + text-align: center; +} + +#courseDetails { + margin-top: 20px; +} + +p { + margin-bottom: 10px; +} + +strong { + font-weight: bold; +} diff --git a/myappvs/src/main/resources/static/css/instructor.css b/myappvs/src/main/resources/static/css/instructor.css new file mode 100644 index 0000000..d95c130 --- /dev/null +++ b/myappvs/src/main/resources/static/css/instructor.css @@ -0,0 +1,24 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1, h2 { + color: #333; +} + +p { + color: #666; +} + diff --git a/myappvs/src/main/resources/static/css/studentAccounts.css b/myappvs/src/main/resources/static/css/studentAccounts.css new file mode 100644 index 0000000..14fe1a6 --- /dev/null +++ b/myappvs/src/main/resources/static/css/studentAccounts.css @@ -0,0 +1,43 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +.container { + max-width: 800px; + margin: 50px auto; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1 { + color: #333; +} + +p { + color: #666; + margin-bottom: 10px; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +table, th, td { + border: 1px solid black; +} + +th, td { + padding: 8px; + text-align: left; +} + +th { + background-color: #f4f4f4; +} diff --git a/myappvs/src/main/resources/static/css/style.css b/myappvs/src/main/resources/static/css/style.css index 3ec7f0b..75fea3f 100644 --- a/myappvs/src/main/resources/static/css/style.css +++ b/myappvs/src/main/resources/static/css/style.css @@ -1,44 +1,53 @@ -.login-container { - width: 300px; - margin: 0 auto; +body { + font-family: Arial, sans-serif; + background-color: #f4f4f4; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + background: #fff; padding: 20px; - border: 1px solid #ccc; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 5px; - background-color: #f9f9f9; + text-align: center; +} + +h1 { + margin-bottom: 20px; } -.form-group { - margin-bottom: 10px; +form { + display: flex; + flex-direction: column; } label { - display: block; + margin: 10px 0 5px; } -input[type="text"], -input[type="password"] { - width: 100%; - padding: 8px; - font-size: 16px; - border-radius: 5px; +input { + padding: 10px; + margin-bottom: 20px; border: 1px solid #ccc; + border-radius: 3px; } -button { - padding: 10px 20px; - font-size: 16px; - border-radius: 5px; - background-color: #007bff; - color: #fff; +.button, button { + padding: 10px; border: none; + background: #007bff; + color: white; + border-radius: 3px; cursor: pointer; + text-decoration: none; + display: inline-block; + margin: 10px; } -button:hover { - background-color: #0056b3; -} - -#login-message { - margin-top: 10px; - color: red; +.button:hover, button:hover { + background: #0056b3; } diff --git a/myappvs/src/main/resources/static/discussion.html b/myappvs/src/main/resources/static/discussion.html new file mode 100644 index 0000000..cf55fc3 --- /dev/null +++ b/myappvs/src/main/resources/static/discussion.html @@ -0,0 +1,237 @@ + + + + + + Discussion Forum + + + + + +
      + + +
      + Welcome, User +
      +
      +

      Discussion Forum

      + +
      +
      + + +
      +
      + + +
      + +
      + +
      + +
      + + diff --git a/myappvs/src/main/resources/static/enrollments.html b/myappvs/src/main/resources/static/enrollments.html new file mode 100644 index 0000000..1124d89 --- /dev/null +++ b/myappvs/src/main/resources/static/enrollments.html @@ -0,0 +1,177 @@ + + + + + + Enrollments + + + +
      + +
      + Welcome, User +
      +
      +

      Enrollments

      +
      +

      +

      +
      + + + + + + + + + + + + +
      Enrollment IDCourse NameCourse DescriptionDeleteView Details
      + + + + diff --git a/myappvs/src/main/resources/static/events.html b/myappvs/src/main/resources/static/events.html new file mode 100644 index 0000000..19ff078 --- /dev/null +++ b/myappvs/src/main/resources/static/events.html @@ -0,0 +1,193 @@ + + + + Event Calendar + + + + + + + +
      +

      Event Calendar

      + +
      +
      +
      +
      +

      Events

      +
        +

        Save New Event

        + + +
        + + +
        + + +
        + +
        +
        + + \ No newline at end of file diff --git a/myappvs/src/main/resources/static/home.html b/myappvs/src/main/resources/static/home.html new file mode 100644 index 0000000..2578ddf --- /dev/null +++ b/myappvs/src/main/resources/static/home.html @@ -0,0 +1,142 @@ + + + + + + Home Page + + + +
        +
        + Welcome, User +
        + +
        + +
        +

        Welcome to the Home Page

        +
        + + + + + + + + +
        +
        + + + + diff --git a/myappvs/src/main/resources/static/index.html b/myappvs/src/main/resources/static/index.html index 32adb8b..8b39808 100644 --- a/myappvs/src/main/resources/static/index.html +++ b/myappvs/src/main/resources/static/index.html @@ -3,14 +3,16 @@ - Welcome + Course Management System + -

        Welcome to My App

        -

        Please choose an action:

        - +
        +

        Welcome to the Course Management System

        + +
        - + \ No newline at end of file diff --git a/myappvs/src/main/resources/static/instructor.html b/myappvs/src/main/resources/static/instructor.html new file mode 100644 index 0000000..d5af4e2 --- /dev/null +++ b/myappvs/src/main/resources/static/instructor.html @@ -0,0 +1,47 @@ + + + + + + Instructor Details + + + +
        +

        Instructor Details

        +
        + +
        +
        + + + diff --git a/myappvs/src/main/resources/static/login.html b/myappvs/src/main/resources/static/login.html index 8acc683..e1ed2a3 100644 --- a/myappvs/src/main/resources/static/login.html +++ b/myappvs/src/main/resources/static/login.html @@ -7,7 +7,7 @@

        Login

        -
        +
        @@ -17,43 +17,46 @@

        Login

        - Don't have an account? Wanna a Signup
        + +

        Don't have an account? Sign Up

        + - + \ No newline at end of file diff --git a/myappvs/src/main/resources/static/profile.html b/myappvs/src/main/resources/static/profile.html new file mode 100644 index 0000000..60f5e81 --- /dev/null +++ b/myappvs/src/main/resources/static/profile.html @@ -0,0 +1,266 @@ + + + + + + User Profile + + + +
        +

        User Profile

        +

        Email:

        +

        Name:

        +

        Student ID:

        +

        Phone Number:

        + + + + +
        + + + + + + + + + + diff --git a/myappvs/src/main/resources/static/rentals.html b/myappvs/src/main/resources/static/rentals.html new file mode 100644 index 0000000..9d93753 --- /dev/null +++ b/myappvs/src/main/resources/static/rentals.html @@ -0,0 +1,30 @@ + + + + + + Inventory + + + +

        Inventory List

        + + + + + + + + + + + + + + + + + +
        IDNameTypeStatus
        1ProjectorAudio-VisualAvailable
        + + \ No newline at end of file diff --git a/myappvs/src/main/resources/static/signup.html b/myappvs/src/main/resources/static/signup.html index 1784c92..4ce66ae 100644 --- a/myappvs/src/main/resources/static/signup.html +++ b/myappvs/src/main/resources/static/signup.html @@ -4,74 +4,125 @@ Signup Page + -

        Signup

        -
        -
        - - -
        -
        - - -
        -
        - - -
        -
        - - -
        -
        - - -
        - -
        +
        +

        Signup

        +
        +
        + + +
        +
        + + + +
        +
        + + +
        +
        + + + +
        +
        + + + +
        + +
        +
        diff --git a/myappvs/src/main/resources/static/studentAccounts.html b/myappvs/src/main/resources/static/studentAccounts.html new file mode 100644 index 0000000..dc8a887 --- /dev/null +++ b/myappvs/src/main/resources/static/studentAccounts.html @@ -0,0 +1,113 @@ + + + + + + Student Account Details + + + + +
        +

        Student Account Details

        +
        + +
        +
        + + + diff --git a/myappvs/src/main/resources/static/studentNotes.html b/myappvs/src/main/resources/static/studentNotes.html new file mode 100644 index 0000000..185aee9 --- /dev/null +++ b/myappvs/src/main/resources/static/studentNotes.html @@ -0,0 +1,212 @@ + + + + + + Student Notes + + + +
        + +
        + Welcome, User +
        +
        +

        Student Notes

        +
        +

        Add a New Note

        +
        + + + + +
        +
        + + + + + + + + + + + +
        Note TitleNote ContentCourse IDActions
        + + + + diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/profile/ProfileControllerTest.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/profile/ProfileControllerTest.java new file mode 100644 index 0000000..3b3825c --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/profile/ProfileControllerTest.java @@ -0,0 +1,117 @@ +package com.CourseManagementSystem.myappvs.profile; + +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.Map; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class ProfileControllerTest { + + @InjectMocks + private Profilecontroller profileController; + + @Mock + private Studentrepository studentRepository; + + @Mock + private Authentication authentication; + + @Mock + private SecurityContext securityContext; + + @Test + void testShowProfileAuthenticated() { + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + when(authentication.isAuthenticated()).thenReturn(true); + when(authentication.getName()).thenReturn("test@example.com"); + + Student student = new Student(); + student.setEmailId("test@example.com"); + student.setName("Test User"); + student.setStudentIdNumber((long) 12345); + student.setNumber("1234567890"); + + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.of(student)); + + ResponseEntity> response = profileController.showProfile(); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals("test@example.com", response.getBody().get("emailId")); + assertEquals("Test User", response.getBody().get("name")); + } + + @Test + void testShowProfileNotAuthenticated() { + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + when(authentication.isAuthenticated()).thenReturn(false); + + ResponseEntity> response = profileController.showProfile(); + + assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); + } + + @Test + void testUpdateProfile() { + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + when(authentication.isAuthenticated()).thenReturn(true); + when(authentication.getName()).thenReturn("test@example.com"); + + Student existingStudent = new Student(); + existingStudent.setEmailId("test@example.com"); + existingStudent.setName("Old Name"); + existingStudent.setNumber("1234567890"); + + Student updatedStudent = new Student(); + updatedStudent.setName("New Name"); + updatedStudent.setNumber("0987654321"); + + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.of(existingStudent)); + + ResponseEntity response = profileController.updateProfile(updatedStudent); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + verify(studentRepository).save(existingStudent); + assertEquals("New Name", existingStudent.getName()); + assertEquals("0987654321", existingStudent.getNumber()); + } + + @Test + void testDeleteProfile() { + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + when(authentication.isAuthenticated()).thenReturn(true); + when(authentication.getName()).thenReturn("test@example.com"); + + Student student = new Student(); + student.setEmailId("test@example.com"); + + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.of(student)); + + ResponseEntity response = profileController.deleteProfile(); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + verify(studentRepository).delete(student); + } +} \ No newline at end of file diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/user/LoginServiceTest.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/user/LoginServiceTest.java new file mode 100644 index 0000000..887972f --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/user/LoginServiceTest.java @@ -0,0 +1,112 @@ +package com.CourseManagementSystem.myappvs.user; + +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.core.userdetails.UserDetailsService; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class LoginServiceTest { + + @Mock + private Studentrepository studentRepository; + + @Mock + private PasswordEncoder passwordEncoder; + + @Mock + private Userserviceimpl userService; + + @InjectMocks + private Loginservice loginservice; + + private Student student; + private Student existingStudent; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + student = new Student(); + student.setEmailId("test@example.com"); + student.setPassword("password"); + + existingStudent = new Student(); + existingStudent.setEmailId("test@example.com"); + existingStudent.setPassword("encodedPassword"); + existingStudent.setName("Test User"); + } + + @Test + void loginInvalidCredentialsTest() { + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.empty()); + + Exception exception = assertThrows(Exception.class, () -> { + loginservice.login(student); + }); + + assertEquals("Invalid credentials", exception.getMessage()); + verify(studentRepository, times(1)).findByEmailId("test@example.com"); + } + + @Test + void addStudentTest() { + when(studentRepository.save(any(Student.class))).thenReturn(student); + + Student savedStudent = loginservice.addStudent(student); + + assertNotNull(savedStudent); + assertEquals("test@example.com", savedStudent.getEmailId()); + verify(studentRepository, times(1)).save(student); + } + + @Test + void addUserTest() { + student.setPassword("rawPassword"); + when(passwordEncoder.encode("rawPassword")).thenReturn("encodedPassword"); + when(studentRepository.save(any(Student.class))).thenReturn(student); + + Student savedStudent = loginservice.addUser(student); + + assertNotNull(savedStudent); + assertEquals("encodedPassword", savedStudent.getPassword()); + verify(passwordEncoder, times(1)).encode("rawPassword"); + verify(studentRepository, times(1)).save(student); + } + + @Test + void getStudentByEmailTest() { + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.of(student)); + + Student foundStudent = loginservice.getStudentByEmail("test@example.com"); + + assertNotNull(foundStudent); + assertEquals("test@example.com", foundStudent.getEmailId()); + verify(studentRepository, times(1)).findByEmailId("test@example.com"); + } + + @Test + void getStudentByEmailNotFoundTest() { + when(studentRepository.findByEmailId("test@example.com")).thenReturn(Optional.empty()); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> { + loginservice.getStudentByEmail("test@example.com"); + }); + + assertEquals("Student not found", exception.getMessage()); + verify(studentRepository, times(1)).findByEmailId("test@example.com"); + } + +} From c454e2697de568273101cc197d486ee394df8bf6 Mon Sep 17 00:00:00 2001 From: Shivangi Patel Date: Mon, 10 Jun 2024 22:52:38 -0500 Subject: [PATCH 4/5] Added Test Cases --- .idea/modules.xml | 1 + myappvs/pom.xml | 21 ++- .../courseCatalog/EnrollmentService.java | 8 + .../myappvs/courseDescription/Project.java | 27 +++ .../myappvs/discussion/Discussion.java | 14 +- .../discussion/DiscussionController.java | 37 ++-- .../myappvs/discussion/DiscussionService.java | 20 +-- .../myappvs/instructor/Instructor.java | 2 + .../security/Auth/AuthenticationService.java | 5 +- .../myappvs/student/Studentrepository.java | 2 + .../studentAccounts/BalanceUpdateRequest.java | 15 ++ .../studentAccounts/StudentAccountDto.java | 2 + .../StudentAccountService.java | 43 ++++- .../studentAccounts/StudentAccounts.java | 8 + .../StudentAccountsMapper.java | 3 + .../studentAccountsController.java | 64 ++++++- myappvs/src/main/resources/import.sql | 41 +++-- .../resources/static/courseDescription.html | 158 ++++++++++++------ .../src/main/resources/static/discussion.html | 36 +++- .../resources/static/studentAccounts.html | 147 +++++++++++++--- .../CourseDescriptionTests.java | 80 +++++++++ .../myappvs/discussion/DiscussionTests.java | 100 +++++++++++ .../myappvs/instructor/InstructorTests.java | 44 +++++ .../studentAccounts/StudentAccountsTests.java | 127 ++++++++++++++ 24 files changed, 844 insertions(+), 161 deletions(-) create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/Project.java create mode 100644 myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/BalanceUpdateRequest.java create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionTests.java create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/discussion/DiscussionTests.java create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/instructor/InstructorTests.java create mode 100644 myappvs/src/test/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsTests.java diff --git a/.idea/modules.xml b/.idea/modules.xml index 1047acb..5d29fd0 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,7 @@ + \ No newline at end of file diff --git a/myappvs/pom.xml b/myappvs/pom.xml index db44942..c2bfc12 100644 --- a/myappvs/pom.xml +++ b/myappvs/pom.xml @@ -132,7 +132,26 @@ springdoc-openapi-starter-webmvc-ui 2.1.0 - + + org.powermock + powermock-api-mockito2 + 2.0.9 + test + + + org.powermock + powermock-module-junit4 + 2.0.9 + test + + + org.mockito + mockito-core + 4.0.0 + test + + + diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java index 7a37d0b..e6b1024 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseCatalog/EnrollmentService.java @@ -2,6 +2,8 @@ import java.util.List; import java.util.Optional; + +import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,6 +22,8 @@ public class EnrollmentService { @Autowired private CatalogRepository catalogRepo; + @Autowired + private StudentAccountService studentAccountService; @Autowired private EntityManager entityManager; @@ -47,6 +51,8 @@ public void enrollStudent(String email, Long courseId) { System.out.println(enrollment); repo.save(enrollment); + double courseCost = course.getCourseCredits() * 900; + studentAccountService.updateBalanceOnEnrollment(student.getStudentIdNumber(), courseCost, course.getCourseId()); } public Long getStudentId(String email) { @@ -74,6 +80,8 @@ public void deleteEnrollmentById(Long id) { Optional enrollmentOpt = repo.findById(id); if (enrollmentOpt.isPresent()) { Enrollment enrollment = enrollmentOpt.get(); + double courseCost = enrollment.getCatalog().getCourseCredits() * 900; + studentAccountService.revertBalanceOnEnrollmentDeletion(enrollment.getStudent().getStudentIdNumber(), courseCost, enrollment.getCatalog().getCourseId()); enrollment.setStudent(null); // Break relationship enrollment.setCatalog(null); // Break relationship repo.delete(enrollment); diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/Project.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/Project.java new file mode 100644 index 0000000..285689b --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/courseDescription/Project.java @@ -0,0 +1,27 @@ +package com.CourseManagementSystem.myappvs.courseDescription; + +import com.CourseManagementSystem.myappvs.student.Student; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + + +@Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Setter +public class Project { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String topic; + + @ManyToOne + @JoinColumn(name = "student_id") + private Student studentId; +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java index 0db4551..9022392 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/Discussion.java @@ -1,8 +1,7 @@ package com.CourseManagementSystem.myappvs.discussion; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; +import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.time.LocalDate; @@ -14,15 +13,14 @@ @Data @NoArgsConstructor @AllArgsConstructor +@Getter +@Setter @Document(collection = "discussion") public class Discussion { -// @Id -// private Long id; - - + @Id + private String id; private LocalDate date; - private String topicHeading; private Long courseId; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java index 6b2ebd5..f3df581 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionController.java @@ -70,37 +70,20 @@ public Discussion createDiscussion(@Validated @RequestBody Discussion discussion } return null; } + @PutMapping("/update/{id}") - public Discussion updateDiscussion(@PathVariable String emailId, @RequestBody Discussion discussionDetails) { - return discussionService.updateDiscussion(emailId, discussionDetails); + public Discussion updateDiscussion(@PathVariable String id, @RequestBody Discussion discussionDetails) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated()) { + String emailId = authentication.getName(); + return discussionService.updateDiscussion(id, emailId, discussionDetails); + } + return null; } @DeleteMapping("/delete/{id}") - public void deleteDiscussion(@PathVariable Long id) { - discussionService.deleteDiscussion(String.valueOf(id)); + public void deleteDiscussion(@PathVariable String id) { + discussionService.deleteDiscussionById(String.valueOf(id)); } -// @PostMapping("/testInsert") -// public Discussion insertTestDiscussion() { -// Student student = new Student(); -// student.setStudentIdNumber(1L); -// student.setEmailId("student@example.com"); -// student.setName("John Doe"); -// -// Catalog catalog = new Catalog(); -// catalog.setCourseId(1L); -// catalog.setCourseId(101L); -// catalog.setCourseName("Computer Science"); -// -// -// Discussion discussion = new Discussion(); -// //discussion.setId(1L); -// discussion.setDate(LocalDate.now()); -// discussion.setTopicHeading("Introduction to CS101"); -// -// discussion.setCourseId(catalog.getCourseId()); -// discussion.setDescription("Discussion about the introduction to CS101 course."); -// -// return discussionService.saveDiscussion(discussion); -// } } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java index b363ddb..825b409 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/discussion/DiscussionService.java @@ -34,24 +34,15 @@ public Discussion saveDiscussion(Discussion discussion) { return discussionRepository.save(discussion); } - public void deleteDiscussion(String emailId) { - Optional optionalDiscussion = discussionRepository.findByEmailId(emailId); - if (optionalDiscussion.isPresent()) { - Discussion discussion = optionalDiscussion.get(); - if (discussion.getEmailId().equals(emailId)) { - discussionRepository.deleteByEmailId(emailId); - } else { - throw new SecurityException("You are not authorized to delete this discussion."); - } - } else { - throw new EntityNotFoundException("Discussion not found"); - } + public void deleteDiscussionById(String id) { + discussionRepository.deleteById(id); } - public Discussion updateDiscussion(String emailId, Discussion discussionDetails) { - Optional optionalDiscussion = discussionRepository.findByEmailId(emailId); + public Discussion updateDiscussion(String id, String emailId, Discussion discussionDetails) { + Optional optionalDiscussion = discussionRepository.findById(id); if (optionalDiscussion.isPresent()) { Discussion discussion = optionalDiscussion.get(); + // Check if the email matches the creator's email if (discussion.getEmailId().equals(emailId)) { discussion.setTopicHeading(discussionDetails.getTopicHeading()); discussion.setDescription(discussionDetails.getDescription()); @@ -63,4 +54,5 @@ public Discussion updateDiscussion(String emailId, Discussion discussionDetails) throw new EntityNotFoundException("Discussion not found"); } } + } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java index e0cf202..1b17930 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/instructor/Instructor.java @@ -7,11 +7,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import java.sql.Time; @Entity @Getter +@Setter @NoArgsConstructor @AllArgsConstructor @Table(name = "Instructor") diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java index a0ea20e..d60d84f 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/security/Auth/AuthenticationService.java @@ -6,6 +6,7 @@ import com.CourseManagementSystem.myappvs.security.Service.Jwtservice; import com.CourseManagementSystem.myappvs.student.Student; import com.CourseManagementSystem.myappvs.student.Studentrepository; +import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccountService; import com.CourseManagementSystem.myappvs.user.Role; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +22,7 @@ public class AuthenticationService { @Autowired private final Studentrepository srepository; - + private final StudentAccountService studentAccountService; @Autowired private final PasswordEncoder passwordEncoder; @Autowired @@ -48,6 +49,7 @@ public AuthenticationResponse register(Registerrequest request) { * urepository.save(user); */ + studentAccountService.createStudentAccount(student); var jwtToken = jwtService.generateToken(student); return AuthenticationResponse.builder().token(jwtToken).build(); } @@ -60,4 +62,5 @@ public AuthenticationResponse authenticate(Authenticationrequest request) { var jwtToken = jwtService.generateToken(user); return AuthenticationResponse.builder().token(jwtToken).build(); } + } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java index 20a1b1e..40757ea 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/student/Studentrepository.java @@ -14,4 +14,6 @@ public interface Studentrepository extends JpaRepository { boolean existsByEmailId(String email); boolean existsByStudentIdNumber(Long studentIdNumber); + @Query("SELECT s.studentIdNumber FROM Student s WHERE s.emailId = :emailId") + Long findIdByEmailId(@Param("emailId") String emailId); } \ No newline at end of file diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/BalanceUpdateRequest.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/BalanceUpdateRequest.java new file mode 100644 index 0000000..9f11f37 --- /dev/null +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/BalanceUpdateRequest.java @@ -0,0 +1,15 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +public class BalanceUpdateRequest { + private double balanceUpdateAmount; + + // Constructors, getters, and setters + + public double getBalanceUpdateAmount() { + return balanceUpdateAmount; + } + + public void setBalance(double balanceUpdateAmount) { + this.balanceUpdateAmount = balanceUpdateAmount; + } +} diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java index 81bbf8d..cfa9cb1 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountDto.java @@ -1,5 +1,6 @@ package com.CourseManagementSystem.myappvs.studentAccounts; +import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; import com.CourseManagementSystem.myappvs.student.Student; import jakarta.persistence.Column; import jakarta.persistence.Id; @@ -18,6 +19,7 @@ public class StudentAccountDto { private Long studentAccountsId; private Student studentId; + private Catalog courseId; private double balance; diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java index 791d672..37170a9 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountService.java @@ -1,7 +1,9 @@ package com.CourseManagementSystem.myappvs.studentAccounts; +import com.CourseManagementSystem.myappvs.student.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class StudentAccountService { @@ -15,9 +17,46 @@ public StudentAccountService(StudentAccountsRepository studentAccountsRepository public StudentAccountDto getStudentAccountsDetail(Long studentId) { - StudentAccounts studentAccounts= studentAccountsRepository + StudentAccounts studentAccounts = studentAccountsRepository .findByStudentId_studentIdNumber(studentId) - .orElseThrow(()-> new RuntimeException("Student Doesn't Exist")); + .orElseThrow(() -> new RuntimeException("Student Doesn't Exist")); return StudentAccountsMapper.maptoStudentAccountDto(studentAccounts); } + + @Transactional + public void updateBalanceOnEnrollment(Long id, double balanceUpdateAmount, Long courseId) { + StudentAccounts studentAccount = studentAccountsRepository.findByStudentId_studentIdNumber(id) + .orElseThrow(() -> new IllegalArgumentException("Student account not found")); + + if (studentAccount != null) { + studentAccount.setBalance(studentAccount.getBalance() - balanceUpdateAmount); + studentAccountsRepository.save(studentAccount); + } else { + throw new RuntimeException("Student account not found"); + } + studentAccountsRepository.save(studentAccount); + } + + @Transactional + public void createStudentAccount(Student student) { + StudentAccounts studentAccount = new StudentAccounts(); + studentAccount.setStudentAccountsId(student.getStudentIdNumber()); + studentAccount.setStudentId(student); + studentAccount.setBalance(0); + studentAccountsRepository.save(studentAccount); + } + + @Transactional + public void revertBalanceOnEnrollmentDeletion(Long studentId, double amount, Long courseId) { + StudentAccounts studentAccount = studentAccountsRepository.findByStudentId_studentIdNumber(studentId) + .orElseThrow(() -> new IllegalArgumentException("Student account not found")); + + if (studentAccount != null) { + studentAccount.setBalance(studentAccount.getBalance() + amount); + studentAccountsRepository.save(studentAccount); + } else { + throw new RuntimeException("Student account not found"); + } + } + } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java index db2871d..cfd4b66 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccounts.java @@ -1,14 +1,17 @@ package com.CourseManagementSystem.myappvs.studentAccounts; +import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; import com.CourseManagementSystem.myappvs.student.Student; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.ToString.Exclude; @Entity @Getter +@Setter @NoArgsConstructor @AllArgsConstructor @Table(name = "Student_Accounts") @@ -23,6 +26,11 @@ public class StudentAccounts { @JoinColumn(name = "student_id", referencedColumnName = "studentIdNumber") private Student studentId; + @Exclude + @ManyToOne + @JoinColumn(name = "course_id", referencedColumnName = "courseId") + private Catalog courseId; + private double balance; } diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java index f252efd..7bb30e7 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsMapper.java @@ -7,7 +7,9 @@ public static StudentAccounts maptoStudentAccounts(StudentAccountDto studentAcco StudentAccounts studentAccounts = new StudentAccounts( studentAccountDto.getStudentAccountsId(), studentAccountDto.getStudentId(), + studentAccountDto.getCourseId(), studentAccountDto.getBalance() + ); return studentAccounts; } @@ -15,6 +17,7 @@ public static StudentAccountDto maptoStudentAccountDto(StudentAccounts studentAc StudentAccountDto studentAccountDto= new StudentAccountDto( studentAccounts.getStudentAccountsId(), studentAccounts.getStudentId(), + studentAccounts.getCourseId(), studentAccounts.getBalance() ); diff --git a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java index 5e5ff4c..368db63 100644 --- a/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java +++ b/myappvs/src/main/java/com/CourseManagementSystem/myappvs/studentAccounts/studentAccountsController.java @@ -1,13 +1,21 @@ package com.CourseManagementSystem.myappvs.studentAccounts; +import com.CourseManagementSystem.myappvs.courseCatalog.CourseEnrollmentRequest; +import com.CourseManagementSystem.myappvs.courseCatalog.Enrollment; import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionDto; +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.student.Studentrepository; import com.CourseManagementSystem.myappvs.studentAccounts.StudentAccountService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; @RestController @RequestMapping("/api/studentaccounts") @@ -15,18 +23,60 @@ public class studentAccountsController { private StudentAccountService studentAccountService; + @Autowired + private Studentrepository studentRepo; + public studentAccountsController(StudentAccountService studentAccountService) { this.studentAccountService = studentAccountService; } @GetMapping("/{id}") public ResponseEntity getstudentAccountsbyId(@PathVariable Long id){ + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + // Extract user email from authentication principal + String emailId = authentication.getName(); + System.out.println("email id the user is "+emailId); - try { StudentAccountDto studentAccountDto = studentAccountService.getStudentAccountsDetail(id); return ResponseEntity.ok(studentAccountDto); - } catch (RuntimeException e) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // Return 404 Not Found + + + } + return null; + } + + @PostMapping("/updateBalance") + public ResponseEntity updateBalance(@RequestBody StudentAccountDto request) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + String emailId = authentication.getName(); + + double balanceUpdateAmount = request.getBalance(); + Long studentId = request.getStudentId().getStudentIdNumber(); + Long coursId= request.getCourseId().getCourseId(); + + //studentAccountService.updateBalance(studentId, balanceUpdateAmount,courseId); + + studentAccountService.updateBalanceOnEnrollment(studentId,balanceUpdateAmount,coursId); + return ResponseEntity.ok().build(); + } else { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } + + @GetMapping("/getId") + public Long getStudentId() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.isAuthenticated()) { + String emailId = authentication.getName(); + return studentRepo.findIdByEmailId(emailId); + } + return null; + } + + } diff --git a/myappvs/src/main/resources/import.sql b/myappvs/src/main/resources/import.sql index 3480131..622fb8c 100644 --- a/myappvs/src/main/resources/import.sql +++ b/myappvs/src/main/resources/import.sql @@ -1,16 +1,19 @@ -- Insert student data -INSERT INTO students(student_id_number, name, email_id, number) VALUES (123456789, 'ABC', 'ABC@example.com', '2246387532'); -INSERT INTO students(student_id_number, name, email_id, number) VALUES (987654321, 'CDE', 'CDE@example.com', '2257865437'); -INSERT INTO students(student_id_number, name, email_id, number) VALUES (114365567, 'FGH', 'FGH@example.com', '2235679043'); -INSERT INTO students(student_id_number, name, email_id, number) VALUES (978563412, 'IJK', 'IJK@example.com', '2247864538'); +INSERT INTO students(student_id_number, name, email_id, number,role, password) VALUES (123456789, 'ABC', 'ABC@example.com', '2246387532', 'USER', 'ABC@123'); +INSERT INTO students(student_id_number, name, email_id, number,role, password) VALUES (987654321, 'CDE', 'CDE@example.com', '2257865437', 'USER', 'CDE@123'); +INSERT INTO students(student_id_number, name, email_id, number,role, password) VALUES (114365567, 'FGH', 'FGH@example.com', '2235679043', 'USER', 'FGH@123'); +INSERT INTO students(student_id_number, name, email_id, number,role, password) VALUES (978563412, 'IJK', 'IJK@example.com', '2247864538', 'USER', 'IJK@123'); + + + +---- Insert user data +--INSERT INTO users(emailId, password) VALUES ('ABC@example.com', 'ABC@123'); +--INSERT INTO Users(emailId, password) VALUES ('CDE@example.com', 'CDE@123'); +--INSERT INTO Users(emailId, password) VALUES ('FGH@example.com', 'FGH@123'); +--INSERT INTO Users(emailId, password) VALUES ('IJK@example.com', 'IJK@123'); --- Insert user data -INSERT INTO users(emailId, password) VALUES ('ABC@example.com', 'ABC@123'); -INSERT INTO Users(emailId, password) VALUES ('CDE@example.com', 'CDE@123'); -INSERT INTO Users(emailId, password) VALUES ('FGH@example.com', 'FGH@123'); -INSERT INTO Users(emailId, password) VALUES ('IJK@example.com', 'IJK@123'); -- Insert advisor data INSERT INTO advisors(name, email) VALUES ('alice', 'alice@test.com') @@ -24,11 +27,6 @@ INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789 INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); -- Insert into instructor table -<<<<<<< HEAD -INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (1, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); -INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (2, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); -INSERT INTO Instructor(instructorId, instructorName, instructorDescription, meetingHours, instructorCabinLocation) VALUES (3, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); -======= INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (201, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101'); INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (202, 'Alice Smith', 'Data science expert', '10:00:00', 'Building B, Room 201'); INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (203, 'David Brown', 'Network security specialist', '13:00:00', 'Building C, Room 301'); @@ -37,19 +35,20 @@ INSERT INTO course_catalog(course_id, course_name, course_description, instructo INSERT INTO course_catalog(course_id, course_name, course_description, instructor_id, course_credits) VALUES (102, 'Machine Learning', 'Advanced machine learning concepts', 202, 4); -- Insert into Course Description table -INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'Introduction to Programming', 'Lecture Slides'); -INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'Advanced Database Management', 'Textbook, Exercises'); +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (1, 101, 201, 'Room A', '2024-05-10', '09:00:00', 'https://meet.google.com/ket-hpvy-zmh', 'http://knking.com/books/c2/'); +INSERT INTO course_description(course_description_id, course_id, instructor_id, room, date, time, meeting_info, materials) VALUES (2, 102, 202, 'Room B', '2024-05-12', '14:00:00', 'https://meet.google.com/ket-hpvy-zmh', 'https://xuanhien.wordpress.com/wp-content/uploads/2011/04/database-management-systems-raghu-ramakrishnan.pdf'); --INSERT INTO course_description(courseDescriptionId, courseId, instructorId, room, date, time, meeting_info, materials) VALUES (3, 103, 203, 'Room C', '2024-05-15', '11:00:00', 'Machine Learning Fundamentals', 'Online Resources'); -- Insert into Student Account table -INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (1, 123456789, 100.00); -INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (2, 987654321, 200.00); -INSERT INTO student_accounts(student_accounts_id, student_id, balance) VALUES (3, 114365567, 150.00); ->>>>>>> f1af734651c4217e6638d28f4dea30cb11ce7aee +INSERT INTO student_accounts(student_accounts_id, student_id,course_id, balance) VALUES (1, 123456789,101, 100.00); +INSERT INTO student_accounts(student_accounts_id, student_id,course_id, balance) VALUES (2, 987654321,101, 200.00); +INSERT INTO student_accounts(student_accounts_id, student_id,course_id,balance) VALUES (3, 114365567,101, 150.00); +INSERT INTO student_accounts(student_accounts_id, student_id,course_id, balance) VALUES (4, 978563412,102, 300.00); -- Insert initial data into the Equipment table INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (1, 'Laptop 1', 'Laptop', 'Available'); INSERT INTO inventory(resource_id, resource_name, type, status) VALUES (2, 'Projector 1', 'Projector', 'Rented'); -- Insert initial data into the Rentals table -INSERT INTO rentals (allocation_id, class_id, resource_id, allocation_date, return_date) VALUES (1, 101, 2, '2024-04-01', '2024-04-10'); \ No newline at end of file +INSERT INTO rentals (allocation_id, class_id, resource_id, allocation_date, return_date) VALUES (1, 101, 2, '2024-04-01', '2024-04-10'); + diff --git a/myappvs/src/main/resources/static/courseDescription.html b/myappvs/src/main/resources/static/courseDescription.html index 8cfcb7d..673370e 100644 --- a/myappvs/src/main/resources/static/courseDescription.html +++ b/myappvs/src/main/resources/static/courseDescription.html @@ -42,6 +42,17 @@ p { margin: 10px 0; } + .project-form { + margin-top: 20px; + } + .project-form input[type="text"] { + padding: 10px; + margin-right: 10px; + width: calc(100% - 140px); + } + .project-form button { + padding: 10px 20px; + } @@ -50,7 +61,6 @@ Home Enrollments -
        Welcome, User @@ -60,72 +70,122 @@

        Course Description

        +
        + + + +
        + }); + diff --git a/myappvs/src/main/resources/static/discussion.html b/myappvs/src/main/resources/static/discussion.html index cf55fc3..0977a3e 100644 --- a/myappvs/src/main/resources/static/discussion.html +++ b/myappvs/src/main/resources/static/discussion.html @@ -104,6 +104,7 @@ const token = localStorage.getItem('token'); if (!token) { window.location.href = 'login.html'; + return; } const authHeader = { headers: { Authorization: `Bearer ${token}` } }; @@ -132,7 +133,7 @@
        ${discussion.topicHeading} - +
        @@ -166,9 +167,9 @@ .catch(error => console.error('Error creating discussion:', error)); }); - window.deleteDiscussion = function ( emailId) { + window.deleteDiscussion = function (id) { if (confirm('Are you sure you want to delete this discussion?')) { - axios.delete(`http://localhost:8585/discussions/delete/${emailId}`, authHeader) + axios.delete(`http://localhost:8585/discussions/delete/${id}`, authHeader) .then(response => { loadDiscussions(); }) @@ -177,6 +178,8 @@ }; window.showUpdateForm = function (id, topicHeading, description) { + const form = document.getElementById('createThreadForm'); + form.style.display = 'block'; document.getElementById("topicHeading").value = topicHeading; document.getElementById("description").value = description; document.getElementById("submitDiscussion").innerText = 'Update'; @@ -187,20 +190,39 @@ description: document.getElementById("description").value }; - axios.put(`http://localhost:8585/discussions/updateDiscussion/${courseId}`, updatedDiscussionData, authHeader) + axios.put(`http://localhost:8585/discussions/update/${id}`, updatedDiscussionData, authHeader) .then(response => { loadDiscussions(); document.getElementById("topicHeading").value = ''; document.getElementById("description").value = ''; + document.getElementById("createThreadForm").style.display = 'none'; document.getElementById("submitDiscussion").innerText = 'Submit'; - document.getElementById("submitDiscussion").onclick = function () { - document.getElementById("submitDiscussion").click(); - }; + document.getElementById("submitDiscussion").onclick = submitNewDiscussion; }) .catch(error => console.error('Error updating discussion:', error)); }; }; + function submitNewDiscussion() { + const emailId = document.getElementById('welcomeMessage').innerText.replace('Welcome, ', ''); + const discussionData = { + date: new Date().toISOString().split('T')[0], // current date in YYYY-MM-DD format + topicHeading: document.getElementById("topicHeading").value, + description: document.getElementById("description").value, + courseId: courseId, + emailId: emailId + }; + + axios.post('http://localhost:8585/discussions/create', discussionData, authHeader) + .then(response => { + loadDiscussions(); + document.getElementById("topicHeading").value = ''; + document.getElementById("description").value = ''; + document.getElementById("createThreadForm").style.display = 'none'; + }) + .catch(error => console.error('Error creating discussion:', error)); + } + loadDiscussions(); }); diff --git a/myappvs/src/main/resources/static/studentAccounts.html b/myappvs/src/main/resources/static/studentAccounts.html index dc8a887..f7da264 100644 --- a/myappvs/src/main/resources/static/studentAccounts.html +++ b/myappvs/src/main/resources/static/studentAccounts.html @@ -10,20 +10,58 @@ font-family: Arial, sans-serif; margin: 0; padding: 0; - background-color: #f4f4f4; + background-color: #e9ecef; + } + + .toolbar { + background-color: #007bff; + color: white; + padding: 10px; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + + .toolbar a { + color: white; + text-decoration: none; + margin: 0 15px; + padding: 10px 20px; + border-radius: 5px; + transition: background-color 0.3s ease; + } + + .toolbar a:hover { + background-color: #0056b3; + } + + .toolbar button { + background-color: #dc3545; + color: white; + border: none; + padding: 10px 20px; + cursor: pointer; + border-radius: 5px; + transition: background-color 0.3s ease; + } + + .toolbar button:hover { + background-color: #c82333; } .container { max-width: 800px; margin: 50px auto; - background-color: #fff; + background-color: #ffffff; padding: 20px; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } h1 { - color: #333; + color: #343a40; + text-align: center; } p { @@ -38,20 +76,36 @@ } table, th, td { - border: 1px solid black; + border: 1px solid #dee2e6; } th, td { - padding: 8px; + padding: 12px; text-align: left; } th { - background-color: #f4f4f4; + background-color: #007bff; + color: white; + } + + tr:hover { + background-color: #f1f1f1; } +
        + +
        + Welcome, User + +
        +

        Student Account Details

        @@ -59,19 +113,63 @@

        Student Account Details

        diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionTests.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionTests.java new file mode 100644 index 0000000..3f2258e --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/courseDescription/CourseDescriptionTests.java @@ -0,0 +1,80 @@ +package com.CourseManagementSystem.myappvs.courseDescription; + +import com.CourseManagementSystem.myappvs.courseCatalog.Catalog; +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescription; +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionDto; +import com.CourseManagementSystem.myappvs.courseDescription.CourseDescriptionRepository; +import com.CourseManagementSystem.myappvs.courseDescription.impl.CourseDescriptionServiceImpl; +import com.CourseManagementSystem.myappvs.instructor.Instructor; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.sql.Time; +import java.util.Date; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; +public class CourseDescriptionTests { + + @Mock + private CourseDescriptionRepository courseDescriptionRepository; + + @InjectMocks + private CourseDescriptionServiceImpl courseDescriptionService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + public void testGetCourseDetail() { + // Given + Long courseId = 1L; + Catalog catalog = new Catalog(); + catalog.setCourseId(courseId); + Instructor instructor = new Instructor(); + instructor.setInstructorId(1L); + CourseDescription courseDescription = new CourseDescription( + 1L, + catalog, + instructor, + "Room 101", + new Date(), + new Time(System.currentTimeMillis()), + "Weekly meeting", + "Books and notebooks" + ); + + when(courseDescriptionRepository.findByCourseId_CourseId(courseId)).thenReturn(Optional.of(courseDescription)); + + // When + CourseDescriptionDto result = courseDescriptionService.getCourseDetail(courseId); + + // Then + assertNotNull(result); + assertEquals(courseDescription.getCourseDescriptionId(), result.getCourseDescriptionId()); + assertEquals(courseDescription.getRoom(), result.getRoom()); + assertEquals(courseDescription.getDate(), result.getDate()); + assertEquals(courseDescription.getTime(), result.getTime()); + assertEquals(courseDescription.getMeetingInfo(), result.getMeetingInfo()); + assertEquals(courseDescription.getMaterials(), result.getMaterials()); + } + + @Test + public void testGetCourseDetail_CourseDoesNotExist() { + // Given + Long courseId = 1L; + + when(courseDescriptionRepository.findByCourseId_CourseId(courseId)).thenReturn(Optional.empty()); + + // When / Then + assertThrows(RuntimeException.class, () -> { + courseDescriptionService.getCourseDetail(courseId); + }); + } +} diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/discussion/DiscussionTests.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/discussion/DiscussionTests.java new file mode 100644 index 0000000..63835e4 --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/discussion/DiscussionTests.java @@ -0,0 +1,100 @@ +package com.CourseManagementSystem.myappvs.discussion; + +import com.CourseManagementSystem.myappvs.discussion.Discussion; +import com.CourseManagementSystem.myappvs.discussion.DiscussionRepository; +import com.CourseManagementSystem.myappvs.discussion.DiscussionService; +import com.CourseManagementSystem.myappvs.student.Student; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@SpringBootTest +public class DiscussionTests { + + @Mock + private DiscussionRepository discussionRepository; + + @InjectMocks + private DiscussionService discussionService; + + @Test + public void testGetDiscussion() { + // Given + Long courseId = 1L; + List discussions = new ArrayList<>(); + + when(discussionRepository.findByCourseId(courseId)).thenReturn(discussions); + + // When + List result = discussionService.getDiscussion(courseId); + + // Then + assertNotNull(result); + assertEquals(discussions, result); + } + + @Test + public void testSaveDiscussion() { + // Given + Discussion discussion = new Discussion(); + discussion.setId("1"); + discussion.setTopicHeading("Test Discussion"); + discussion.setCourseId(1L); + discussion.setEmailId("test@example.com"); + + when(discussionRepository.save(any(Discussion.class))).thenReturn(discussion); + + // When + Discussion savedDiscussion = discussionService.saveDiscussion(discussion); + + // Then + assertNotNull(savedDiscussion); + assertEquals(discussion.getId(), savedDiscussion.getId()); + assertEquals(discussion.getTopicHeading(), savedDiscussion.getTopicHeading()); + assertEquals(discussion.getCourseId(), savedDiscussion.getCourseId()); + assertEquals(discussion.getEmailId(), savedDiscussion.getEmailId()); + } + + @Test + public void testDeleteDiscussionById() { + // Given + String id = "1"; + + // When + discussionService.deleteDiscussionById(id); + + // Then: Ensure no exceptions are thrown + } + + @Test + public void testUpdateDiscussion() { + // Given + String id = "1"; + String emailId = "test@example.com"; + Discussion existingDiscussion = new Discussion(); + existingDiscussion.setId("1"); + existingDiscussion.setEmailId(emailId); + Discussion updatedDiscussion = new Discussion(); + updatedDiscussion.setTopicHeading("Updated Discussion"); + + when(discussionRepository.findById(id)).thenReturn(Optional.of(existingDiscussion)); + when(discussionRepository.save(any(Discussion.class))).thenReturn(updatedDiscussion); + + // When + Discussion result = discussionService.updateDiscussion(id, emailId, updatedDiscussion); + + // Then + assertNotNull(result); + assertEquals(updatedDiscussion.getTopicHeading(), result.getTopicHeading()); + } + +} diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/instructor/InstructorTests.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/instructor/InstructorTests.java new file mode 100644 index 0000000..d23b632 --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/instructor/InstructorTests.java @@ -0,0 +1,44 @@ +package com.CourseManagementSystem.myappvs.instructor; +import com.CourseManagementSystem.myappvs.instructor.Instructor; +import com.CourseManagementSystem.myappvs.instructor.InstructorDto; +import com.CourseManagementSystem.myappvs.instructor.InstructorRepository; +import com.CourseManagementSystem.myappvs.instructor.InstructorService; +import com.CourseManagementSystem.myappvs.instructor.InstructorMapper; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.sql.Time; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; +public class InstructorTests { + + @Mock + private InstructorRepository instructorRepository; + + @InjectMocks + private InstructorService instructorService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + + @Test + public void testGetInstructorDetail_InstructorDoesNotExist() { + // Given + Long instructorId = 1L; + + when(instructorRepository.findByInstructorId(instructorId)).thenReturn(Optional.empty()); + + // When / Then + assertThrows(RuntimeException.class, () -> { + instructorService.getInstructorDetail(instructorId); + }); + } +} diff --git a/myappvs/src/test/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsTests.java b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsTests.java new file mode 100644 index 0000000..4bd01c7 --- /dev/null +++ b/myappvs/src/test/java/com/CourseManagementSystem/myappvs/studentAccounts/StudentAccountsTests.java @@ -0,0 +1,127 @@ +package com.CourseManagementSystem.myappvs.studentAccounts; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import com.CourseManagementSystem.myappvs.student.Student; +import com.CourseManagementSystem.myappvs.studentAccounts.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class StudentAccountsTests { + + @Mock + private StudentAccountsRepository studentAccountsRepository; + + @InjectMocks + private StudentAccountService studentAccountService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testGetStudentAccountsDetail() { + Long studentId = 1L; + StudentAccounts studentAccounts = new StudentAccounts(); + studentAccounts.setStudentAccountsId(studentId); + studentAccounts.setBalance(100.0); + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.of(studentAccounts)); + + StudentAccountDto result = studentAccountService.getStudentAccountsDetail(studentId); + + assertNotNull(result); + assertEquals(studentId, result.getStudentAccountsId()); + assertEquals(100.0, result.getBalance()); + } + + @Test + void testGetStudentAccountsDetail_StudentNotFound() { + Long studentId = 1L; + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.empty()); + + assertThrows(RuntimeException.class, () -> { + studentAccountService.getStudentAccountsDetail(studentId); + }); + } + + @Test + void testUpdateBalanceOnEnrollment() { + Long studentId = 1L; + double balanceUpdateAmount = 50.0; + Long courseId = 1L; + + StudentAccounts studentAccounts = new StudentAccounts(); + studentAccounts.setStudentAccountsId(studentId); + studentAccounts.setBalance(100.0); + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.of(studentAccounts)); + + studentAccountService.updateBalanceOnEnrollment(studentId, balanceUpdateAmount, courseId); + + assertEquals(50.0, studentAccounts.getBalance()); + verify(studentAccountsRepository, times(2)).save(studentAccounts); + } + + @Test + void testUpdateBalanceOnEnrollment_StudentAccountNotFound() { + Long studentId = 1L; + double balanceUpdateAmount = 50.0; + Long courseId = 1L; + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.empty()); + + assertThrows(IllegalArgumentException.class, () -> { + studentAccountService.updateBalanceOnEnrollment(studentId, balanceUpdateAmount, courseId); + }); + } + + @Test + void testCreateStudentAccount() { + Student student = new Student(); + student.setStudentIdNumber(1L); + + studentAccountService.createStudentAccount(student); + + verify(studentAccountsRepository, times(1)).save(any(StudentAccounts.class)); + } + + @Test + void testRevertBalanceOnEnrollmentDeletion() { + Long studentId = 1L; + double amount = 50.0; + Long courseId = 1L; + + StudentAccounts studentAccounts = new StudentAccounts(); + studentAccounts.setStudentAccountsId(studentId); + studentAccounts.setBalance(100.0); + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.of(studentAccounts)); + + studentAccountService.revertBalanceOnEnrollmentDeletion(studentId, amount, courseId); + + assertEquals(150.0, studentAccounts.getBalance()); + verify(studentAccountsRepository, times(1)).save(studentAccounts); + } + + @Test + void testRevertBalanceOnEnrollmentDeletion_StudentAccountNotFound() { + Long studentId = 1L; + double amount = 50.0; + Long courseId = 1L; + + when(studentAccountsRepository.findByStudentId_studentIdNumber(studentId)).thenReturn(Optional.empty()); + + assertThrows(IllegalArgumentException.class, () -> { + studentAccountService.revertBalanceOnEnrollmentDeletion(studentId, amount, courseId); + }); + } +} From 9069763f9bb67308e57c9e12dee601a7712cafd7 Mon Sep 17 00:00:00 2001 From: Shivangi Patel Date: Mon, 10 Jun 2024 23:08:53 -0500 Subject: [PATCH 5/5] Changed pom.xml --- myappvs/pom.xml | 113 ++++++++++++++------------ myappvs/src/main/resources/import.sql | 8 +- 2 files changed, 63 insertions(+), 58 deletions(-) diff --git a/myappvs/pom.xml b/myappvs/pom.xml index c2bfc12..580aad4 100644 --- a/myappvs/pom.xml +++ b/myappvs/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot @@ -14,7 +14,7 @@ myappvs Demo project for Spring Boot - 21 + 17 @@ -38,40 +38,40 @@ - org.springframework.boot - spring-boot-starter-data-jpa - + org.springframework.boot + spring-boot-starter-data-jpa + - com.mysql - mysql-connector-j - runtime - + com.mysql + mysql-connector-j + runtime + - - org.springframework.security - spring-security-test - test - + + org.springframework.security + spring-security-test + test + - - io.jsonwebtoken - jjwt-api - 0.11.5 - + + io.jsonwebtoken + jjwt-api + 0.11.5 + - - io.jsonwebtoken - jjwt-impl - 0.11.5 - + + io.jsonwebtoken + jjwt-impl + 0.11.5 + - - io.jsonwebtoken - jjwt-jackson - 0.11.5 - + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + io.jsonwebtoken @@ -79,11 +79,11 @@ 0.9.1 - - net.logstash.logback - logstash-logback-encoder - 7.2 - + + net.logstash.logback + logstash-logback-encoder + 7.2 + org.springframework.boot @@ -91,17 +91,17 @@ - com.h2database - h2 - runtime + com.h2database + h2 + runtime - org.postgresql - postgresql - 9.4-1201-jdbc41 - - + org.postgresql + postgresql + 9.4-1201-jdbc41 + + org.springframework.boot spring-boot-starter-security @@ -110,28 +110,33 @@ org.springframework.security spring-security-config - + javax.servlet servlet-api 2.4 provided - - - org.springframework.boot - spring-boot-starter-data-mongodb - + + + org.springframework.boot + spring-boot-starter-data-mongodb + - - - org.springframework.boot - spring-boot-starter-thymeleaf - + + + org.springframework.boot + spring-boot-starter-thymeleaf + org.springdoc springdoc-openapi-starter-webmvc-ui 2.1.0 + + + org.springframework.boot + spring-boot-starter-logging + org.powermock powermock-api-mockito2 @@ -171,4 +176,4 @@ - + \ No newline at end of file diff --git a/myappvs/src/main/resources/import.sql b/myappvs/src/main/resources/import.sql index 622fb8c..f500e54 100644 --- a/myappvs/src/main/resources/import.sql +++ b/myappvs/src/main/resources/import.sql @@ -21,10 +21,10 @@ INSERT INTO advisors(name, email) VALUES ('bob', 'bob@test.com') INSERT INTO advisors(name, email) VALUES ('charlie', 'charlie@test.com') --- Insert into Enrollment table -INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); -INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789, 101); -INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); +---- Insert into Enrollment table +--INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (1, 123456789, 101); +--INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (2, 123456789, 101); +--INSERT INTO Enrollment(Enrollment_Id, student_id, courseId) VALUES (3, 987654321, 102); -- Insert into instructor table INSERT INTO instructor(instructor_id, instructor_name, instructor_description, meeting_hours, instructor_cabin_location) VALUES (201, 'John Doe', 'Experienced software engineer', '08:00:00', 'Building A, Room 101');