Префикс /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), мигрирует его один раз на сессию и усекает таблицы после каждого теста.
26 lines
467 B
Python
26 lines
467 B
Python
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
|