https://github.com/vsymoniuk/school-rest-api
REST API for school DB
https://github.com/vsymoniuk/school-rest-api
Last synced: 4 months ago
JSON representation
REST API for school DB
- Host: GitHub
- URL: https://github.com/vsymoniuk/school-rest-api
- Owner: vsymoniuk
- Created: 2020-01-27T09:05:15.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-22T13:58:05.000Z (over 2 years ago)
- Last Synced: 2023-03-07T08:57:10.052Z (over 2 years ago)
- Language: JavaScript
- Size: 583 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# REST API сервер для взаємодії з базою даних школи
На сервері наявна авторизація за допомогою `JSONWebToken` і більшість роутів захищенні з використанням базового функціоналу `passportJS`. Щоб отримати доступ до всього функціоналу необхідно додати токен (буде дійсний протяом доби) в хедер Authorization. Сервер запускається з кореневої директорії командою `npm run start`
## Авторизація
Для отримання токена, спочаку необхідно створити користувача за допомогою ``POST /api/auth/register`` і зробивши запит по ``POST /api/auth/login``, використовуючи попередні дані, отримайте токен.## Сутності
Для всіх таблиць бази існує однаковий набір CRUD запитів які підтримують `application/x-www-form-urlencoded` формати.
Для перегляду необхідних полів таблиць пергляньте розділ Моделі.``POST /api/{entity}/`` створює нову сутність, повертає її екземпляр, при пропуску необхідних полів, або виникнення логічних помилок, наприклад створення екземпляра уроку для класу з 4 учнями в аудиторії з 3 місцями, користувач буде отримувати помилки з відповіними повідомленнями
##### Приклад помилки
```javascript
{
success: false,
message: "error message"
}
`````GET /api/{entity}/?page={pageNumber}`` повертає всі екземпляри відповідної сутності, query парметр page вказує номер сторінки, розмір сторінки, за замовчуванням, рівний трьом.
##### Приклад для `/api/user/?page=2`
```javascript
{
"enrollingYear": 2020,
"_id": "5e301906e820cb1c04a53ba0",
"email": "pupil1",
"password": "$2a$10$K469wLHTvKbGPIMNGTS6M.rRFQgLbxeVOn8Z/GYkzGKFBVvPKZR.O",
"firstName": "",
"lastName": "",
"role": "pupil",
"__v": 0
},
{
"enrollingYear": 2020,
"_id": "5e30190fe820cb1c04a53ba1",
"email": "pupil2",
"password": "$2a$10$tCAcHByvr34uKq/ZO7A/e.GZheGoydC8sylcOcRzJieHU1UuqBe.m",
"firstName": "",
"lastName": "",
"role": "pupil",
"__v": 0
}
`````GET /api/{entity}/:id`` дозволяє отримати сутність за її ідентифікатором
##### Приклад для `/api/class/5e302c51bfaed0300f245b77`
```javascript
{
"pupils": [
{
"enrollingYear": 2020,
"_id": "5e2fea829663036a2a6c243d",
"email": "pupil",
"password": "$2a$10$t7sMuFhRluCkRrvx9vtQieNO5uGuxZb9dfWQI44Pt/Bdsbk5QwV8O",
"firstName": "",
"lastName": "",
"role": "pupil",
"__v": 0
},
{
"enrollingYear": 2020,
"_id": "5e30190fe820cb1c04a53ba1",
"email": "pupil2",
"password": "$2a$10$tCAcHByvr34uKq/ZO7A/e.GZheGoydC8sylcOcRzJieHU1UuqBe.m",
"firstName": "",
"lastName": "",
"role": "pupil",
"__v": 0
}
],
"_id": "5e302c51bfaed0300f245b77",
"name": " 5-A",
"curator": {
"enrollingYear": 2020,
"_id": "5e2fff0964e56a012de7383f",
"email": "teacher",
"password": "$2a$10$WaOSPQg7fofw/sUFpX1nzex6pj87u.PMvQ7Oahz6ZWWqjjSyWNkrK",
"firstName": "",
"lastName": "",
"role": "teacher",
"__v": 0
},
"__v": 0
}
`````PATCH /api/{entity}/:id`` дає користувачу змогу модифікувати будь-яку сутність за її ідентифікатором, повертає відредагований варінт цієї сутності
``DELETE /api/{entity}/:id`` видаляє сутність за унікалним ідентифікатором, повертає інформацію про успіх операції
##### Приклад для `/api/auditorium/5e301d0c67579e20a7a35130`
```javascript
{
"message": "auditorium was deleted"
}
```
## Моделі
На ERD діаграмі схематично зображено зв'язки між таблицями, та позначенні поля, які є необхідними для успішності запиту.
## Помилки
У більшості запитів наявні перевірки, які завадять користувачу умисно внести дані, які можуть нарушити логіку програми і не дадуть помилитися при формуванні запиту. Оброблення помилок за допомогою наступних функцій
```javascript
module.exports.catch = (res, error) => {
res.status(500).json({
success: false,
message: error.message ? error.message : error
})
}module.exports.response = (res, code, message) => {
res.status(code).json({
success: false,
message: message
})
}
```