- Создать файл
.envсо структурой как в файле.env.example yarn installdocker-compose up -dyarn run build:fullyarn run db:createyarn run migration:run
yarn run seed:freshyarn run dev
yarn run seed:freshyarn run start
yarn install --immutableyarn run build:routesyarn run typesyarn run lint:checkyarn run prettier:check
yarn run check
- Основной код приложения разделен на папки
contollersиetities; - В
entitiesлежит код, отвечающий за структуру БД и за ее наполнение сидами; - Код в папке
entitiesсгруппирован по сущностям (таблицам), за которые он отвечает; - Таблицы называются в PascalCase. Например
Users; - Сущности в
entitiesвнутри себя разделены на несколько частей:entity: определение таблицы;factory: генератор элемента таблицы для сидов;seeder: генератор необходимого количества сидов;
- Части сущностей в
entitiesименуются по принципу$EntityName$.$partName$.
НапримерUsers.entity,Users.factory; - Все части сущностей группируются в файлах с соответствующим названием по виду части.
Т.е. всеfactoryимпортируются вfactories; - В
controllersлежат код, отвечающий за эндпоинты и работу с БД; - Код в папке
controllersсгруппирован по доменам; - Домены в
controllersразделены на несколько частей:DTO: интерфейсы для отправки и получения данных через эндпоинты.
Также они выполняют роль валидации (при помощи JSDoc).
Важный момент! Тут нельзя использовать сущности изentity;service: класс для работы с БД (отправки запросов);controller: класс для обработки запросов на эндпоинты.
Важный момент! Вся бизнес-логика должна находиться вservice. Тут только работа с API;
- Части сущностей в
controllersименуются аналогично частям вentities. Смотри пункт 6; - Код из
controllersникуда не импортируется. Он собирается роуты и сваггер
при помощиyarn run build:routes.
yarn run db:create: создание базы данныхyarn run db:drop: отчистка базы данных от данныхyarn run db:fresh: пересоздание базы данныхyarn run seed:run: заполнение базы данных сгенерированными даннымиyarn run seed:fresh: пересоздание базы данных и заполнение ее сгенерированными данными
После любых изменений БД (в коде) нужно создавать миграцию.
Можно локально разрабатывать без миграций, но в конце работы над фичей надо создавать миграцию, при необходимости.
Чтобы локально работать без миграции нужно включить опцию synchronize: true в src/database/data-source.ts
Только перед этим желательно дропнуть БД (без сидов): yarn run db:drop
Перед работой с миграциями нужно обязательно сбилдить приложение:
yarn run build:full
Миграции можно генерировать исходя из текущего состояния БД и кодовой базы при помощи команды:
yarn run migration:generate ./src/migrations/<MigrationName>
Где <MigrationName> - краткое описание изменений в формате PascalCase. Например:
yarn run migration:generate ./src/migrations/CreateUsersTable
После выполнения этой команды генерируется файл миграции (если все прошло успешно).
Этот файл нужно импортировать в src/migrations/migrations.ts и добавить в конец массива migrations.
Если не получилось сгенерировать миграции нужно попытаться пофикисть проблемы.
Если не получается, то надо создать пустую миграцию и собственноручно ее заполнить.
Сделать это можно при помощи команды:
yarn run migration:create
После создания миграций нужно запустить миграции при помощи:
yarn run migration:run
В случае, если надо отменить последнюю миграцию используем:
yarn run migration:revert