Skip to content
/ ts_backend_template Public template

Шаблон backend приложения на TS

Notifications You must be signed in to change notification settings

0ldCold/ts_backend_template

Repository files navigation

BackEnd


Содержание

  1. Стек
  2. Запуск
  3. Архитектура
  4. База данных
  5. Миграции

Стек


Запуск

Подготовка

  1. Создать файл .env со структурой как в файле .env.example
  2. yarn install
  3. docker-compose up -d
  4. yarn run build:full
  5. yarn run db:create
  6. yarn run migration:run

В dev-mode

  1. yarn run seed:fresh
  2. yarn run dev

В prod-mode

  1. yarn run seed:fresh
  2. yarn run start

CI/CD

  1. yarn install --immutable
  2. yarn run build:routes
  3. yarn run types
  4. yarn run lint:check
  5. yarn run prettier:check

Проверка кода:

  1. yarn run check

Базовая_архитектура

  1. Основной код приложения разделен на папки contollers и etities;
  2. В entities лежит код, отвечающий за структуру БД и за ее наполнение сидами;
  3. Код в папке entities сгруппирован по сущностям (таблицам), за которые он отвечает;
  4. Таблицы называются в PascalCase. Например Users;
  5. Сущности в entities внутри себя разделены на несколько частей:
    • entity: определение таблицы;
    • factory: генератор элемента таблицы для сидов;
    • seeder: генератор необходимого количества сидов;
  6. Части сущностей в entities именуются по принципу $EntityName$.$partName$.
    Например Users.entity, Users.factory;
  7. Все части сущностей группируются в файлах с соответствующим названием по виду части.
    Т.е. все factory импортируются в factories;
  8. В controllers лежат код, отвечающий за эндпоинты и работу с БД;
  9. Код в папке controllers сгруппирован по доменам;
  10. Домены в controllers разделены на несколько частей:
    • DTO: интерфейсы для отправки и получения данных через эндпоинты.
      Также они выполняют роль валидации (при помощи JSDoc).
      Важный момент! Тут нельзя использовать сущности из entity;
    • service: класс для работы с БД (отправки запросов);
    • controller: класс для обработки запросов на эндпоинты.
      Важный момент! Вся бизнес-логика должна находиться в service. Тут только работа с API;
  11. Части сущностей в controllers именуются аналогично частям в entities. Смотри пункт 6;
  12. Код из controllers никуда не импортируется. Он собирается роуты и сваггер
    при помощи yarn run build:routes.

База_данных

  1. yarn run db:create: создание базы данных
  2. yarn run db:drop: отчистка базы данных от данных
  3. yarn run db:fresh: пересоздание базы данных
  4. yarn run seed:run: заполнение базы данных сгенерированными данными
  5. 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

About

Шаблон backend приложения на TS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published