aafdd46a4b
Server-rendered admin console in the backend at /_gm (internal/adminconsole), fronted on the gateway's public listener by Basic-Auth + a verbatim reverse proxy (mounted on the edge mux below the h2c wrap). A same-origin check guards its POSTs; no operator identity is tracked. This supersedes the Stage 6 gateway-fronts- /api/v1/admin model: GATEWAY_ADMIN_ADDR and the backend /api/v1/admin ping are dropped and gateway/internal/admin is repurposed to the verbatim proxy. - Complaints: migration 00008 (+ jetgen) adds disposition/resolution_note/ resolved_at/applied_in_version + the deferred status CHECK; resolution feeds a query-derived pending dictionary-change pipeline (marked applied after a reload). - Dictionary hot-reload: per-version subdir BACKEND_DICT_DIR/<version>/ via the new Registry.LoadAvailable; engine.OpenWithVersions restores resident versions on restart. Partially addresses TODO-2. - Broadcasts: a backend Telegram-connector client (internal/connector, BACKEND_CONNECTOR_ADDR) for SendToUser / SendToGameChannel (discharges the Stage 9 forward-note). - Admin reads: account.ListAccounts/CountAccounts/Identities and game.ListGames/CountGames/GameByID/ListComplaints/GetComplaint/CountComplaints/ ResolveComplaint/DictionaryChanges/MarkChangesApplied. - Tests: adminconsole render, engine reload, same-origin guard, gateway verbatim proxy + h2c console mount, inttest complaint pipeline + list/count + /_gm console. - Docs: PLAN (Stage 10 done + refinements + TODO-2), ARCHITECTURE §1/§5/§6/§12/§13, FUNCTIONAL (+_ru), TESTING, backend/gateway READMEs.
31 lines
1.4 KiB
SQL
31 lines
1.4 KiB
SQL
-- +goose Up
|
|
-- Stage 10 admin & dictionary ops: the word-check complaint resolution lifecycle.
|
|
-- Stage 3 created complaints with a free-form status (only ever 'open'); the admin
|
|
-- review queue (this stage) resolves them with a disposition that also feeds the
|
|
-- offline dictionary-rebuild pipeline: an accepted complaint records whether the
|
|
-- word should be added or removed, and is marked applied once a rebuilt dictionary
|
|
-- version is hot-reloaded. No operator identity is recorded (the gateway gates the
|
|
-- console behind Basic-Auth; the backend keeps no admin principal). Adds columns, so
|
|
-- the generated jet code is regenerated (cmd/jetgen).
|
|
SET search_path = backend, pg_catalog;
|
|
|
|
ALTER TABLE complaints
|
|
ADD COLUMN disposition text NOT NULL DEFAULT '',
|
|
ADD COLUMN resolution_note text NOT NULL DEFAULT '',
|
|
ADD COLUMN resolved_at timestamptz,
|
|
ADD COLUMN applied_in_version text NOT NULL DEFAULT '',
|
|
ADD CONSTRAINT complaints_status_chk CHECK (status IN ('open', 'resolved')),
|
|
ADD CONSTRAINT complaints_disposition_chk
|
|
CHECK (disposition IN ('', 'reject', 'accept_add', 'accept_remove'));
|
|
|
|
-- +goose Down
|
|
SET search_path = backend, pg_catalog;
|
|
|
|
ALTER TABLE complaints
|
|
DROP CONSTRAINT complaints_disposition_chk,
|
|
DROP CONSTRAINT complaints_status_chk,
|
|
DROP COLUMN applied_in_version,
|
|
DROP COLUMN resolved_at,
|
|
DROP COLUMN resolution_note,
|
|
DROP COLUMN disposition;
|