Account quota (server-side, по X-Authenticated-User): - новая таблица account_estimate_usage (миграция 076, идемпотентная) - app/services/account_quota.py: 15 успешных оценок в календарный месяц на аккаунт - enforcement в POST /estimate (429 при исчерпании) + GET /quota - admin и kopylov — без лимита; нет заголовка (dev) → fail-open - frontend: useQuota hook, счётчик «осталось N из 15», блок формы + баннер «Свяжитесь с Артёмом Копыловым» при исчерпании Account praktika: - caddy/users.caddy.snippet + auth/roles.yaml (роль pilot) Брендинг PRINZIP убран только из UI (футер + css-коммент); таблица brands, PDF white-label и скрейпер Яндекса (реальный застройщик PRINZIP) не тронуты.
36 lines
1.7 KiB
PL/PgSQL
36 lines
1.7 KiB
PL/PgSQL
-- Migration 076: account_estimate_usage — квота оценок на аккаунт (#quota)
|
|
--
|
|
-- Хранит счётчик успешных оценок per (username, period_month).
|
|
-- period_month — строка 'YYYY-MM' (UTC). Лимит проверяется/инкрементится
|
|
-- в app.services.account_quota.
|
|
--
|
|
-- Idempotent: CREATE TABLE IF NOT EXISTS + существующие COMMENT переписываются
|
|
-- безопасно (COMMENT ON TABLE/COLUMN — DML, не DDL, не падает при повторе).
|
|
|
|
BEGIN;
|
|
|
|
CREATE TABLE IF NOT EXISTS account_estimate_usage (
|
|
username text NOT NULL,
|
|
period_month text NOT NULL, -- 'YYYY-MM' (UTC)
|
|
used integer NOT NULL DEFAULT 0,
|
|
updated_at timestamptz NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (username, period_month)
|
|
);
|
|
|
|
COMMENT ON TABLE account_estimate_usage IS
|
|
'Счётчик успешных оценок trade-in per (username, calendar month UTC). '
|
|
'Используется для применения лимита 15 оценок/месяц на pilot-аккаунтах.';
|
|
|
|
COMMENT ON COLUMN account_estimate_usage.username IS
|
|
'Имя пользователя из заголовка X-Authenticated-User (Caddy basic_auth).';
|
|
|
|
COMMENT ON COLUMN account_estimate_usage.period_month IS
|
|
'Календарный месяц UTC в формате YYYY-MM, напр. ''2026-05''.';
|
|
|
|
COMMENT ON COLUMN account_estimate_usage.used IS
|
|
'Количество успешных оценок в данном месяце.';
|
|
|
|
COMMENT ON COLUMN account_estimate_usage.updated_at IS
|
|
'Время последнего инкремента (UTC).';
|
|
|
|
COMMIT;
|