- Docker/Docker Compose
- Node.js (>= 22.x)
- pnpm (>= 9.x)
- PostgreSQL (>= 16)
Ниже доступны два способа запустить проект:
- На localhost
- В Docker
-
Скопируйте
.env.exampleв.env. Переменные окружения уже заданы по умолчанию для корректной работы -
Запустите сервис в Docker
# задание 1
docker-compose up -d --build
# задание 2
docker-compose -f docker-compose.task2.yml up -d --build- Перейдите к документации Swagger API по адресу http://localhost:3000/docs
- Завершите работу Docker-контейнеров
# задание 1
docker-compose down
# задание 2
docker-compose -f docker-compose.task2.yml down- Скопируйте
.env.exampleв.envи измените переменные окружения. Достаточно поменять толькоDB_USERNAME/DB_PASSWORDдля вашей локальной БД. Остальные переменные уже заданы по умолчанию для корректной работы - Создайте новую базу данных в PostgreSQL, используя значение из переменной
DB_NAMEфайла.env - Установите зависимости
pnpm i- Запустите миграции и сидеры
# миграции
pnpm m:run
# сидеры
pnpm seed:run- Запустите сервер в режиме разработки
pnpm start:dev- Перейдите к документации Swagger API по адресу http://localhost:3000/docs
# юнит-тесты
pnpm run test
# e2e-тесты
# важно: должен быть запущен Docker (требуется для Testcontainers + PostgreSQL)
pnpm run test:e2e
# покрытие тестами
pnpm run test:covСсылка: https://docs.google.com/document/d/1r5Mf6sqla_7DEYxznouiMtQjaivKN7xM/edit
- Создать простое webApp, используя Nestjs + Fastify, PostgreSQL & TypeORM.
- При запуске приложение должно создать в базе данных таблицу “users” с помощью миграции и добавить в неё один пользовательский аккаунт, на котором будет лишь одно поле “balance” со значением 10000. Для совершения миграций, управляемых приложением, можно использовать встроенные возможности TypeORM или библиотеку “Umzug”.
- Написать route для обновления баланса пользователя, принимающего параметры userId и amount.
- Важным условием является то, что баланс пользователя не может быть отрицательным.
- Изменение баланса должно производиться в реальном времени, без использования очередей и отложенных задач.
- Проект должен включать docker compose файл и запускаться локально.
- Обязательно наличие тестов
- Продолжить разработку webApp, на этот раз нашему приложению требуется обрабатывать клиентов на нескольких серверах одновременно, минимум 5 параллельных копий.
- Нужно добавить в приложение cron-service, в котором будет минимум 5 тестовых фоновых задач.
- Назвать каждую можно как угодно.
- У каждой задачи должна быть настройка её интервала выполнения, вызываемой ею функции, имени задачи.
- Каждая задача может выполняться от 1 секунды до 24 часов.
- Добавить внутрь обработку данных или sleep, чтоб функция задачи завершилась не ранее, чем через 2 минуты после запуска.
- Каждая задача, если её запустила какая-то из копий приложения, не должна запуститься на другой копии, пока где-либо запущена.
- На одной копии приложения может быть запущено сколько угодно задач.
- При одновременном старте всех копий приложения, копии должны распределить между собой задачи “+-” равномерно, т.е. не должно быть такого, чтобы одна копия просто взяла на себя все задачи.
- Выполненные задачи должны записываться историей в базу данных.
- Должна быть возможность в реальном времени получить по ручке список всех фоновых задач, с информацией по каждой, на каком из серверов она выполняется и какое время прошло с момента её запуска. В этом списке также должны находиться задачи, которые ожидают выполнения.
- Важным моментом является то, что ни одна копия приложения не должна ничего знать о другой копии, полное отсутствие мастер-сервера.
- Для реализации задачи использовать ровно те же технологии, что уже были в первой части, ничего нового использовать нельзя.
