Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dm-zhuk/goit-node-rest-api

Topics 4-7. #goit-node-rest-api
https://github.com/dm-zhuk/goit-node-rest-api

dotenv express glitch gravatar-api jest-tests nodejs rest-api

Last synced: about 6 hours ago
JSON representation

Topics 4-7. #goit-node-rest-api

Awesome Lists containing this project

README

        

#goit-node-rest-api
Написати REST API для роботи з колекцією контактів. Для роботи з REST API використовуй [Postman] .

Крок 1
Cтвори репозиторій з назвою goit-node-rest-api і помісти на головну гілку (main) файли з папки src. Завваж: папки src в репозиторії бути не повинно, тебе цікавить лише її вміст.
Створи гілку hw02-express з гілки main.
Встанови модулі командою
npm i

Крок 2
У файл contactsServices.js (знаходиться в папці services) скопіюй функції з файла contacts.js з домашнього завдання до модуля 1.

Крок 3
Напиши контролери у файлі contactsControllers.js (знаходиться у папці controllers) з урахуванням наведених нижче вимог.
REST API повинен підтримувати такі раути:
GET /api/contacts

Викликає функцію-сервіс getContacts для роботи з json-файлом contacts.json
Повертає масив всіх контактів в json-форматі зі статусом 200

GET /api/contacts/:id

Викликає функцію-сервіс getOneContact для роботи з json-файлом contacts.json
Якщо контакт за id знайдений, повертає об'єкт контакту в json-форматі зі статусом 200
Якщо контакт за id не знайдено, повертає json формату {"message": "Not found"} зі статусом 404

DELETE /api/contacts/:id

Викликає функцію-сервіс removeContact для роботи з json-файлом contacts.json
Якщо контакт за id знайдений і видалений, повертає об'єкт видаленого контакту в json-форматі зі статусом 200
Якщо контакт за id не знайдено, повертає json формату {"message": "Not found"} зі статусом 404

POST /api/contacts

Отримує body в json-форматі з полями {name, email, phone}. Усі поля є обов'язковими - для валідації створи у файлі contactsSchemas.js (знаходиться у папці schemas) схему з використаням пакета joi
Якщо в body немає якихось обов'язкових полів (або передані поля мають не валідне значення), повертає json формату {"message": error.message} (де error.message - змістовне повідомлення з суттю помилки) зі статусом 400
Якщо body валідне, викликає функцію-сервіс createContact для роботи з json-файлом contacts.json, з передачею їй даних з body
За результатом роботи функції повертає новостворений об'єкт з полями {id, name, email, phone} і статусом 201

PUT /api/contacts/:id

Отримує body в json-форматі з будь-яким набором оновлених полів (name, email, phone) (всі поля вимагати в боді як обов'язкові не потрібно: якщо якесь із полів не передане, воно має зберегтись у контакта зі значенням, яке було до оновлення)
Якщо запит на оновлення здійснено без передачі в body хоча б одного поля, повертає json формату {"message": "Body must have at least one field"} зі статусом 400.
Передані в боді поля мають бути провалідовані - для валідації створи у файлі contactsSchemas.js (знаходиться у папці schemas) схему з використанням пакета joi. Якщо передані поля мають не валідне значення, повертає json формату {"message": error.message} (де error.message - змістовне повідомлення з суттю помилки) зі статусом 400
Якщо з body все добре, викликає функцію-сервіс updateContact, яку слід створити в файлі contactsServices.js (знаходиться в папці services). Ця функція має приймати id контакта, що підлягає оновленню, та дані з body, і оновити контакт у json-файлі contacts.json
За результатом роботи функції повертає оновлений об'єкт контакту зі статусом 200.
Якщо контакт за id не знайдено, повертає json формату {"message": "Not found"} зі статусом 404

Зверни увагy

Валідацію body можна як здійснювати у контролері, так і створити для цих цілей окрему міддлвару, яка буде викликатись до контролера. Для створення міддлвари можеш скористатись функцією validateBody.js, яку знайдеш у папці helpers
Для роботи з помилками можна скористатись функцією HttpError.js, яку знайдеш у папці helpers

Якщо вказані функції використовувати не будеш, видали їх з проєкту перед тим, як надсилатимеш роботу на перевірку ментору

Критерії прийому
Створено репозиторій з домашнім завданням
Посилання на репозиторій (гілку з домашнім завданням) надіслане ментору на перевірку
Код відповідає технічному завданню (мають бути в точності дотримані, зокрема, вимоги стосовно струкутри body, контенту та статусу відповідей на запити тощо)
У коді немає закоментованих ділянок коду
Проєкт коректно працює з актуальною LTS-версією Node