Table of content

Postman

Щоб перевірити роботу REST API пиши так:

Routes "user"

Отримує body в форматі {email, password, subscription} (перші два поля обов'язкові, всі поля мають бути стрінгами, валідація присутня)
Відповідь — при помилці валідації повертається "Помилка від Joi або іншої бібліотеки валідації" зі статусом 400; якщо пошта вже використовується кимось іншим повертається ResponseBody: {"message": "Email in use"} зі статусом 409; якщо з body все добре повертається об'єкт наступного виду { "user": { "email": "example@example.com", "subscription": "starter" } } і статусом 201 (поле subscription додається по замовчуванню, якщо його не вказати при реєстрації через налаштування моделі "user" - subscription: { type: String, enum: ["starter", "pro", "business"], default: "starter" })

Отримує body в форматі {email, password} (всі поля обов'язкові та мають бути стрінгами, валідація присутня)
Відповідь — при помилці валідації повертається "Помилка від Joi або іншої бібліотеки валідації" зі статусом 400; якщо пароль або email невірний повертається ResponseBody: {"message": "Email or password is wrong"} зі статусом 401; якщо з body все добре шукається пароль для користувача в БД, якщо пароль знаходиться створюється токен, зберігається в поточному полі юзера і повертається об'єкт наступного виду ResponseBody: { "token": "exampletoken", "user": { "email": "example@example.com", "subscription": "starter" } } і статусом 200

Отримує пусте body з обовʼязковим заголовком Authorization: "Bearer {{token}}"
Відповідь — якщо користувача у моделі "user" за _id не існує повертається ResponseBody: {"message": "Not authorized"} і статус 401; в іншому випадку, видаляється токен у поточного юзера і повертається статус 204

Запит відправляється з обовʼязковим заголовком Authorization: "Bearer {{token}}"
Відповідь — якщо користувача не існує повертається ResponseBody: {"message": "Not authorized"} і статус 401; в іншому випадку повертається ResponseBody: { "email": "example@example.com", "subscription": "starter" } і статус 200

Команди:

  • npm start — старт сервера в режимі production
  • npm run start:dev — старт сервера в режимі розробки (development)
  • npm run lint — запустити виконання перевірки коду з eslint, необхідно виконувати перед кожним PR та виправляти всі помилки лінтера
  • npm run lint:fix — та ж перевірка лінтера, але з автоматичними виправленнями простих помилок

Routes "contact"

Відповідь — повертається масив всіх контактів в json-форматі зі статусом 200

Відповідь — якщо такий id є, повертається об'єкт контакту в json-форматі зі статусом 200; якщо такого id немає, повертається json з ключем "message": "not found" і статусом 404

Отримує body в форматі {name, email, phone} (усі поля обов'язкові та мають бути стрінгами)
Відповідь — якщо в body немає якихось обов'язкових полів або вони не строки, повертається json з ключем {"message": "missing required field(s) / non-string field(s)"} і статусом 400; якщо з body все добре, додає унікальний ідентифікатор в об'єкт контакту i повертається об'єкт з доданим id {id, name, email, phone} і статусом 201

Відповідь — якщо такий id є, повертається json формату {"message": "contact deleted"} і статусом 200; якщо такого id немає, повертається json з ключем "message": "not found" і статусом 404

Отримує body в json-форматі c оновленням будь-яких полів name, email и phone (валідадія присутня як у додавані контакту)
Відповідь — якщо з body всe добре - повертається оновлений об'єкт контакту зі статусом 200, інакше повертається json з ключем "message": "not found" і статусом 404

Отримує body в json-форматі з оновленням поля favorite (має бути значення boolean)
Відповідь — якщо в body немає якихось обов'язкових полів або вони не строки, повертається json з ключем {"message":"missing field favorite"} і статусом 400; якщо з body всe добре - повертається оновлений об'єкт контакту зі статусом 200, інакше повертається json з ключем "message": "not found" і статусом 404

Swagger documentation

Link to documentation:
https://contacts-backend-eikd.onrender.com/api-docs/ screenshot screenshot screenshot screenshot