# API - Listing
## Deployment
https://api-elabskiit.herokuapp.com/
## APIs
- <strong>POST `/course/new` - Add new Course<br></strong>
<strong>Schema</strong><br>
```javascript
{
name : __NAME_OF_THE_COURSE__,
desc : __DESCRIPTION_ABOUT_THE_COURSE__,
totalSeats : __SEATS_IN_TOTAL__,
year : __YEAR_FOR_THE_COURSE__
}
```
<strong>Status codes and errors</strong>
- 201 - Data saved
- 500 - Database unresponsive <br>
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- 406 - Data invalid/incorrect
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
}
```
<strong>Special Notes</strong><br>
- `year` should be greater than present year
- `totalSeats` should be greater than 0 (zero)
- There should not be any empty field
<strong>Example</strong><br>
Request
```json
{
"name": "Cloud",
"desc": "Cloud Computing",
"totalSeats": 100,
"year": 2021
}
```
Return
```json
{
"data": {
"totalSeats": 100,
"presentSeats": 100,
"year": "2021",
"classes": [],
"_id": "60d33d0e577a0e46141e5276",
"name": "Cloud",
"desc": "Cloud Computing",
"__v": 0
}
}
```
- <strong>GET `/course` - Get all courses<br></strong>
<strong>Special Notes</strong><br>
- Query can be added too
- `/course?year=__YEAR__` - to retrive all the courses of a particular year
<strong>Status codes and errors</strong>
- 200 - OK (Data recieved)
```javascript
{
courses:[{
{
__course1_details__
},
{
__course2_details__
}
}]
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
GET `/course?year=2021`
Result
```json
{
"courses": [
{
"totalSeats": 100,
"presentSeats": 97,
"year": "2021",
"classes": [
"60d2d56f7b88912ae46d51db"
],
"_id": "60d2d0727b88912ae46d51af",
"name": "AR",
"desc": "Argumentive Reality",
"__v": 0
},
{
__COURSE_2_DETAILS__
}
...
]
}
```
- <strong>GET `/course/:courseid` - Get the particular courses<br></strong>
<strong>Special Notes</strong><br>
- `courseid` param should be a valid courseId
<strong>Status codes and errors</strong>
- 200 - OK (data recieved)
```javascript
{
course: {
__COURSE_DETAILS__
}
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
GET `/course/60d2d0727b88912ae46d51af`
Return
```json
{
"course": {
"totalSeats": 100,
"presentSeats": 97,
"year": "2021",
"classes": ["60d2d56f7b88912ae46d51db"],
"_id": "60d2d0727b88912ae46d51af",
"name": "AR",
"desc": "Argumentive Reality",
"__v": 0
}
}
```
- <strong>POST `/team/new` - Add new Member<br></strong>
<strong>Schema</strong><br>
```javascript
{
name : __MEMBER_NAME__,
domain : __MEMBER_DOMAIN__,
isActive : __ACTIVE_OR_ALUMNI__,
photo : __PHOTO_URL__,
email : __EMAIL_ID__,
github : __GITHUB_PROFILE_LINK__,
linkedin : __LINKEDIN_PROFILE_LINK__,
testimonial : __ALUMNI_EXPERIENCE__
}
```
<strong>Special Notes</strong><br>
- `name, domain, isActive, photo ,email` are mandatory fields
- `github, linkedin, testimonial` are optional
- `email` should be a kiit email
- `photo` is an URL from firebase
<strong>Status codes and errors</strong>
- 201 - Data saved successfully
```javascript
{
data: {
__DETAILS_SAVED__
}
}
```
- 406 - Invalid/incorrect data and/or email not kiit email
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
POST `/team/new`
```json
{
"name": "Avi Mishra",
"domain": "App Development",
"isActive": true,
"photo": "https://firebasestorage.googleapis.com/v0/b/e-labs-550aa.appspot.com/o/team%2F01_avi.jpg?alt=media&token=2e8b6851-373f-46f0-9dd6-ba8e6aa7d79d",
"email": "1828058@kiit.ac.in",
"linkedin": "https://in.linkedin.com/in/avimishra18"
}
```
Return
```json
{
"data": {
"_id": "60d42544e3dd241f3c2637cf",
"name": "Avi Mishra",
"domain": "App Development",
"photo": "https://firebasestorage.googleapis.com/v0/b/e-labs-550aa.appspot.com/o/team%2F01_avi.jpg?alt=media&token=2e8b6851-373f-46f0-9dd6-ba8e6aa7d79d",
"email": "1828058@kiit.ac.in",
"isActive": true,
"linkedin": "https://in.linkedin.com/in/avimishra18",
"__v": 0
}
}
```
- <strong>GET `/team` - Get all members<br></strong>
<strong>Special Notes</strong><br>
- Queries can be added
- `/team?domain=__DOMAIN_NAME__` - to get all the members of a particular domain (Regular expression is allowed)
- `/team?name=__MEMBER_NAME__` - to get the particular member (Regular expression is allowed)
- `/team?roll=__MEMBER_ROLL__` - to get the particular member (only the roll number and Regular expression is allowed)
<strong>Status codes and errors</strong>
- 200 - OK (Data recieved)
```javascript
{
data: [
{
__MEMBER_1__
},
{
__MEMBER_2__
},
...
]
}
```
- 404 - Member not found
```javascript
{
error: 'no members found',
errorOccured: 'memebers',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
GET `/team`
Return
```json
{
"data": [
{
"_id": "60d42544e3dd241f3c2637cf",
"name": "Avi Mishra",
"domain": "App Development",
"photo": "https://firebasestorage.googleapis.com/v0/b/e-labs-550aa.appspot.com/o/team%2F01_avi.jpg?alt=media&token=2e8b6851-373f-46f0-9dd6-ba8e6aa7d79d",
"email": "1828058@kiit.ac.in",
"isActive": true,
"linkedin": "https://in.linkedin.com/in/avimishra18",
"__v": 0
},
...
]
}
```
- <strong>PATCH `/team/:memberid` - Update a team member details<br></strong>
<strong>Schema</strong><br>
```javascript
{
name : __MEMBER_NAME__,
domain : __MEMBER_DOMAIN__,
isActive : __ACTIVE_OR_ALUMNI__,
photo : __PHOTO_URL__,
email : __EMAIL_ID__,
github : __GITHUB_PROFILE_LINK__,
linkedin : __LINKEDIN_PROFILE_LINK__,
testimonial : __ALUMNI_EXPERIENCE__
}
```
<strong>Special Notes</strong><br>
- can contain all the above mentioned fields or just the required fields
<strong>Status codes and errors</strong>
- 201 - Updated successfully
```javascript
{
isUpdated: true
}
```
- 406 - email not valid, not a kiit email id
```javascript
{
error: `email invalid, not a kiit email`,
errorOccured: `email`,
}
```
- 404
- Member not found
```javascript
{
error: 'member not found',
errorOccured: 'member',
}
```
- Member could not be updated
```javascript
{
error: 'member could not be updated',
errorOccured: 'error',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>POST `/login` - Check the deviceId and roll<br></strong>
<strong>Schema</strong><br>
```javascript
{
roll: __ROLL_NUMBER__,
deviceId : __DEVICEID__
}
```
<strong>Status codes and errors</strong>
- 200 - OK (Login successful)
```javascript
{
data: true
}
```
- 406 - Roll number is invalid (Not kiit roll number)
```javascript
{
error: `roll invalid`,
errorOccured: `roll`,
}
```
- 404 - Roll number not found or DeviceId not registered
```javascript
{
error: `roll not found`,
errorOccured: `roll`,
}
```
```javascript
{
error: 'device not registered',
errorOccured: 'device',
}
```
- 401 - DeviceId not a match
```javascript
{
data: false,
error: 'deviceid not a match',
errorOccured: 'deviceid'
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>GET `/login/:deviceid` - to check whether</strong><br>
<strong>Special Notes</strong><br>
- `deviceid` is the parameter
- 200 status returns data in the form of array of objects
<strong>Status codes and errors</strong>
- 200 - (OK)
```javascript
{
data: [__DETAILS_OF_THE_USER_WITH_THAT_ROLL__]
}
```
- 404 - deviceId not registered/ deviceId not found
```javascript
{
error: 'device not registered',
errorOccured: 'device',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>POST `/device` - Register the deviceId and roll<br></strong>
<strong>Schema</strong><br>
```javascript
{
roll: __ROLL_NUMBER__,
deviceId : __DEVICEID__
}
```
<strong>Status codes and errors</strong>
- 201 -OK (Data saved successfully)
```javascript
{
data: [__DETAILS_OF_THE_USER_WITH_THAT_ROLL__]
}
```
- 406
- Roll number not correct or Kiit roll number not added
```javascript
{
error: `roll not correct`,
errorOccured: `roll`,
}
```
- Roll number or deviceId not entered (undefined)
```javascript
{
error: `__ROLL/DEVICID__ invalid`,
errorOccured: `__ROLL/DEVICID__ `,
}
```
- Device already registered
```javascript
{
error: 'device already registered',
errorOccured: 'device',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>GET `/user/roll/:roll` - Get the user with roll<br></strong>
<strong>Special Notes</strong><br>
- `:roll` - roll number parameter to enter a valid kiit roll number
- Query can be added
- `semester` can be added
Example : `/user/roll/1928056?semester=3rd`
<strong>Status codes and errors</strong>
- 200 - User found
```javascript
{
data: {
_USER_DATA__
}
}
```
- 404 - User account not found
```javascript
{
error: 'account not found',
errorOccured: 'account',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
GET `/user/roll/1928087`
Return
```json
{
"data": [
{
"presentClasses": [],
"_id": "60d2d35c7b88912ae46d51cd",
"roll": "1928087",
"name": "Stefan Salvatore",
"semester": "3rd",
"contact": "6690340023",
"gender": "Male",
"branch": "CSSE",
"course": "60d2d1127b88912ae46d51b1",
"__v": 0
}
]
}
```
- <strong>GET `/user/id/:userId` - Get the student with that userId<br></strong>
<strong>Special Notes</strong><br>
- `:userId` is a parameter for UserId
<strong>Status codes and errors</strong>
- 200 - User found
```javascript
{
data: {
_USER_DATA__
}
}
```
- 404 - User account not found
```javascript
{
error: 'account not found',
errorOccured: 'account',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
<strong>Example</strong><br>
Request
GET `/user/id/60d2d35c7b88912ae46d51cd`
Return
```json
{
"data": [
{
"presentClasses": [],
"_id": "60d2d35c7b88912ae46d51cd",
"roll": "1928087",
"name": "Stefan Salvatore",
"semester": "3rd",
"contact": "6690340023",
"gender": "Male",
"branch": "CSSE",
"course": "60d2d1127b88912ae46d51b1",
"__v": 0
}
]
}
```
- <strong>POST `/class/create` - Create a new class<br></strong>
<strong>Schema</strong><br>
```javascript
{
courseId: __COURSE_ID__
}
```
<strong>Special Notes</strong><br>
- `courseId` must be defined in the body
<strong>Status codes and errors</strong>
- 200 - OK (class created)
```javascript
{
data: {
__SAVED_DATA__
}
}
```
- 406 - CourseId not entered
```javascript
{
error: 'courseId not entered',
errorOccured: 'courseId',
}
```
- 404
- Course not found
```javascript
{
error: 'course not found',
errorOccured: 'course',
}
```
- No users under that course
```javascript
{
error: 'no users found',
errorOccured: 'users',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>DELETE `/class/:classid` - Delete class<br></strong>
<strong>Special Notes</strong><br>
- `:classid` : classid must be valid
<strong>Status codes and errors</strong>
- 200 - OK (class deleted)
```javascript
{
data: 'deleted',
studentUpdate: __OUTCOME__,
}
```
- 404 - Class not found
```javascript
{
error: 'Class not found',
errorOccured: 'class',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>POST `/register` - registration<br></strong>
<strong>Schema</strong><br>
```javascript
{
roll: __ROLL__,
name: __NAME__,
semester: __SEMESTER__,
contact: __CONTACT___,
gender: __GENDER__,
branch: __BRANCH__,
course: __COURSEID__,
}
```
<strong>Special Notes</strong><br>
- `roll` should be valid kiit roll number
- valid `semesters` are `1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th` (case sensitive)
- valid `gender` are `Male, Female, Others` (case sensitive)
- `contact` number is 10-digit mobile number
- valid `branch` are `ETC, EEE, EE, ECS, EI, MECHANICAL, CIVIL, CS, IT, CSSE, CSCE,`
- `course` is courseID and should be obtained from get request for courses
- No need for precheck for seats left. This endpoint returns an error (discussed below) if there is no seat left for the selected course
<strong>Status codes and errors</strong>
- 201 - Data added succesfully (user added)
```javascript
{
data: {
__DATA_SAVED__
}
}
```
- 406
- Data invalid or not entered
```javascript
{
error: '__ERROR__ invalid'
errorOccured: '__ERROR__'
}
```
- Data not entered according to validation
```javascript
{
error: '__ERROR__ not correct'
errorOccured: '__ERROR__'
}
```
- 409 - Account already present
```javascript
{
error: 'account already registered',
errorOccured: 'account',
}
```
- 402 - Seat are full for that course
```javascript
{
error: 'seats full for selected course',
errorOccured: 'seats',
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```
- <strong>POST `/attendance` - Mark Attendance<br></strong>
<strong>Schema</strong><br>
```javascript
{
attendance: [
{
classId: __CLASS_ID__,
studentId: __STUDENT_ID__,
},
{
classId: __CLASS_ID,
studentId : __STUDENT_ID__
},
...
]
}
```
<strong>Special Notes</strong><br>
- `attendance` is an array of object containing classId and studentId. Even if there is only one attendance to mark it should be passed in an array. <br>
Example
```javascript
{
attendance: [
{
classId: __CLASS_ID,
studentId: __STUDENT_ID__,
},
]
}
```
<strong>Status codes and errors</strong>
- 201 - Marked (details of each student can be of any form discussed below)
```javascript
{
data: [
{
studentId: __USER_ID__,
classId: __CLASS_ID__,
isAttendanceGiven: false,
error: 'class not found',
},
{
studentId: __USER_ID__ ,
classId: __CLASS_ID__,
isAttendanceGiven: false,
error: 'student already marked as present',
},
{
studentId: __USER_ID__,
classId: __CLASS_ID__,
isAttendanceGiven: false,
error: 'student not found',
},
{
studentId: __USER_ID__,
classId: __CLASS_ID__,
isAttendanceGiven: false,
error: 'student account error',
},
{
studentId: __USER_ID__,
classId: __CLASS_ID__,
isAttendanceGiven: true,
},
...
]
}
```
- 500 - Database Unresponsive (No data)
```javascript
{
error : __ERROR_DESC__,
errorOccured: __ERROR_OCCURED_AT__,
errorMessage : __DETAILED_ERROR_REPORT__
}
```