feat: чанкинг batch-create >100 задач + журнал ошибок API
B: BatchCreateDialog режет список на чанки ≤100 (лимит сервера), каждый чанк со своим idempotency-key (requestId-N) — повтор после ошибки не создаёт дублей; 10-минутный лок армируется только при полном успехе, а не до запроса (раньше блокировал даже после 400). D: таблица error_logs (миграция 0066), захват ответов >=400 в request middleware (без 401/health/events, дедуп 60с), admin API GET/DELETE /api/error-logs и вкладка «Журнал ошибок» в Настройках.
This commit is contained in:
16
migrations/0066_error_logs.sql
Normal file
16
migrations/0066_error_logs.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
-- Серверный журнал ошибок API (просмотр админом в Настройках)
|
||||
-- Без RLS: вставки выполняет только серверный middleware (best-effort, в т.ч. до/без auth),
|
||||
-- чтение — только через admin-роут с явным фильтром organization_id.
|
||||
CREATE TABLE IF NOT EXISTS error_logs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
organization_id INTEGER REFERENCES organizations(id) ON DELETE CASCADE,
|
||||
user_id INTEGER,
|
||||
method VARCHAR(10) NOT NULL,
|
||||
path TEXT NOT NULL,
|
||||
status_code INTEGER NOT NULL,
|
||||
message TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS error_logs_org_created_idx ON error_logs(organization_id, created_at);
|
||||
CREATE INDEX IF NOT EXISTS error_logs_status_idx ON error_logs(status_code);
|
||||
Reference in New Issue
Block a user