- Team Number : Team-9
- Team Members : Sarah Ahmed - Amanallah Rafat - Mohamed Khaled - Salma Khaled - Ali Kabeel
-
The Deployed Link : https://guc-staff-portal.herokuapp.com/
-
- The Backend server runs on port 5000 using the command in the root directory :
npm start
- The Frontend server runs on port 3000 using the following commands in the root directory :
cd client
thennpm start
- Note :
You should install the requied packages before trying to start the App using the following command in the both server and client sides :
For The server in The root directory :
npm install
For the client side in the root directory :
cd client
thennpm install
- To start the data base by creating an HR you should call the route:
/init
(POST) This adds an HR manually to the database and should only be called once. To login the email is :HR@guc.com
, the password is :123456
.
- The Backend server runs on port 5000 using the command in the root directory :
- The server can be run using : node server.js
- The server runs on port 3000.
- The server.js file in the root directory contains the connection string to the database.
- You need to create an HR manually to start testing as this is the recommended starting point
- The UML is provided in the file ACML Project.png in the root directory
- To start the data base by creating an HR you should call the route:
/init
(POST) This adds an HR manually to the database and should only be called once. To login the email is :HR@guc.com
, the password is :123456
Route: /hr/createLocation
Request Type: POST
Request Body: {"name" : "H12", "capacity" : 120, "type" : 0}
Note: Type denotes whether the location is a hall, tutorial room, lab or office. 0 -->hall, 1--> tut room, 2--> office, 3-->lab
Route: /hr/updateLocation/:ID
Request Type: PUT
Request Parameter: The ID of the location to be updated
Request body : {"name" : "H30","type" : 200}
Example of how to call the route: /hr/updateLocation/1
Response:
{"error": "\"type\" must be less than or equal to 3"}
Request body : {"name" : "H30","type" : 2}
Response:
Location Updated Successfully!
Request body : {"name" : ""}
Response:
{"error": "\"name\" is not allowed to be empty}
Route: /hr/deleteLocation/:ID
Request type: DELETE
Request parameters : The ID of the location to be deleted
Example of how to call the route: /hr/deleteLocation/1
Route: /hr/addStaffMember
Request Type: POST
Request Body :
{"name": "user99", "email": "user99@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "officeID": 5, "salary": 8000,"departmentID": 1,"memberType":0}
Resposne: Registeration Completed!
Request Body :
{"name": "user100", "email": "user100@guc.com", "type": 1, "dayOff": "saturday", "gender": "male", "officeID": 5, "salary": 8000}
Resposne: Registeration Completed!
Notes:
1- The officeID must be an ID of a location of type office (type = 2).
2- type denotes whether this staff member is an HR or an academic member (0-> academic member, 1-> hr)
3- memberType denotes whether this academic member is a HOD or an academic member (0 -> HOD, 3-> academic member)
Route: /hr/updateStaffMember/:ID/:type
Request Type: PUT
Request Body :
{"memberType":0}
Resposne: Staff member Updated Successfully!
Request Body :
{"ID": 2}
Resposne: { "error": "\"ID\" is not allowed" }
Request Body :
{"departmentID": 4}
Resposne: Staff member Updated Successfully!
Request Body :
{"officeID": 9}
Resposne: Staff member Updated Successfully!
Request Parameters : ID is the ID of the staff member, type denotes whether it's an HR or academic member (0--> academic member, 1 --> HR)
Example of how to call the route : /hr/updateStaffMember/1/0
Route: /hr/deleteStaffMember/:ID/:type
Request Type: DELETE
Request Body :
Resposne: Staff member deleted successfully
Request Body :
Resposne: This user doesn't exist
Request Parameters : ID is the ID of the staff member, type denotes whether it's an HR or academic member (0--> academic member, 1 --> HR)
Example of how to call the route : /hr/deleteStaffMember/1/0
Route: /hr/createFaculty
Request Type: POST
Request Body: {"name" : "MET","departments" : [2,3]}
Note: Departments array contains the ids of departments.
Route: /hr/updateFaculty/:name
Request Type: PUT
Request Parameter: The name of the faculty to be updated
Request body : {"name" : "MET", "departments": [4]}
Example of how to call the route: /hr/updateFaculty/IET
Route: /hr/deleteFaculty/:ID
Request type: DELETE
Request parameters : The name of the faculty to be deleted
Example of how to call the route: /hr/facultyLocation/MET
Route: /hr/createDepartment
Request Type: POST
Request Body: {"name" : "CS","members" : [17], "hodID" : 17}
Request Body: {"name" : "DMET"}
Note: Members array contains the ids of members that should be added to the new department.
Route: /hr/updateDepartment/:ID
Request type: PUT
Request parameters : The ID of the department to be updated
Request body: {"hodID": 4}
Example of how to call the route: /hr/updateDepartment/2
Route: /hr/deleteDepartment/:ID
Request type: DELETE
Request parameters : The ID of the department to be deleted
Example of how to call the route: /hr/deleteDepartment/1
Route: /hr/createCourse
Request type : POST
Request body : {"name":"COMPUTER", "code": "CSEN111", "department": [4]}
Response : Course has been added successfully
Route: /hr/updateCourse/:ID
Request type : PUT
Request parameters : ID of the course that the HR wants to update
Request body : {"name":"COMPUTER PROGRAMMING"}
Response : Course has been updated successfully
Example of how to call the route : /hr/updateCourse/2
Route: /hr/deleteCourse/:ID
Request type : DELETE
Request parameters : ID of the course that the HR wants to delete
Response : Course has been deleted successfully
Example of how to call the route : /hr/deleteCourse/2
add 'auth-token' of HR in the header
Route: /hr/addMissingSignInOut
Request type : POST
Request body :
{"ID":1,"type":0, "signinYear":2020, "signinMonth":12, "signinDay":1, "signinHour":1, "signinMinute":0, "signinSec":0, "signoutYear":2021, "signoutMonth":12, "signoutDay":2, "signoutHour":1, "signoutMinute":0, "signoutSec":0}
Response : adding login/out has done successfully
add 'auth-token' of HR in the header
Route: /hr/viewStaffMemberAttendance/:ID/:type
for example /hr/viewStaffMemberAttendance/1/1
Request type : GET
Request Parameters : ID is the ID of the staff member whose attendance is to be viewed. type is 0 if he is academic member and type is 1 if he is an HR
Response :
[ { "status": "attedant", "signin": "2020-12-17T12:49:25.810Z", "signout": "2020-12-17T12:49:32.526Z" } ]
add 'auth-token' of HR in the header
Route: /hr/updateStaffMemberSalary
Request type : POST
Request body :
{"ID":1,"type":1,"salary":4000}
Response : staff member salary has been updated successfully
Note: 1-ID is the ID of the staff member that the HR wants to update the salary for.
2- type denotes whether this staff member is an HR (type : 1) or academic member (type :0).
add 'auth-token' of HR in the header
Route: /hr/viewStaffMembersWithMissingHours
Request type : GET
Response :
[ { "attendanceRecord": [ { "status": 1, "signin": 1608209365810, "signout": 1608209372526 } ], "extraInfo": [], "name": "sarah", "ID": 1, "email": "sarah@guc.com", "type": 1, "dayOff": "saturday", "gender": "female", "salary": 4000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "aca1", "ID": 1, "email": "aca1@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6, "officeID": 5 }, { "attendanceRecord": [], "extraInfo": [], "name": "aaaaaa", "ID": 2, "email": "aca2@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6, "officeID": null }, { "attendanceRecord": [], "extraInfo": [], "name": "User3", "ID": 3, "email": "aca3@guc.com", "type": 0, "dayOff": "saturday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }]
note that the output depends on the data inside the database and the current day when the code runs
add 'auth-token' of HR in the header
Route: /hr/viewStaffMembersWithMissingDays
Request type : GET
Response :
[ { "attendanceRecord": [ { "status": 1, "signin": "2020-12-17T12:49:25.810Z", "signout": "2020-12-17T12:49:32.526Z" } ], "extraInfo": [], "name": "sarah", "ID": 1, "email": "ssarah@guc.edu.eg", "type": 1, "dayOff": "saturday", "gender": "female", "salary": 6000, "annualBalance": 2.5, "accidentalLeaveBalance": 6, "officeID": null }, { "attendanceRecord": [], "extraInfo": [], "name": "aaaaaa", "ID": 2, "email": "aca2@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6, "officeID": null }, { "attendanceRecord": [], "extraInfo": [], "name": "User3", "ID": 3, "email": "aca3@guc.com", "type": 0, "dayOff": "saturday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "aca4", "ID": 4, "email": "aca4@guc.com", "type": 0, "dayOff": "saturday", "gender": "female", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "aca5", "ID": 5, "email": "aca5@guc.com", "type": 0, "dayOff": "sunday", "gender": "female", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "aca6", "ID": 6, "email": "aca6@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "aca7", "ID": 7, "email": "aca7@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "user99", "ID": 8, "email": "user99@guc.com", "type": 0, "dayOff": "sunday", "gender": "male", "officeID": 5, "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 }, { "attendanceRecord": [], "extraInfo": [], "name": "user100", "ID": 2, "email": "user100@guc.com", "type": 1, "dayOff": "saturday", "gender": "male", "officeID": 5, "salary": 8000, "annualBalance": 2.5, "accidentalLeaveBalance": 6 } ]
note that the output depends on the data inside the database and the current day when the code runs
since it starts from the beginning of the academic month till the current day
Route: /login
Request type: POST
Request Body : {"email": "ahmed@guc.edu.eg","password":"team9111"}
Route: /logout
Request type: POST
add the 'auth-token' of a staff member
Route: /signIn
Request type: POST
add the 'auth-token' of a staff member
Route: /signOut
Request type: POST
Route: /viewProfile
Request Type: GET
Response: {"extraInfo": [],"name": "mohamed","ID": 14,"email": "mk@guc.com","type": 0,"dayOff": "sunday", "gender": "male","officeID": 9,"salary": 5001,"annualBalance": 2.5,"accidentalLeaveBalance": 6}
Route: /resetPassword
Request type: POST
Request Body : {"oldPassword":"123456","newPassword":"123457"}
Route: /viewAttendance
Request Type: GET
Request Body: The Route has two options for the request body to view The whole Attendance Record or by month and the input requested body for the second should be like the following {"month":12}
add 'auth-token' of the staff member in the header
Route: /updateMyProfile
Request type : POST
Request body :
{"email":"ssarah@guc.edu.eg"}
Response : profile Updated Successfully!
add 'auth-token' of the staff member in the header
Route: /viewMissingDays
Request Type: GET
Response: [ "2020-12-13T00:00:00.000Z", "2020-12-14T00:00:00.000Z", "2020-12-15T00:00:00.000Z", "2020-12-16T00:00:00.000Z" ]
note that the output depends on the data inside the database and the current day when the code runs
since it starts from the beginning of the academic month till the current day
Route: /hod/assignCourseInstructor
Request Type: PUT
Request Body: {"courseID":3, "instructorID": 1}
Response: Course instructor assigned successfully
Route: /hod/deleteCourseInstructor/:courseID
Request Type: DELETE
Request Parameters: The ID of the course
Request Body: {"instructorID":1}
Example of how to call the route: /hod/deleteCourseInstructor/1
Response: Course instructor was deleted successfully
Note: instructorID is the ID of the instructor that the hod wants to delete from the course
Route: /hod/updateCourseInstructor/:ID
Request Type: PUT
Request Parameters: The ID of the instructor that the HOD wants to update
Request Body: {"oldCourseID": 1, "newCourseID": 2}
Response: Update was successfull
Example of how to call the route: /hod/updateCourseInstructor/2
Note: newCourseID is the ID of the course that you want to assign the instructor to, oldCourseID is the ID of the course you want to remove the instructor from.
Route: /hod/viewDepartmentMembers
Request Type: GET
Response : Array of staff members
[ { "name": "aca6", "email": "aca6@guc.com", "ID": 6, "type": 0, "dayOff": "sunday", "gender": "male", "officeID": "Not yet assigned", "departmentID": "MNGT", "extra info": [] }, { "name": "aca7", "email": "aca7@guc.com", "ID": 7, "type": 0, "dayOff": "sunday", "gender": "male", "officeID": "Not yet assigned", "departmentID": "MNGT", "extra info": [] } ]
Route: /hod/viewDepartmentMembersByCourse/:courseID
Request Type: GET
Request Parameters: ID of the course whose teaching staff the head of the department wants to view
Response: Array of staff members
[ { "name": "sarah", "email": "sarah@guc.com", "ID": 1, "type": 1, "dayOff": "saturday", "gender": "female", "officeID": "Not yet assigned", "departmentID": "MET", "extra info": [] }, { "name": "aca2", "email": "aca2@guc.com", "ID": 2, "type": 0, "dayOff": "sunday", "gender": "male", "officeID": "Not yet assigned", "departmentID": "MET", "extra info": [] } ]
Example of how to call the route: /hod/viewDepartmentMembersByCourse/1
Route: /hod/viewAllStaffDayOff
Request Type: GET
Response: Array containing staff member name, ID and day off
[ { "name": "aca6", "id": "ac_6", "dayOff": "sunday" }, { "name": "aca7", "id": "ac_7", "dayOff": "sunday" } ]
Route: /hod/viewSingleStaffDayOff/:ID
Request Type: GET
Request Parameters: ID of the staff member the head of the department wants to view
Response: staff member name, ID and day off
{ "name": "aca6", "id": "ac_6", "day off": "sunday" }
Example of how to call the route: /hod/viewSingleStaffDayOff/1
Route: /hod/viewCourseTeachingAssignments/:ID
Request Type: GET
Request Parameters: ID of the course that the head of the department wants to view
Response: name of the course, code of the course and an array containing the slots of the course
{ "course name": "Graphics", "course code": "DMET501", "course slots": [ { "slot": { "ID": 1, "slotNumber": 1, "day": "monday", "locationID": 1 }, "staff member name": "Not yet assigned" }, { "slot": { "ID": 2, "slotNumber": 2, "day": "monday", "locationID": 1 }, "staff member name": "Not yet assigned" }, { "slot": { "ID": 3, "slotNumber": 3, "day": "monday", "locationID": 1 }, "staff member name": "Not yet assigned" } ] }
Example of how to call the route: /hod/viewCourseTeachingAssignments/1
Route: /hod/viewCourseCoverage/:ID
Request Type: GET
Request parameters: The ID of the course.
Response: The coverage of the course which has the ID specified in the request parameters(in decimal)
Example of how to call the route: /hod/viewCourseCoverage/1
Route: /hod/viewAllRequests
Request Type: GET
Response: Array of all the requests that are sent to this head of department.
[ { "type": "accidental leave requests", "requests": [ { "_id": "5fdefc5983dc451970a8cdf3", "ID": 6, "senderID": 8, "receiverID": 8, "msg": "ali", "submissionDate": "2020-12-20T07:25:13.024Z", "requestedDate": "1970-01-01T00:00:00.123Z", "status": "pending", "__v": 0 } ] }, { "type": "annual leave requests", "requests": [] }, { "type": "change day off requests", "requests": [ { "_id": "5fde58e1c78ef437c4425b93", "ID": 3, "senderID": 1, "receiverID": 8, "msg": "", "targetDayOff": "monday", "submissionDate": "2020-12-19T19:47:45.077Z", "status": "pending", "__v": 0 }, { "_id": "5fde58e4c78ef437c4425b94", "ID": 4, "senderID": 1, "receiverID": 8, "msg": "", "targetDayOff": "monday", "submissionDate": "2020-12-19T19:47:48.452Z", "status": "pending", "__v": 0 } ] }, { "type": "compensation leave requests", "requests": [ { "_id": "5fde6190ecabe139c4220514", "ID": 1, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:24:48.822Z", "requestedDate": "2020-12-13T20:14:22.436Z", "absenceDate": "2020-12-12T20:14:51.516Z", "status": "pending", "__v": 0 }, { "_id": "5fde61b6ecabe139c4220515", "ID": 2, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:25:26.410Z", "requestedDate": "2020-12-06T20:25:18.099Z", "absenceDate": "2020-12-12T20:14:51.516Z", "status": "pending", "__v": 0 }, { "_id": "5fde61caecabe139c4220516", "ID": 3, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:25:46.172Z", "requestedDate": "2020-12-06T20:25:18.099Z", "absenceDate": "2020-12-06T20:25:18.099Z", "status": "pending", "__v": 0 }, { "_id": "5fde61dfecabe139c4220517", "ID": 4, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:26:07.983Z", "requestedDate": "2020-12-06T20:25:18.099Z", "absenceDate": "2020-12-12T20:14:51.516Z", "status": "pending", "__v": 0 }, { "_id": "5fde6229ecabe139c4220518", "ID": 5, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:27:21.913Z", "requestedDate": "2020-12-13T20:14:22.436Z", "absenceDate": "2020-12-12T20:14:51.516Z", "status": "pending", "__v": 0 }, { "_id": "5fde6276ecabe139c4220519", "ID": 6, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T20:28:38.203Z", "requestedDate": "2020-12-13T20:14:22.436Z", "absenceDate": "2020-12-23T20:28:29.192Z", "status": "pending", "__v": 0 }, { "_id": "5fde6b3cecabe139c422051c", "ID": 7, "senderID": 1, "receiverID": 8, "submissionDate": "2020-12-19T21:06:04.348Z", "requestedDate": "2020-12-06T20:25:18.099Z", "absenceDate": "2020-12-12T20:14:51.516Z", "status": "pending", "__v": 0 } ] }, { "type": "maternity leave requests", "requests": [ { "_id": "5fde5876c78ef437c4425b8a", "ID": 1, "senderID": 1, "receiverID": 8, "documents": "googl/ali", "submissionDate": "2020-12-19T19:45:58.760Z", "startDate": "2020-12-24T13:51:02.056Z", "endDate": "2020-12-29T13:56:19.792Z", "msg": "", "status": "pending", "__v": 0 }, { "_id": "5fde5879c78ef437c4425b8b", "ID": 2, "senderID": 1, "receiverID": 8, "documents": "googl/ali", "submissionDate": "2020-12-19T19:46:01.066Z", "startDate": "2020-12-24T13:51:02.056Z", "endDate": "2020-12-29T13:56:19.792Z", "msg": "", "status": "pending", "__v": 0 }, { "_id": "5fde587cc78ef437c4425b8c", "ID": 3, "senderID": 1, "receiverID": 8, "documents": "googl/ali", "submissionDate": "2020-12-19T19:46:04.334Z", "startDate": "2020-12-24T13:51:02.056Z", "endDate": "2020-12-29T13:56:19.792Z", "msg": "", "status": "pending", "__v": 0 }, { "_id": "5fde587fc78ef437c4425b8d", "ID": 4, "senderID": 1, "receiverID": 8, "documents": "googl/ali", "submissionDate": "2020-12-19T19:46:07.478Z", "startDate": "2020-12-24T13:51:02.056Z", "endDate": "2020-12-29T13:56:19.792Z", "msg": "", "status": "pending", "__v": 0 }, { "_id": "5fde58a7c78ef437c4425b8e", "ID": 5, "senderID": 1, "receiverID": 8, "documents": "googl/ali", "submissionDate": "2020-12-19T19:46:47.988Z", "startDate": "2020-12-24T13:51:02.056Z", "endDate": "2020-12-29T13:56:19.792Z", "msg": "", "status": "pending", "__v": 0 } ] }, { "type": "sick leave requests", "requests": [ { "_id": "5fde42634cc4174148983990", "ID": 1, "senderID": 4, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-19T18:11:47.106Z", "requestedDate": "2020-12-18T18:11:23.669Z", "status": "pending", "msg": "We won!", "__v": 0 }, { "_id": "5fde42b34cc4174148983991", "ID": 2, "senderID": 4, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-19T18:13:07.038Z", "requestedDate": "2020-12-18T18:11:23.669Z", "status": "pending", "msg": "We won!", "__v": 0 }, { "_id": "5fde42b54cc4174148983992", "ID": 3, "senderID": 4, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-19T18:13:09.625Z", "requestedDate": "2020-12-18T18:11:23.669Z", "status": "pending", "msg": "We won!", "__v": 0 }, { "_id": "5fde42bd4cc4174148983993", "ID": 4, "senderID": 4, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-19T18:13:17.976Z", "requestedDate": "2020-12-18T18:11:23.669Z", "status": "pending", "msg": "", "__v": 0 }, { "_id": "5fde4a1c4cc4174148983994", "ID": 5, "senderID": 4, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-19T18:44:44.638Z", "requestedDate": "2020-12-18T18:11:23.669Z", "status": "pending", "msg": "", "__v": 0 }, { "_id": "5fde4a204cc4174148983995", "ID": 6, "senderID": 1, "receiverID": 8, "documents": "jbdskjvbjas", "submissionDate": "2020-12-12T18:44:48.828Z", "requestedDate": "2020-12-12T18:11:23.669Z", "status": "accepted", "msg": "", "__v": 0 } ] } ]
Route: /hod/respondToChangeDayOffRequest/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request accepted succefully
Request body : {"response":0, "msg":"You can't change it"}
Response: Request rejected succefully
Request Parameters : The ID of the change day off request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToChangeDayOffRequest/3
Note: 1- To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route: /hod/respondToAnnualLeaveRequests/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request was accepted successfully
Request body : {"response": 0,"msg": "I don't want to"}
Response: Request was rejected successfully
Request Parameters : The ID of the annual leave request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToAnnualLeaveRequests/1
Note: 1- To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route: /hod/respondToAccidentalLeaveRequest/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request was accepted successfully
Request body : {"response": 0,"msg": "I don't want to"}
Response: Request was rejected successfully
Request Parameters : The ID of the accidental leave request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToAccidentalLeaveRequest/3
Note: 1- To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route: /hod/respondToSickLeaveRequests/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request was accepted successfully
Request body : {"response": 0,"msg": "I don't want to"}
Response: Request was rejected successfully
Request Parameters : The ID of the sick leave request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToSickLeaveRequests/9
Note: - To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route: /hod/respondToMaternityLeaveRequest/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request was accepted successfully
Request body : {"response": 0,"msg": "I don't want to"}
Response: Request was rejected successfully
Request Parameters : The ID of the maternity leave request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToMaternityLeaveRequest/1
Note: 1-To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route: /hod/respondToCompensationLeaveRequest/:ID
Request Type: PUT
Request body : {"response": 1}
Response: Request was accepted successfully
Request body : {"response": 0,"msg": "I don't want to"}
Response: Request was rejected successfully
Request Parameters : The ID of the compensation leave request that the HOD wants to respond to.
Example of how to call the route: /hod/respondToCompensationLeaveRequest/1
Note: 1-To accept the request response is 1, to reject the request response is 0.
2- "msg" is optional if the HOD wants to state the reason for rejecting the request.
Route Example: /ci/viewCourseCoverage/:courseID
Request Type: GET
Request parameters: The ID of the course.
Route Example: /ci/viewCourseCoverage/2
Response: The coverage of the course which has the ID specified in the request parameters(in decimal)
Route: /ci/viewSlotAssignment
Request Type: GET
Response: Array of the course slots that the course instructor is assigned to.
Response Example: [{"slots":[{"ID":1,"slotNumber":3,"day":"monday","locationID":1},{"ID":2,"slotNumber":2,"day":"monday","locationID":1},{"ID":3,"slotNumber":5,"day":"monday","locationID":1},{"ID":4,"slotNumber":5,"day":"monday","locationID":1},{"ID":5,"slotNumber":2,"day":"monday","locationID":1},{"ID":6,"slotNumber":2,"day":"tuesday","locationID":1},{"ID":7,"slotNumber":2,"day":"tuesday","locationID":34},{"ID":8,"slotNumber":2,"day":"tuesday","locationID":6},{"ID":9,"slotNumber":2,"day":"friday","locationID":6}],"id":"5fdf6dda7f75c63a8cf2928e","ID":1,"_v":0}]
Route: /ci/viewStaffProfilesInDepartment
Request Type: GET
Response:
[{"name":"ac13","email":"ac13@guc.com","ID":"ac-11","type":0,"dayOff":"sunday","gender":"male","officeID":2,"departmentID":2,"extra info":[]},{"name":"ac14","email":"ac14@guc.com","ID":"ac-12","type":3,"dayOff":"sunday","gender":"male","officeID":2,"departmentID":2,"extra info":[]},{"name":"ac15","email":"ac15@guc.com","ID":"ac-13","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac16","email":"ac16@guc.com","ID":"ac-14","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac17","email":"ac17@guc.com","ID":"ac-15","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac18","email":"ac18@guc.com","ID":"ac-16","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac19","email":"ac19@guc.com","ID":"ac-17","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac20","email":"ac20@guc.com","ID":"ac-18","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac21","email":"ac21@guc.com","ID":"ac-19","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac22","email":"ac22@guc.com","ID":"ac-20","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac23","email":"ac23@guc.com","ID":"ac-21","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac24","email":"ac24@guc.com","ID":"ac-22","type":3,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac25","email":"ac25@guc.com","ID":"ac-23","type":2,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]}]
Route: /ci/viewStaffProfilesInCourse/:courseID
Requet Parameters: courseID represents an ID of existing course
Request Type: GET
Route Example: /ci/viewStaffProfilesInCourse/1
Response Example:
[{"name":"ac25","email":"ac25@guc.com","ID":"ac-23","type":2,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac22","email":"ac22@guc.com","ID":"ac-20","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac21","email":"ac21@guc.com","ID":"ac-19","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]},{"name":"ac20","email":"ac20@guc.com","ID":"ac-18","type":1,"dayOff":"sunday","gender":"male","officeID":3,"departmentID":2,"extra info":[]}]
Route: /ci/assignAcademicMemberToSlot
Request Type: POST
Request Body: { "slotID": 1, "courseID": 2, "academicMemberID": 3 }
Response: Academic memeber is assigned to the slot the successfuly or Error if invalid body
Route: /ci/removeAcademicMemberToSlot
Request Type: DELETE
Request Body: { "slotID": 1, "courseID": 2, "academicMemberID": 3 }
Response: Academic memeber assignment to the slot is removed successfuly or Error if invalid body
Route: /ci/updateAcademicMemberslotAssignment
Request Type: PUT
Request Body: { "oldSlotID": 2, "newSlotID": 1, "courseID": 2, "academicMemberID": 3 }
Response: Academic memeber assignment to the slot is updated successfuly
Route: /ci/removeAcademicMemberFromCourse
Request Type: DELETE
Request Body: {"courseID": 1, "academicMemberID": 3 }
Response: Academic memeber removed successfully
Route: /ci/assignCourseCoordinator
Request Type: PUT
Request Body: { "courseID": 2, "academicMemberID": 3 }
Response: Course coordinator is assigned successfully
Route: /cc/viewSlotLinkingRequests
Request Type: GET
Response: [ { "_id": "5fdcbc693f1a9333a81f075e", "ID": 1, "senderID": 4, "receiverID": 3, "courseID": 2, "slotID": 1, "status": "accepted", "__v": 0 }, { "_id": "5fdceeae4cad453d6467fc06", "ID": 2, "senderID": 4, "receiverID": 3, "courseID": 2, "slotID": 2, "status": "pending", "__v": 0 } ]
Route: /cc/handleSlotLinkingRequest
Request Type: POST
Request Body: { "requestID": 1, "decision": 1 } // 0 for rejected and 1 for accepted
Response: The Request is accepted sucessfully !
Route: /cc/createSlot
Request Type: POST
Request Body: { "courseID": 1, "slot": {"slotNumber":3,"day":"monday","locationID":1} }
Response: Slot added sucessfully !
Route: /cc/deleteSlot/:courseID/:slotID
Request Type: DELETE
Request Parameters slotID : the ID of the slot to be deleted , courseID : the ID of the course that has the to-be-deletd slot
Example how to call the route : /cc/deleteSlot/2/1
Response: The Slot has been deleted sucessfully
Route: /cc/updateSlot/:courseID/:slotID
Request Type: PUT
Request Parameters slotID : the ID of the slot to be updated , courseID : the ID of the course that has the to-be-updated slot
Example how to call the route : /cc/updateSlot/2/1
Request Body: the fields of the slot to be updated { "slotNumber" : 5 }
Response: The slot has been updated sucessfully !
Route: /ac/viewSchedule
Request Type: GET
Request Body:
Response: The current week schedule of the academic member (Putting in consideration the replacement requests)
Response Example: [{"courseID":2,"slot":{"ID":1,"slotNumber":1,"day":"sunday","locationID":1,"instructor":2}}]
Route: /ac/sendSlotLinkingRequest
Request Type: POST
Request Body: { "slotID" : 2, "courseID" : 2 }
Response: "The request has been sent sucessfully" or an error message denoting the error.
Route: /ac/sendChangeDayOffRequest
Request Type: POST
Request Body: { "newDayOff" : "saturday", "msg" : "I need a vacation change" }
Response: "The request has been sent sucessfully" or an error message denoting the error.
Route: /ac/getAllNotifications
Request Type: GET
Response:
[ { "_id": "5fdcc1431fbd6f07d46f0fc0", "senderID": 3, "receiverID": 4, "msg": "Your Slot Linking Request for the slot with ID 2 for the course CSEN401 is accepted", "date": "2020-12-18T14:48:35.008Z", "__v": 0 }, { "_id": "5fdcf25234ee0408843a217b", "senderID": 3, "receiverID": 4, "msg": "Your Slot Linking Request for the slot with ID 3 for the course CSEN401 is rejected", "date": "2020-12-18T18:17:54.407Z", "__v": 0 } ]
Route: /ac/viewAllRequests/:view
Request Type: GET
Request Parameters: view : parameter has values 0, 1, 2 or 3 depending on the applied filter type. The filters are namely (all : 0 , accepted : 1, rejected : 2, pending : 3).
Example how to call the route: /ac/viewAllRequests/1
Response:
[ [], [], [], [], [], [], [], [ { "_id": "5fdcbc693f1a9333a81f075e", "ID": 1, "senderID": 4, "receiverID": 3, "courseID": 2, "slotID": 1, "status": "accepted", "__v": 0 } ] ]
Route: /ac/sendReplacementRequest
Request Type: POST
Request Body: {"replacementID" : 3, "courseID" : 2 , "slotID" : 1 , "requestedDate" : 1608807967732}
Note : the requested date must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "The replacement request has been sent sucessfully !" or an error message denoting the error.
Route: /ac/viewReplacementRequests
Request Type: GET
Request Body:
Response: Array of the replacement requests.
Route: /ac/respondToReplacementRequest
Request Type: PUT
Request Body: {"requestID" : 1, "response" : 1}
Note : repsone == 1 == "accepted", repsone == 0 == "rejected"
Response: "Responded to replacement request successfully" or an error message denoting the error.
Route: /ac/sendMaternityLeaveRequest
Request Type: POST
Request Body: {"documents" : "https://google.com/ali", "startDate" :1608817862056, "endDate" : 1609250179792, "msg" : "Ali"}
Note : the start/end dates must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "The request has been created successfully." or an error message denoting the error.
Route: /ac/sendSickLeaveRequest
Request Type: POST
Request Body: {"documents": "https://kabeel.com/doc.html", "requestedDate": 1608315083669, "msg" : "We won!" }
Note : the requestedDate date must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "The request has been created successfully." or an error message denoting the error.
Route: /ac/sendCompensationLeaveRequest
Request Type: POST
Request Body: {"absenceDate" : 1607804091516, "requestedDate" : 1607286318099, "msg" : "Hi I am here"}
Note : the absenceDate, requestedDate dates must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "The compensation request is sent successfully." or an error message denoting the error.
Route: /ac/sendAnnualLeaveRequest
Request Type: POST
Request Body: {"requestedDate" : 1607286318099, "msg" : "Hi I am here"}
Note : the requestedDate dates must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "the annual leave request has already sucessfully created !" or an error message denoting the error.
Route: /ac/sendAccidentalLeaveRequest
Request Type: POST
Request Body: {"requestedDate" : 1608324670255 , "msg" : "Please accept my request"}
Note : the requestedDate date must be in the same number format as the one returned from Data.now() in javascript and if you want to change the date to be in the future or the past you can doing the following code by adding the days you need to be added or subtracted from the cuurent day ,so the returned value from this function will be you input in the request body :
function generateDateFormat(addedOrsubtractedDays){
var date = new Date(Date.now());
var newDate = new Date();
newDate.setDate(date.getDate() + addedOrsubtractedDays);
return newDate.getTime();
}
Response: "The accidental leave request created successfully" or an error message denoting the error.
Route: /ac/cancelCompensationLeaveRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the compensation leave request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelCompensationLeaveRequest/5
Route: /ac/cancelSickLeaveRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the sick leave request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelSickLeaveRequest/3
Route: /ac/cancelMaternityLeaveRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the maternity leave request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelMaternityLeaveRequest/1
Route: /ac/cancelChangeDayOffRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the change day off leave request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelChangeDayOffRequest/1
Route: /ac/cancelReplacementRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the replacement request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelReplacementRequest/1
Route: /ac/cancelSlotLinkingRequest/:ID
Request Type: DELETE
Request Parameters: The ID of the slot linking request that the academic member wants to cancel.
Example of how to call the route: /ac/cancelSlotLinkingRequest/1
add 'auth-token' of academic member
Route: /ac/cancelAccidentalLeaveRequest
Request Type: DELETE
Request Body: ID of the request
{"ID":2}
Response: request has been deleted succuessfully
add 'auth-token' of academic member
Route: /ac/cancelAnnualLeaveRequest
Request Type: DELETE
Request Body: ID of the request
{"ID":2}
Response: request has been deleted succuessfully