Простой, но функциональный REST API для управления заметками. Проект создан в образовательных целях для изучения основ бэкенд-разработки, включая безопасную аутентификацию, авторизацию и полное покрытие кода тестами.
- Аутентификация и Авторизация: Регистрация и вход пользователей с использованием JWT. Защищённые маршруты гарантируют, что пользователи могут управлять только своими заметками.
- CRUD операции: Полная поддержка создания, чтения, обновления и удаления заметок.
- Продвинутая валидация: Централизованная валидация входящих данных с помощью Joi.
- Архитектура: Чистая трёхслойная архитектура (Routes → Controllers → Services).
- Тестирование: 100% покрытие кода unit- и интеграционными тестами с использованием Jest.
- База данных: PostgreSQL, работающая в изолированных Docker-контейнерах для разработки и тестирования.
- Логирование: Профессиональное логирование событий и ошибок с помощью Winston.
Для запуска проекта на локальной машине выполните следующие шаги.
- Node.js (рекомендуется версия 18.x или выше)
- pnpm
- Docker Desktop
-
Клонируйте репозиторий:
git clone <ссылка_на_ваш_репозиторий> cd <название_папки_проекта>
-
Установите зависимости:
pnpm install
-
Настройте переменные окружения: Создайте файл
.env
в корне проекта, скопировав содержимое из.env.example
.cp .env.example .env
-
Запустите базы данных в Docker: Эта команда создаст и запустит контейнеры для разработки и для тестов.
docker-compose up -d
-
Примените миграции к базе данных разработки:
pnpm prisma migrate dev
-
Запустите приложение в режиме разработки:
pnpm run dev
🎉 После этого приложение будет доступно по адресу http://localhost:3000
.
Проект покрыт тестами на 100%. Тесты запускаются в изолированном окружении с отдельной базой данных.
-
Перед первым запуском тестов необходимо подготовить тестовую базу данных, применив к ней миграции:
pnpm prisma:test:migrate
-
Для запуска всех тестов выполните:
pnpm test
Метод | Путь | Описание | Тело запроса (пример) |
---|---|---|---|
POST |
/auth/register |
Регистрация нового пользователя | { "email": "user@example.com", "password": "Password123" } |
POST |
/auth/login |
Вход пользователя и получение JWT | { "email": "user@example.com", "password": "Password123" } |
Примечание: Для всех маршрутов заметок требуется заголовок
Authorization: Bearer <ваш_jwt_токен>
.
Метод | Путь | Описание | Тело запроса (пример) |
---|---|---|---|
GET |
/notes |
Получить список своих заметок | - |
GET |
/notes/:id |
Получить свою заметку по ID | - |
POST |
/notes |
Создать новую заметку | { "title": "Новая", "content": "Текст" } |
PUT |
/notes/:id |
Полностью обновить свою заметку | { "title": "Обновлено", "content": "Новый" } |
PATCH |
/notes/:id |
Частично обновить свою заметку | { "title": "Только заголовок" } |
DELETE |
/notes/:id |
Удалить свою заметку | - |
Метод | Путь | Описание |
---|---|---|
GET |
/health |
Проверить "здоровье" сервиса |