Задание. Используя Git, TypeScript, NestJS, Prisma и PostgreSQL создайте RESTful-сервис для работы с информацией о пользователях. Требования:
- Docker и Docker Compose:
- Написать Dockerfile для приложения и compose.yml файл для запуска приложения и базы данных в контейнерах.
- Структура таблицы пользователей:
- Таблица пользователей должна содержать следующие поля:
- id (UUID, Primary Key)
- firstName (строка)
- lastName (строка, необязательная)
- createdAt (дата создания записи)
- updatedAt (дата обновления)
- Миграция:
- Создать файл миграции с помощью Prisma для создания таблицы пользователей.
- Написать скрипт для заполнения таблицы случайными записями (достаточно 10 записей).
- Создание CRUD-ресурса:
- Создать новый CRUD-ресурс для управления пользователями.
- Реализовать все стандартные методы CRUD.
- Добавить отдельный метод для получения всех записей таблицы, использующий Server Sent Events (SSE).
- Валидация:
- Для каждого метода API валидировать параметры и тело запроса.
- Конфигурация подключения к БД:
- Вынести информацию о подключении к базе данных (URL, имя пользователя, пароль и др.) в переменные окружения. Создайте файл .env для хранения этих переменных.
- Размещение кода:
- Разместить код в репозитории на GitHub. Убедитесь, что включены:
- README.md, описывающий проект, его установку и запуск.
- .gitignore, чтобы исключить ненужные файлы и папки из репозитория.
------------> Запуск проекта <-------------
- Установить зависимости npm i
- Создать файл .env после чего прописать криденшелы
- Выолнить команду npm run db
- Выполнить команду npm run seed (для заполнения бд)
- Запустить сервер npm run dev
------------>Тестирование сервиса <------------ Тестирование можно осуществлять через Thunder client (расширение VS CODE)
-
Создание пользователя (POST) http://localhost:3000/users { "firstName": "Kir", "lastName": "Bulychev" }
-
Получение всех пользователей (GET) http://localhost:3000/users
-
Получение пользователя по ID (GET) http://localhost:3000/users/{id}
-
Обновление пользователя (PUT) http://localhost:3000/users/{id} { "firstName": "Jane", "lastName": "Smith" }
-
Удаление пользователя (DELETE) http://localhost:3000/users/{id}
-
Получение пользователей через Server-Sent Events (SSE) http://localhost:3000/users/stream через курл (curl -i http://localhost:3000/users/stream) - интервал 5 секунд
-
Тестировани валидации: http://localhost:3000/users в body ------> { "firstName": "Иван" } ожидаемый ответ: { "message": [ "Фамилия не должна быть пустой", "lastName must be a string" ], "error": "Bad Request", "statusCode": 400 }
тестирование через curl ---> (curl -X PUT http://localhost:3000/users/invalid-id
-H 'Content-Type: application/json'
-d '{"firstName": "Петр"}' ) ожидаемый ответ -----> { "statusCode": 400, "message": "Validation failed (uuid is expected)", "error": "Bad Request" }