Konektory do Postgresu, pristupove udaje sifrovane
Pristupove udaje konektoru se ukladaji do databaze a prezijou restart. Popis v documentation/14-databaze.md. Databaze je volitelna a rezimy jsou oddelene: - postgres kdyz je DATABASE_URL i SECRETS_KEY - memory jinak, tedy pri nasazenem mockupu a lokalnim vyvoji bez DB Rozhodnuti je jen na jednom miste (src/data/connectorStore.ts). Nikde jinde se nezjistuje, jestli databaze je - kdyby se to rozlezlo po kodu, jedno misto by se zapomnelo a chovalo by se pak jinak nez zbytek. Chybejici databaze nesmi shodit start: container, ktery nenastartuje, je pro AppFactory nefunkcni sluzba. Misto toho se do logu napise proc a portal to ukaze na strance Konektory. Stejne tak kdyz migrace selzou - psat do rozbiteho schematu je horsi nez neukladat. Databaze potrebuje oboji. Bez SECRETS_KEY by se udaje ukladaly v plaintextu a to je horsi nez ztratit je pri restartu: tabulku vidi kazda zaloha a kazdy dump pri ladeni. Pridano: - pool v src/db/pool.ts vcetne transakci a dbFor(tenantId) jako sev pro budouci oddelenou databazi jednoho klienta - migrace ze src/db/migrations/*.sql pod pg_advisory_lock, jinak je pri rolling deployi pusti vsechny instance naraz. Jeden soubor je jedna transakce - sifrovani AES-256-GCM s nahodnym IV a verzi klice. Nerozsifrovatelna hodnota nepada, chova se jako nevyplnena a zaloguje se - jeden rozbity konektor nesmi shodit seznam ostatnich - /health/ready s pingem do DB. /health na databazi zamerne nezavisi, kratky vypadek by jinak vedl k restartovani containeru - GET /api/dashboard/storage a hlaska v portalu o tom, ze data jsou jen v pameti - jediny vychozi konektor na firmu a sluzbu hlida castecny unikatni index, ne jen kod. Dva soubezne zapisy by jinak udelaly dva vychozi Zmeneno: cteni i zapis konektoru je asynchronni, vcetne validace stromu. Overeno proti Postgresu 16 v kontejneru: migrace, sifrovani v tabulce, preziti restartu, rozsifrovani spravnym klicem, degradace pri spatnem klici, PATCH bez tajneho pole, prepnuti a smazani vychoziho konektoru, pametovy rezim bez DATABASE_URL. Kontejner po overeni smazan. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3279dd7dac
commit
78e7f99d60
@@ -2,6 +2,45 @@
|
||||
|
||||
Nejnovejsi nahore.
|
||||
|
||||
## 2026-08-12 - databaze pro konektory
|
||||
|
||||
Konektory se ukladaji do Postgresu, pristupove udaje sifrovane.
|
||||
Popis v [14-databaze.md](14-databaze.md).
|
||||
|
||||
### Pridano
|
||||
|
||||
- `pg` jako zavislost, pool v `src/db/pool.ts` vcetne transakci a `dbFor(tenantId)`
|
||||
jako sev pro budouci oddelenou databazi jednoho klienta.
|
||||
- Migrace ze souboru `src/db/migrations/*.sql`, pousti se pri startu pod
|
||||
`pg_advisory_lock` - pri rolling deployi je jinak pusti vsechny instance naraz.
|
||||
Jeden soubor je jedna transakce, takze pri chybe nevznikne rozdelane schema.
|
||||
- Sifrovani pristupovych udaju (`src/db/secretBox.ts`), AES-256-GCM s nahodnym
|
||||
IV a verzi klice. Nerozsifrovatelna hodnota nepada, chova se jako nevyplnena
|
||||
a zaloguje se - jeden rozbity konektor nesmi shodit seznam ostatnich.
|
||||
- Dve implementace uloziste konektoru za jednim rozhranim (`memory`, `postgres`).
|
||||
Rozhodnuti je jen na jednom miste, v `src/data/connectorStore.ts`.
|
||||
- `/health/ready` s pingem do databaze. `/health` na databazi zamerne nezavisi:
|
||||
kratky vypadek DB by jinak vedl k restartovani containeru.
|
||||
- `GET /api/dashboard/storage` a hlaska na strance Konektory o tom, ze data jsou
|
||||
jen v pameti. Bez toho se clovek divi, kam se podely jeho konektory.
|
||||
- Jediny vychozi konektor na firmu a sluzbu hlida castecny unikatni index,
|
||||
ne jen kod. Dva soubezne zapisy by jinak udelaly dva vychozi.
|
||||
|
||||
### Zmeneno
|
||||
|
||||
- Cteni i zapis konektoru je asynchronni, vcetne validace stromu.
|
||||
- Databaze je volitelna. Bez `DATABASE_URL` nebo `SECRETS_KEY` se jede v pameti
|
||||
a rekne se to v logu i v portalu. Container, ktery nenastartuje, je pro
|
||||
AppFactory nefunkcni sluzba.
|
||||
- Kdyz jsou migrace nastavene a selzou, jede se dal v pameti. Psat do rozbiteho
|
||||
schematu je horsi nez neukladat.
|
||||
|
||||
### Overeno
|
||||
|
||||
Proti Postgresu 16 v kontejneru: migrace, sifrovani v tabulce, preziti restartu,
|
||||
rozsifrovani spravnym klicem, degradace pri spatnem klici, `PATCH` bez tajneho
|
||||
pole, prepnuti a smazani vychoziho konektoru, a pametovy rezim bez `DATABASE_URL`.
|
||||
|
||||
## 2026-08-12 - transformace dat a oprava konektoru
|
||||
|
||||
Transformace dat popsana v [13-transformace-dat.md](13-transformace-dat.md).
|
||||
|
||||
Reference in New Issue
Block a user