Skip to content

0ldCold/ts_backend_template

Repository files navigation

BackEnd


Содержание

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

Стек


Запуск

Подготовка

  1. copy .env.example .env
  2. Отредактировать файл .env при необходимости
  3. yarn install
  4. docker-compose up -d
  5. yarn run build:full
  6. yarn run db:create
  7. yarn run migration:run

В dev-mode

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

В prod-mode

  1. 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
  6. yarn run build:app

CI/CD деплой

  1. yarn install --immutable
  2. yarn run build:full
  3. yarn run migration:run
  4. yarn run build:run

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

  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

 
 
 

Contributors