---
# System prepended metadata

title: NCU Court Backend API

---

# NCU Court Backend API

## Public Endpoint
- `https://ncu-court.memery.app`
- The data in this endpoint will be saved in `ncu-court-prod` database
- <font color="red">**DO NOT change the data in database manually, every update must go through API**</font>

## Auth API
**`POST /api/auth/login`**
| Body | Type | Comment |
| --------  | -------- | -------- |
| studentId | string | required |
| password  | string | required |


**`POST /api/register`**
| Body | Type | Comment |
| --------  | -------- | -------- |
| name      | string | required |
| email     | string | required |
| studentId | string | required |
| password  | string | required |
| phone     | string | required |

## Users API

**`GET /api/users/profile`**
- Get the user profile yourselves

**`GET /api/users`**

| Query String | Type | Comment |
| --------   | -------- | -------- |
| keyword    | string   |  optional    |
| role       | string     |  optional (`regular`,`admin`, `superAdmin`)    |
| sortBy     | string     |  optional (`createdTime`, `lastModified`)    |


**`PUT /api/users`**
| Body | Type | Comment |
| --------  | -------- | -------- |
| name      | string | optional |
| email     | string | optional |
| studentId | string | optional |
| oldPassword  | string | optional |
| newPassword  | string | optional |
| phone     | string | optional |

**`DELETE /api/users/:id`**
- Soft delete (`role=deleted`)

## Court API
**`GET /api/courts`**
| Query String | Type  | Comment |
| --------  | -------- | -------- |
| name      | string   | optional |
| type      | string   | optional (`badminton`, `basketball`, `tennis`, `volleyball`) |

**`POST /api/courts`**
- content type of post body should be `form-data`

| Body | Type | Comment |
| --------  | -------- | -------- |
| photo     | file | required |
| name      | string | required |
| price     | string | required (should be a number string) |
| type     | string | required (`badminton`, `basketball`, `tennis`, `volleyball`) |

**`PUT /api/courts/:id`**
- **TODO**: This API is not finished

| Body | Type | Comment |
| --------  | -------- | -------- |
| photo     | file   | optional |
| name      | string | optional |
| price     | string | optional (should be a number string) |
| type     | string | optional (`badminton`, `basketball`, `tennis`, `volleyball`) |

**`DELETE /api/courts/:id`**
- This API only update the field `beReserved=false` for given court id to delete court

## Reservation API
**`GET /api/reservations`**
- regular users can only find their reservations
- admin/superAdmin users can find all reservations

| Query String | Type | Comment |
| --------  | -------- | -------- |
| courtId     | string | optional |
| time     | string | optional (`8:00`,`9:00` ... `20:00`) |
| date     | string | optional (yyyy/mm/dd) |

**`GET /api/allReservations`**
- get all reservations

| Query String | Type | Comment |
| --------  | -------- | -------- |
| courtId     | string | optional |
| time     | string | optional (`8:00`,`9:00` ... `20:00`) |
| date     | string | optional (yyyy/mm/dd) |

**`POST /api/reservations`**
| Body | Type | Comment |
| --------  | -------- | -------- |
| courtId     | string | required |
| time     | string | required (`8:00`,`9:00` ... `20:00`) |
| date     | string | required (yyyy/mm/dd) |

**`DELETE /api/reservations/:id`**
- Delete reservation for given reservation id
- `regular` users can delete their own reservation
- `admin` and `superAdmin` can delete any reservation

## Message API
**`GET /api/messages`**
| Query String | Type | Comment |
| --------  | -------- | -------- |
| courtId     | string | required |

**`POST /api/messages`**
| Body | Type | Comment |
| --------  | -------- | -------- |
| courtId     | string | required |
| content     | string | required |

**`DELETE /api/messages/:id`**
- Delete message for given message id
- Users can only delete their message