Files
csbot-prototype/documentation/01-prehled-a-stav.md
T
JiriUhlirandClaude Opus 5 78e7f99d60 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>
2026-08-12 15:08:25 +02:00

4.8 KiB

01 - Prehled a stav

Co aplikace je

Web a klientsky portal IT firmy. Verejna cast prodava sluzbu, cast za prihlasenim ukazuje klientovi stav jeho automatizaci, ticketu a incidentu.

Vse je jedna aplikace v jednom containeru. Express obsluhuje API i zbuildovanou React aplikaci ze slozky dist/public.

Stav

Oblast Stav Poznamka
Verejny web hotovo homepage, sluzby, o nas, kontakt, 404
Prihlaseni hotovo JWT, demo ucty
Dashboard hotovo prehled, tickety, incidenty, automatizace, nastaveni
Zivy dashboard pres SSE hotovo zmeny se projevi bez obnoveni stranky
Simulace provozu hotovo tlacitko v postrannim menu portalu
Katalog sluzeb hotovo 29 sluzeb, 7 kategorii vcetne Obecne
Builder automatizaci hotovo strom akci, vetveni podminkou
Webhook s registrovanou adresou hotovo token generuje server, verejny endpoint validuje data
Tickety na konkretni lidi hotovo resitel, filtr moje, prehled vytizeni tymu
Log ticketu ve strome hotovo vcetne toho, co ktera sluzba vratila
Kanaly do ticketu hotovo WhatsApp, e-mail, hlas a formular jako spoustece
Parametry od sluzby hotovo katalog je deklaruje, server je dosazuje pri ulozeni
Nastaveni poli akci castecne ticket, e-mail a WhatsApp ano, ostatni jen napoveda
Obsah ticketu a sablony hotovo {{parametr}} ze spoustece do poli akce
Vystupy kroku a predvalidace hotovo podminka se umi zeptat, co vratil predchozi krok
Kanaly WhatsApp, FB, Instagram hotovo vcetne vzorovych automatizaci na prijem
Firmy a prava hotovo tri pohledy, uzivatel muze byt ve vic firmach
Nastavitelny dashboard hotovo widgety, sirky a poradi, ulozene za uzivatele a firmu
Skripty konektoru hotovo manifest, kontrola parametru, hot reload, iDoklad
Konektory za firmu hotovo pristupove udaje v konektoru, overeni napojeni
Transformace dat hotovo pravidla i sablona JSON, kroky si predavaji struktury
Sprava clenstvi z portalu chybi memberships jdou zmenit jen v kodu
Bugs a wishes chybi vyvojarska agenda, samostatna evidence vedle ticketu
Beh automatizaci chybi ulozeny strom se nevykonava, neni runtime
Databaze pro konektory hotovo Postgres, udaje sifrovane. Bez DATABASE_URL jede pamet
Databaze pro zbytek chybi automatizace, rozlozeni a tickety jsou v pameti
Odesilani e-mailu z formulare chybi poptavka se zatim jen loguje

Znama omezeni

Data jsou v pameti procesu. Restart containeru vrati tickety, incidenty i automatizace do vychoziho stavu. Nove vytvorene zaznamy se ztrati.

Obsah verejneho webu je ukazkovy. Nazev firmy, reference, tym i cisla jsou vymyslene a pred ostrym pouzitim se musi nahradit. Firemni udaje jsou na jednom miste v web/src/config/brand.ts.

Zivy stream drzi seznam posluchacu v pameti jedne instance. Pri vice instancich by ho musel nahradit sdileny kanal, napriklad Redis pub/sub.

Log ticketu zatim plni simulace, ne skutecny beh. Zaznamy jsou realisticke, ale nevznikly vykonanim ulozeneho stromu - runtime neexistuje.

Dalsi krok

Nejuzitecnejsi pristavek je runtime. Strom uz nese vsechno potrebne: spoustec s parametry, podminky a u ticketu i kanalu nastavena pole se sablonami. Chybi jen to, co ho vykona. Do te doby je ulozena automatizace popis zameru, ne provoz.

Vedle toho zbyva prevest na inputs i ostatni konektory a doplnit odkazy na vystup predchoziho kroku, ne jen na spoustec. Podrobnosti v 05-dashboard-a-builder.md.

Za rozmysleni stoji evidence bugs a wishes. Zamerne to nejsou tickety, duvod je v 06-tickety.md.

Prvni cast navrhu uz je hotova: vykonna cast konektoru, tedy skripty s manifestem a kontrolou parametru, viz 11-skripty-konektoru.md. Runner je pripraveny, chybi nad nim fronta.

Zbytek navrhu je ve dvou souborech, oba jsou navrh k rozhodnuti, ne popis stavu: 09-navrh-rozsireni.md pro datove modely a prava, 10-runtime-a-kapacita.md pro frontu, beh kroku a rozpocet na 150 klientu.