- Создать файл
.env
со структурой как в файле.env.example
yarn install
docker-compose up -d
yarn run build:full
yarn run db:create
yarn run migration:run
yarn run seed:fresh
yarn run dev
yarn run seed:fresh
yarn run start
yarn install --immutable
yarn run build:routes
yarn run types
yarn run lint:check
yarn 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