feat(api): FastAPI — auth, RFC 7807 и роуты фазы 1

Префикс /api/v1, operationId = "<tag>_<name>", чтобы Dart-клиент получил методы
вроде accountsList, а не list_accounts_api_v1_accounts_get. Ошибки —
application/problem+json. Auth: access-JWT на час + refresh на 30 дней, который
хранится хэшем и ротируется, логин ограничен по частоте в памяти.

Деньги в JSON — всегда позиционные строки (api/schemas/common.py): float в
проводе потерял бы копейки, которые NUMERIC(24,10) бережёт.

Тестовый harness поднимает свой Postgres через pg_ctl (pytest-postgresql),
мигрирует его один раз на сессию и усекает таблицы после каждого теста.
This commit is contained in:
Dmitry
2026-09-18 13:43:49 +03:00
parent 295438914d
commit 3fc7a954b9
40 changed files with 5261 additions and 0 deletions
@@ -0,0 +1,25 @@
from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import BaseModel
class DataQualityRow(BaseModel):
id: int
check_name: str
severity: str
"""info | warn | error"""
detail: str
count: int
ref: dict[str, Any] | None
computed_at: datetime
class RefreshLogOut(BaseModel):
id: int
started_at: datetime
finished_at: datetime | None
trigger: str
error: str | None