Web a portal Automia v jednom containeru. Express obsluhuje API i zbuildovanou React aplikaci z dist/public. Obsah: - verejny web: homepage, sluzby, o nas, kontakt, 404 - prihlaseni pres JWT, demo ucty - portal: prehled s grafem, tickety, incidenty, automatizace, konektory - builder automatizaci: strom akci, vetveni podminkou - katalog 25 konektoru v 8 kategoriich - webhook s registrovanou adresou, token generuje server - zivy dashboard pres SSE vcetne simulace provozu - Swagger UI na /docs a OpenAPI na /openapi.json Soulad s AGENTS.md: - ROOT_PATH z prostredi, prefix proxy nikde nehardcodovan - mount na koren i na prefix, funguje s handle_path i bez nej - base tag a window.__BASE_PATH__ vkladane do index.html za behu - OpenAPI servers obsahuje prefix, Try it out vola spravnou adresu - povinne /health a /docs, port 3000, naslouchani na 0.0.0.0 - secrets jen z environment variables, nikdy v logu Dokumentace ve slozce documentation/.
4.9 KiB
03 - Architektura a mapa kodu
Technologie
| Vrstva | Technologie |
|---|---|
| Server | Node.js 20, Express 4, TypeScript, ESM |
| Web | React 18, Vite 6, TypeScript, Tailwind 4, React Router 6 |
| Auth | JWT (jsonwebtoken), hesla bcrypt |
| Validace | zod |
| Docs | swagger-ui-express nad rucne psanou OpenAPI definici |
Jeden package.json. Runtime zavislosti jsou v dependencies, nastroje pro build
webu v devDependencies - runtime image je pak instaluje pres --omit=dev.
Build
tsc src/**.ts -> dist/*.js
vite web/ -> dist/public/
Server obsluhuje dist/public jako statiku. Dockerfile kopiruje do vysledneho
image jen dist, takze staci jedna slozka.
Mapa kodu - server
| Cesta | K cemu je |
|---|---|
src/index.ts |
vstupni bod: middleware, mount routeru, statika, SPA, Swagger |
src/config.ts |
cteni environment variables, normalizace ROOT_PATH |
src/openapi.ts |
OpenAPI definice vcetne servers s prefixem proxy |
src/types.ts |
typy uzivatele a JWT payloadu |
src/middleware/auth.ts |
requireAuth, requireRole |
src/events/bus.ts |
sbernice udalosti, ze ktere cerpa SSE stream |
src/routes/auth.ts |
prihlaseni, odhlaseni, kdo jsem |
src/routes/dashboard.ts |
data portalu, katalog konektoru, CRUD automatizaci |
src/routes/stream.ts |
SSE stream zmen |
src/routes/simulate.ts |
vyvolani provoznich udalosti |
src/routes/webhook.ts |
verejny prijem dat do automatizace |
src/routes/contact.ts |
poptavkovy formular z webu |
src/data/ticketStore.ts |
tickety vcetne zmen a udalosti |
src/data/incidentStore.ts |
incidenty vcetne zmen a udalosti |
src/data/automationStore.ts |
automatizace, strom akci, tokeny webhooku |
src/data/connectors.ts |
katalog konektoru, jejich spousteču a akci |
src/data/conditions.ts |
typy parametru a operatory podminek |
src/data/users.ts |
demo uzivatele |
src/data/mock.ts |
souhrn pro prehled a casova rada grafu |
Mapa kodu - web
| Cesta | K cemu je |
|---|---|
web/src/main.tsx |
vstupni bod, basename routeru podle prefixu proxy |
web/src/App.tsx |
routovani, portal se nacita lazy |
web/src/index.css |
design tokeny a vlastni utility Tailwindu |
web/src/config/brand.ts |
vsechny firemni udaje na jednom miste |
web/src/lib/api.ts |
fetch wrapper, sprava tokenu, skladani adres |
web/src/lib/eventStream.ts |
cteni SSE streamu pres fetch |
web/src/lib/useApiQuery.ts |
nacitani dat vcetne obnoveni pri udalosti |
web/src/lib/flow.ts |
ciste funkce nad stromem automatizace |
web/src/components/dashboard/ |
shell portalu, dlazdice, graf, stream, simulace |
web/src/components/dashboard/flow/ |
strom akci a vyber kroku |
web/src/components/home/ |
sekce homepage |
web/src/pages/ |
jedna stranka je jeden soubor |
Klicova rozhodnuti
Jeden container misto dvou. AppFactory nasazuje jednu aplikaci, proto Express obsluhuje i statiku. Odpada CORS i druha deploy jednotka.
SSE misto WebSocketu. Tok dat je jednosmerny, server ke klientovi. Klient posila zmeny beznym REST volanim. SSE prochazi reverse proxy bez zvlastni konfigurace.
Stream pres fetch, ne pres EventSource. EventSource neumi poslat hlavicku
Authorization a token by musel byt v adrese, odkud se dostane do access logu.
Cenou je rucni parsovani a rucni znovupripojeni v web/src/lib/eventStream.ts.
Ceske cesty v URL. /sluzby, /o-nas, /prihlaseni, /dashboard/tickety.
Kod zustava anglicky.
Data v pameti. Vedome zjednoduseni prototypu. Uloziste jsou oddelena od rout,
takze napojeni na databazi znamena prepsat soubory v src/data/, ne endpointy.
Zadna ticha selhani. Kazdy catch loguje a uzivatel se o chybe dozvi.