Enable strict TypeScript and reject non-null and definite-assignment assertions. Declare externally populated DTO fields, preserve runtime validation, and narrow values at their owners. Verified: backend verify (257 tests), unchanged OpenAPI, and 21 SQLite/HTTP tests on retry. The initial SQLite run had two timeouts; baseline HEAD passed 21 tests as well.
71 lines
3.7 KiB
Markdown
71 lines
3.7 KiB
Markdown
# WealthLedger backend
|
||
|
||
NestJS API WealthLedger. Backend владеет auth, SQLite-данными и server-side
|
||
интеграцией T-Bank; frontend не обращается к T-Bank напрямую.
|
||
|
||
## Быстрый старт
|
||
|
||
Требуется Node 22 (`.nvmrc`). Создайте `.env` из примера, замените placeholder
|
||
секреты и установите зависимости строго из lockfile:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nvm use --silent
|
||
npm ci
|
||
npm run start:dev
|
||
```
|
||
|
||
`JWT_SECRET` должен быть секретом не короче 32 символов, а
|
||
`TOKEN_ENCRYPTION_KEY` — base64-кодированным 32-байтным ключом. Не добавляйте
|
||
T-Bank token в `.env`: он вводится пользователем и хранится в зашифрованном
|
||
виде.
|
||
|
||
## Проверка
|
||
|
||
Единый completion gate не изменяет versioned-файлы:
|
||
|
||
```bash
|
||
npm run verify
|
||
```
|
||
|
||
Он запускает zero-warning lint,
|
||
application/test typechecks, Jest и build. `npm run lint:fix` — отдельная
|
||
записывающая команда, `npm run test:cov` — диагностика без общего числового
|
||
threshold. `npm run test:e2e` пока не является passing gate: Prisma schema
|
||
engine останавливает migration до запуска Jest. Точный статус и trigger
|
||
пересмотра находятся в [remediation registry](../docs/development/audit-remediation.md).
|
||
|
||
Общий `tsconfig.json` включает `strict: true` и `noFallthroughCasesInSwitch`
|
||
для приложения, тестов и сборок. ESLint запрещает non-null assertions
|
||
(`value!`) и definite-assignment assertions (`field!: Type`).
|
||
Поля DTO, заполняемые вне конструктора, описываются через `declare`:
|
||
входные значения заполняет и проверяет Nest, ответные DTO описывают форму
|
||
возвращаемых объектов. `declare` не создаёт значение и не заменяет
|
||
runtime-валидацию. В обычном коде нужны инициализация или сужение типа
|
||
после проверки значения.
|
||
|
||
## Документация
|
||
|
||
- [Router conventions](.ai/CONVENTIONS.md) и [источники](.ai/SOURCES.md)
|
||
- [Backend architecture](.ai/conventions/backend-architecture.md)
|
||
- [HTTP API](.ai/conventions/backend-http-api.md), [data](.ai/conventions/backend-data.md) и [testing](.ai/conventions/backend-testing.md)
|
||
- [Security/auth](.ai/conventions/security-auth.md) и [integrations](.ai/conventions/backend-integrations.md)
|
||
|
||
- [Границы проверки API и данных](../docs/development/verification.md#api-и-хранение-данных)
|
||
- [Engineering governance и risk-based testing](../docs/development/engineering-governance.md)
|
||
- [Карта проектных фактов](../docs/README.md)
|
||
- [API contract и runtime OpenAPI](../docs/development/runtime-openapi-verification.md)
|
||
- [Обзор поставленной системы](../docs/overview.md)
|
||
- [Архитектурные решения](../docs/adr/README.md)
|
||
- [Remediation registry](../docs/development/audit-remediation.md)
|
||
|
||
Из backend runtime OpenAPI можно read-only сверить с frontend snapshot:
|
||
|
||
```bash
|
||
npm run test:openapi-contract
|
||
```
|
||
|
||
Разработка идёт напрямую по задаче пользователя. Каждый affected repo проходит
|
||
свой verify; при изменении wire contract дополнительно выполняется contract check.
|
||
Обязательного OpenSpec/SDD lifecycle нет.
|