server.js technikai dokumentáció és backend rendszerleírás

202603013 – v1 backend dokumentáció

Részletes fejlesztői leírás a planner, quote, dashboard, calendar és segédvégpontok működéséről

Storage logika, request / response minták, PDF / ICS generálás, indexelés és refaktor előkészítés

A lenyíló lista segítségével elkülöníthető az eredeti egyfájlos backend dokumentáció (v1) és a későbbi refaktorált backend szerkezetet bemutató dokumentáció (v2).
v1 dokumentáció

Dokumentáció célja

Ez az oldal a rendszer backend központját jelentő server.js működését írja le üzleti, technikai és karbantartási nézőpontból. A cél, hogy egyértelműen látszódjon: melyik route mire szolgál, milyen helper-ek támogatják, milyen fájlokat hoz létre, hogyan épül fel a planner és a quote workflow, valamint milyen pontokon érdemes később refaktorálni.

Planner session mentés
Quote / CRM generálás
Dashboard summary
Calendar API
Upload / config route-ok
PDF / ICS generálás
Index rebuild

1. Rendszeráttekintés

A server.js egy monolitikus Express backend, amely a teljes planner ökoszisztéma szerveroldali központja. Ez a fájl egyszerre kezeli a route-okat, a fájlalapú persistence-et, a template bootstrapet, a PDF generálást, az ICS exportot, az indexelést, a dashboard aggregációt és a statisztikai összesítéseket.

Fő üzleti entitások

A rendszer két fő entitás köré épül: a planner session és a quote. A planner session teljes rendezvényadatlapot jelent, a quote pedig külön életciklusú ajánlati dokumentum.

Technikai karakter

A rendszer adatbázis helyett fájlrendszerre épül. JSON rekordok, PDF dokumentumok, ICS állományok és indexfájlok alkotják a teljes storage réteget.

A jelenlegi v1 backend gyorsan fejleszthető és egyszerűen telepíthető, de hosszabb távon indokolt a route, service, storage és PDF logika külön modulokra bontása.

2. Rendszertérkép

Ez a blokk magas szinten mutatja meg, milyen bemeneti felületek, milyen backend logikai egységek és milyen tárolási pontok kapcsolódnak egymáshoz.

Frontend belépési pontok

  • index.html – planner wizard
  • crm.html – quote és follow-up
  • dashboard.html – admin dashboard
  • calendar.html – havi eseménynaptár
  • dj-view.html – preview nézet

Backend logikai zónák

  • planner mentés és visszatöltés
  • quote generálás és follow-up
  • helyszín- és template-kezelés
  • dashboard aggregáció
  • calendar aggregáció
  • statisztikai gyűjtés

Tárolási pontok

  • /data – planner JSON / PDF / ICS
  • /data/_index.json – planner index
  • /data/quotes – quote JSON / PDF
  • /data/quotes/_quotes_index.json – quote index
  • /uploads – képek, aláírások, jegyzetek

Konfigurációs pontok

  • /public/venues.json
  • /public/templates/index.json
  • /public/templates/*.json
  • payment-transfer.json
  • DASHBOARD_MASTER_PASSWORD

3. Fájlszerkezet

ROOT/
├─ public/
│  ├─ main.html
│  ├─ venues.json
│  ├─ templates/
│  │  ├─ index.json
│  │  ├─ wedding_classic.json
│  │  ├─ wedding_premium_show.json
│  │  ├─ corporate_gala.json
│  │  ├─ prom_standard.json
│  │  ├─ ball_classic.json
│  │  └─ payment-transfer.json
│  └─ fonts/
├─ data/
│  ├─ _index.json
│  ├─ _counters.json
│  ├─ <stamp>.json
│  ├─ <stamp>.pdf
│  ├─ <stamp>.ics
│  └─ quotes/
│     ├─ _quotes_index.json
│     ├─ <quote-stamp>.json
│     └─ <quote-stamp>.pdf
└─ uploads/
   └─ feltöltött képek

Planner storage

Egy planner sessionhez tipikusan három fájl jön létre: JSON, PDF, ICS.

Quote storage

Egy quote rekordhoz jellemzően két fájl tartozik: JSON és PDF.

4. Indítás és inicializálás

A backend induláskor több bootstrap lépést hajt végre, hogy a szükséges fájlszerkezetek és alapkonfigurációk rendelkezésre álljanak.

1. Könyvtárak létrehozása DATA_DIR, UPLOADS_DIR, TEMPLATES_DIR, QUOTES_DIR
2. Venue file ellenőrzése Ha hiányzik, létrejön a default helyszínlista.
3. Template file-ok ellenőrzése Ha hiányzik a template index, bootstrapelődik az egész template készlet.
4. Payment transfer config ellenőrzése Ha hiányzik, létrejön az alap bankszámla konfiguráció.
5. Planner index ellenőrzése Ha üres, a backend újraépíti a fájlrendszerből.

5. Middleware és app setup

Middleware-ek

  • express.json({ limit: "12mb" })
  • express.urlencoded({ extended: true })
  • express.static(PUBLIC_DIR, { index:false })
  • app.use("/data", express.static(DATA_DIR))
  • app.use("/uploads", express.static(UPLOADS_DIR))

Megjegyzés

A /data és /uploads közvetlen publikálása egyszerű frontend működést ad, de biztonsági szempontból érzékeny pont.

6. Helper függvények

A server.js nagyszámú helper függvényt tartalmaz, amelyek a logika gerincét adják.

Normalizáló és parse helper-ek

  • safeSlug()
  • normalizeDate()
  • normalizeText()
  • normalizeArray()
  • toIntOrNull()
  • toFloatOrZero()
  • toBool()
  • formatMoney()

Fájl és storage helper-ek

  • fileStamp()
  • writeJsonAtomic()
  • readJson()
  • replaceFileAtomic()
  • safeUnlink()
  • loadIndex()
  • saveIndexAtomic()

Quote helper-ek

  • loadCounters()
  • saveCounters()
  • nextQuoteNumber()
  • normalizeQuotePayload()
  • makeQuoteStamp()
  • loadQuoteIndex()
  • saveQuoteIndex()

PDF / timeline helper-ek

  • buildAutoTimeline()
  • generateICS()
  • drawHeader()
  • drawTable()
  • kvInline()
  • eventTypeLabelHu()
  • paymentStatusLabelHu()

7. Venue kezelés

A venue rendszer a public/venues.json fájlra épül.

Kapcsolódó függvények

  • ensureVenuesFile()
  • loadVenuesFile()
  • saveVenuesFile()
  • addVenueToFile()

Működés

Az új helyszín mentése duplikációellenőrzéssel történik, majd a lista magyar rendezés szerint visszaírásra kerül.

8. Template bootstrap

A template rendszer első induláskor automatikusan létrehozza az alap eseménysablonokat.

wedding_classic
wedding_premium_show
corporate_gala
prom_standard
ball_classic
A sablonok nem végleges rekordok, hanem előtöltési konfigurációk: időpontok, technikai szintek, effect kapcsolók és fizetési módok alapállapotát adják.

9. Payment transfer konfiguráció

Az átutalási adatok külön fájlban élnek, és több frontend / PDF folyamat támaszkodik rájuk.

{
  "bankAccount": "11712345-12345678-12345678",
  "accountOwner": "Tarján Attila",
  "bankName": "CIB Bank Zrt"
}

10. Timeline és ICS logika

A backend képes automatikus menetrendet generálni, illetve importálható naptárfájlt készíteni.

Wedding logika ceremonyStart vagy guestArrivalTime alapján számol vacsora, torta, éjféli keringő, menyasszonytánc időket
Generic event logika evGuestArrivalTime alapján számol opening, dinner, award, presentation, networking, afterparty időket
ICS export VEVENT alapú állományt ír ki, a zárás automatikusan másnapra eshet

11. Planner index rendszer

A planner index célja a gyors listázás, keresés és dashboard / calendar aggregáció támogatása.

Fő függvények

  • makeIndexEntryFromRecord()
  • rebuildIndexFromFiles()
  • upsertIndexEntry()
  • filterIndexItems()
  • findConflictsByDate()

Megjegyzés

A rendszer nem részleges index update-re, hanem rebuild + write mintára épül.

12. Quote index rendszer

A quote index a quote lista, accepted quote import és dashboard quote blokk alapja.

Fő függvények

  • makeQuoteIndexEntry()
  • rebuildQuoteIndexFromFiles()
  • upsertQuoteIndexEntry()

Quote számláló

A quote sorszámozás a _counters.json fájlban tárolt éves számlálóra épül.

13. PDF generálási rendszer

A backend két nagy PDF generálási útvonallal rendelkezik: planner PDF és quote PDF.

Planner PDF

  • alapadatok
  • kapcsolattartás
  • zenei igények
  • esemény-specifikus menetrend
  • pénzügyek
  • technika
  • jóváhagyás
  • jegyzet képek

Quote PDF

  • ajánlati metaadatok
  • megrendelő / esemény adatok
  • szolgáltatási időintervallum
  • ajánlati tartalom
  • pénzügyi összesítés
  • follow-up esetén számla és utókövetés

14. Planner API

POST /api/sessions
Planner mentés, PDF és ICS generálás

A planner fő mentési route-ja. Validál, JSON-t ír, PDF-et és ICS-t generál, majd indexet frissít és konfliktusellenőrzést futtat.

GET /api/sessions
Planner lista és szűrés

Query paraméterek alapján planner indexet szűr, és gyors listaadatokat ad vissza.

GET /api/session/:stamp
Egy planner rekord teljes betöltése
DELETE /api/session/:stamp
Planner rekord törlése

15. Quote / CRM API

POST /api/quotes/generate
Ajánlat létrehozása és PDF generálás
GET /api/quotes
Quote lista lekérése
GET /api/quote/:stamp
Egy quote rekord lekérése
DELETE /api/quote/:stamp
Quote törlése
GET /api/planner-accepted-quotes
Accepted quote lista plannerhez
GET /api/planner-accepted-quote/:stamp
Accepted quote részletes betöltése

16. Segédvégpontok

GET/api/venues
Venue lista lekérése
POST/api/venues
Új venue mentése
POST/api/upload
Képfeltöltés
GET/api/conflicts
Dátumütközés keresés
POST/api/autotimeline
Automatikus timeline számítás
GET/api/payment-transfer-config
Átutalási konfiguráció lekérése

17. Dashboard és calendar

GET/api/dashboard-summary
Dashboard aggregált összesítés
GET/api/calendar
Havi naptáradatok
POST/api/auth/dashboard
Dashboard auth
POST/api/auth/price-view
DJ price-view auth

18. Statisztikai logika

A /api/stats route a planner indexből és rekordokból gyakorisági toplistákat készít.

Gyűjtött mutatók

  • top genres
  • top do not play tokenek
  • dinner frequency
  • cake frequency
  • venue frequency

További bontások

  • status frequency
  • paid frequency
  • dj tech frequency
  • totalSessions

19. Fájl-létrejövési mátrix

Route Művelet Érintett fájlok
POST /api/sessions create/update /data/<stamp>.json, .pdf, .ics, _index.json
DELETE /api/session/:stamp delete /data/<stamp>.json, .pdf, .ics, _index.json
POST /api/quotes/generate create/update /data/quotes/<stamp>.json, .pdf, _quotes_index.json, _counters.json
DELETE /api/quote/:stamp delete /data/quotes/<stamp>.json, .pdf, _quotes_index.json
POST /api/upload create /uploads/<generated_file>

20. Hibakezelési stratégia

Tipikus státuszkódok

  • 200 – sikeres válasz
  • 400 – hibás bemenet / validáció
  • 403 – üzleti tiltás
  • 404 – nem található rekord
  • 500 – belső szerverhiba

Jellemző hibatípusok

  • hiányzó kötelező mező
  • PDF generálási hiba
  • sérült JSON fájl
  • fájlrendszer jogosultsági probléma
  • nem accepted quote betöltés

21. Fő működési folyamatok

Planner mentés frontend payload → /api/sessions → JSON → PDF → ICS → index update
Quote generálás CRM payload → /api/quotes/generate → quote JSON → quote PDF → quote index
Dashboard betöltés auth → /api/dashboard-summary → aggregáció → dashboard render
Calendar betöltés /api/calendar?month=... → havi rács + napi eseménylista

22. Ismert korlátok

Jelenlegi korlátok

  • monolitikus backend fájl
  • nincs adatbázis
  • nincs role-based auth
  • index rebuild költséges lehet nagy állománynál
  • publikus file storage útvonalak

Karbantarthatósági pontok

  • PDF logika túl nagy
  • route és service logika keveredik
  • storage logika nincs külön rétegben
  • validáció nincs központi sémaalapra húzva

23. Refaktor megjegyzések

A backend refaktor ideális sorrendje:

1. Storage réteg kiválasztása JSON / PDF / ICS fájlműveletek külön modulba
2. Route réteg bontása planner, quotes, dashboard, calendar, support route külön fájlokba
3. PDF builder szétválasztása planner PDF és quote PDF külön service-be
4. Sémaalapú validáció Zod / Joi vagy egyedi validator réteg
A frontend már modulárisabb irányba indult, ezért a backend refaktor következő logikus lépés.