Poptavka z webu je ticket, prilohy, udaje provozovatele, kolacovy graf

Provozovatel portalu: firma s priznakem portalOperator (jen jedna, zapnuti
odebere ostatnim) a novymi poli contactEmail, contactPhone, website vedle
ico, dic, adresy a pravni formy. Verejny GET /api/public/brand vraci jeji
udaje a web je bere pres useBrand() na kontaktu, v paticce, O nas,
prihlaseni i v titulku; brand.ts je jen zaloha.

Poptavka z webu zaklada u provozovatele ticket kanalu form: predmet
"Poptavka: tema", telo JSON s poli formulare, tag Poptavka plus tema,
zakaznik z formulare, poznamka v logu. Bez provozovatele se jen zaloguje.

Prilohy ticketu: formular az 3 soubory po 5 MB, ticket az 10; nahrani,
seznam, stazeni a smazani (pravo ticket.comment, strop viditelnosti,
poznamky v logu, audit). Soubor jde v JSON jako Base64 a lezi v beznem
ulozisti, bez nove zavislosti; strop tela jen na techto cestach.

Vlastni widget s kreslenim Graf umi i pocet ticketu se seskupenim jako
kolac (PieChart.tsx, ciste SVG, osm barev z tokenu, zbytek jako ostatni).

OpenAPI rozdelene na mensi soubory (102 cest, 28 schemat overeno shodnych),
28 novych testu (135 celkem), dokumentace aktualizovana.
This commit is contained in:
JiriUhlir
2026-09-09 19:35:00 +02:00
parent 22dda2d139
commit c25e826766
72 changed files with 3978 additions and 1118 deletions
+18
View File
@@ -126,6 +126,23 @@ Tickety navic slucuji vic zmen v jednom tiku do jednoho zapisu
nebo nejvys jednou za minutu. Prvni verze mazala jen radky platformy
(`tenantId: null`) a audit firem rostl donekonecna.
**Prilohy ticketu** (`kind: 'attachment'`, `src/data/attachments.ts`) jdou
primo pres `defineStore` bez obalky: nectou se pri kazdem requestu a nemeni
se v pameti, kazde volani jde do uloziste. Zaznam nese vedle metadat
(`ticketId`, `name`, `mime`, `size`, `uploadedBy`) i **obsah souboru
v base64**. V Postgresu je to radek v `records` jako u kazde jine entity,
v rezimu `file` soubor `DATA_DIR/attachment.json`.
Velikost je tu jina nez u ostatnich kolekci: jeden zaznam ma az 5 MB
(po base64 skoro 7), ticket jich muze mit deset. V rezimu `file` kazda
zmena prepise **cely** `attachment.json`, takze s kazdou prilohou roste
cena zapisu vsech ostatnich. Pro jednotky MB v prototypu to staci a zadna
nova zavislost nebyla potreba. Dalsi krok je presun obsahu do blob uloziste
(S3, nebo tabulka s `bytea`), az to zacne byt znat; rozhrani modulu
zustane, zmeni se jen odkud `getAttachment` cte `content`. Seznam priloh
obsah nikdy nevraci (`toPublic`), aby se megabajty netahaly pri kazdem
otevreni detailu.
### Klic mimo databazi
Bez `SECRETS_KEY` si aplikace v rezimu `file` vygeneruje klic do
@@ -282,3 +299,4 @@ Proti Postgresu 16 v kontejneru:
| Sbernice udalosti pres LISTEN/NOTIFY | dnes `EventEmitter` v pameti jedne instance |
| Vymena klice (rotace) | `v` je pripravene, prevod dat napsany neni |
| Retence a partitionovani | az u tabulek behu, viz dokument 10 |
| Blob uloziste pro prilohy | obsah je base64 v zaznamu, v rezimu `file` se prepisuje cely `attachment.json` |