Technikai API dokumentáció és rendszer felhasználói-kézikönyv

202603012 - Final Version

Részletes fejlesztői és felhasználói leírás a planner, CRM, dashboard és naptár végpontok működéséről

Request / response minták, frontend kapcsolódások, validációk és hibalehetőségek

A lenyíló lista segítségével választható az eredeti dokumentáció (v1) és a refaktorált frontend struktúrát bemutató dokumentáció (v2).
v1 dokumentáció

Dokumentáció célja

Ez az oldal a rendszer végpontjait nem csak felsorolja, hanem üzleti és technikai oldalról is elmagyarázza. A dokumentáció célja, hogy fejlesztés, karbantartás, átadás vagy bővítés közben egyértelműen látható legyen, melyik route mire szolgál, melyik frontend fájl használja, milyen adatokat vár, milyen választ ad vissza, és milyen hibákat vagy validációkat kell figyelembe venni.

Planner session mentés
Quote / CRM generálás
Dashboard summary
Naptár API
Hitelesítés
Upload / config route-ok

1. Rendszeráttekintés

A rendszer két fő entitás köré épül: a planner session és a quote. A planner session a teljes rendezvényadatlapot jelenti, amelyből JSON, PDF és ICS készül. A quote ettől külön életciklust kap, mert egy eseményhez több ajánlat, módosított ajánlat vagy follow-up dokumentum is tartozhat.

Planner modul

Eseményadatok, menetrend, zenei igények, technikai igények, pénzügyi és jóváhagyási mezők, PDF / ICS generálás.

CRM / Quote modul

Árajánlatok, accepted quote-ok, follow-up visszatöltés, quote PDF-ek és pénzügyi utókövetés.

A planner és a quote logika szétválasztása tudatos tervezési döntés. Ez teszi lehetővé, hogy a rendezvényadatlapok és az árajánlatok külön indexben, külön mappában és külön munkafolyamatban maradjanak.

2. Rendszertérkép

Ez a blokk gyors áttekintést ad a teljes alkalmazásról: melyik oldal mit csinál, melyik JavaScript fájl milyen szerepet tölt be, és a backend milyen fő tárolási pontokra dolgozik.

Frontend oldalak

  • main.html – planner fő űrlap
  • crm.html – árajánlat / CRM felület
  • dashboard.html – összesítő admin nézet
  • calendar.html – havi naptárnézet
  • dj-view.html – rendezvény DJ preview

Frontend JS modulok

  • app.js – planner logika
  • crm.js – quote logika
  • dashboard.js – admin dashboard
  • calendar.js – naptár
  • dj-view.js – preview és timeline

Backend

  • server.js – teljes route, PDF, index, template és storage logika
  • Express alapú kiszolgálás
  • PDFKit alapú dokumentumgenerálás
  • Multer alapú file upload

Tárolás

  • /data – planner session fájlok
  • /data/quotes – quote fájlok
  • /uploads – feltöltött képek
  • /public/templates – sablonok és payment config

Frontend oldalak és UI entrypointok

A rendszer több különálló HTML felülettel rendelkezik, amelyek mind saját JavaScript logikát töltenek be és különböző API végpontokkal kommunikálnak. Ezek az oldalak a rendszer belépési pontjai (entrypointok), és meghatározzák, hogy a felhasználó mely funkcionális modulhoz fér hozzá.

HTML oldal Funkció Fő JS fájl Használt API-k Felhasználói szerep
index.html Planner wizard – eseményadatok rögzítése app.js /api/sessions
/api/upload
/api/venues
/api/autotimeline
/api/conflicts
/api/planner-accepted-quotes
Admin / szervező
crm.html CRM és ajánlatgeneráló felület crm.js /api/quotes/generate
/api/quotes
/api/quote/:stamp
Admin / értékesítés
dashboard.html Rendszer dashboard és pénzügyi összesítés dashboard.js /api/auth/dashboard
/api/dashboard-summary
Admin
calendar.html Havi eseménynaptár és eseménylista calendar.js /api/calendar Admin / DJ
dj-view.html DJ esemény nézet (egyeztető lap) dj-view.js /api/session/:stamp
/api/auth/price-view
DJ / technikai személyzet
Az egyes HTML oldalak különálló entrypointként működnek, ezért a hozzájuk tartozó JavaScript fájlok több helper függvényt saját példányban tartalmaznak. Ez jelenleg nem hiba, hanem a moduláris felépítés következménye. Későbbi refaktor során ezek közös utility modulba szervezhetők.
Frontend → Backend kommunikáció A HTML oldal betölt egy JS modult (pl. app.js), amely a felhasználói interakciók hatására HTTP kéréseket küld a backend API végpontokra.
Tipikus adatfolyam index.htmlapp.js/api/sessions → JSON mentés → PDF generálás → ICS generálás → válasz a frontendnek.
Frontend moduláris logika Minden oldal csak a saját funkciójához szükséges API-kat használja. Ez csökkenti a kódfüggőségeket és egyszerűbbé teszi a későbbi fejlesztést vagy refaktorálást.

Rendszer architektúra – adatfolyam

Az alábbi diagram a rendszer fő komponenseit és az adatok áramlását mutatja. A cél nem az egyes endpointok részletezése, hanem a teljes működési modell áttekintése: hogyan jut el egy felhasználói művelet a frontend felülettől a backend feldolgozáson át a fájlrendszerben tárolt dokumentumokig.

1. Felhasználói felület (UI) A felhasználó egy HTML oldalon keresztül lép be a rendszerbe. Az egyes oldalak külön funkcionális modulokat képviselnek.

index.html        → planner wizard
crm.html          → ajánlat generálás
dashboard.html    → admin dashboard
calendar.html     → havi eseménynaptár
dj-view.html      → esemény egyeztető lap
2. Frontend logika Az oldalak saját JavaScript modulokat töltenek be, amelyek kezelik a felhasználói interakciókat és API hívásokat indítanak.

app.js        → planner logika
crm.js        → ajánlatgeneráló logika
dashboard.js  → dashboard statisztika
calendar.js   → naptár nézet
dj-view.js    → esemény preview
3. Backend API réteg A frontend HTTP kéréseket küld a backend szervernek, amely validálja az adatokat, feldolgozza a kérést és létrehozza vagy módosítja a szükséges fájlokat.

/api/sessions
/api/quotes/generate
/api/dashboard-summary
/api/calendar
/api/session/:stamp
4. Feldolgozási logika A backend több lépésben dolgozza fel a beérkező adatokat. A payload normalizálása után külön modulok készítik el a dokumentumokat.

payload normalizálás
↓
id / stamp generálás
↓
JSON rekord mentés
↓
PDF dokumentum generálás
↓
ICS naptárfájl generálás
↓
index fájl frissítés
5. Fájlrendszer alapú tárolás A rendszer adatbázis helyett strukturált fájlrendszert használ. Ez egyszerűbb deploy-t és könnyebb backup kezelést tesz lehetővé.

/data
  ├─ planner rekordok
  ├─ _index.json
  └─ _counters.json

/data/quotes
  ├─ quote JSON
  ├─ quote PDF
  └─ _quotes_index.json

/uploads
  └─ feltöltött képek

/public/templates
  └─ eseménysablonok
6. Válasz a frontendnek A backend a feldolgozás végén egy strukturált JSON választ küld vissza, amely tartalmazza az elkészült dokumentumok elérési útját.

{
  "ok": true,
  "stamp": "2026-05-14_kiss_nagy",
  "pdf": "/data/2026-05-14_kiss_nagy.pdf",
  "ics": "/data/2026-05-14_kiss_nagy.ics"
}
Ez az architektúra tudatosan egyszerű: a rendszer **stateless API + fájlrendszer alapú tárolás** elvre épül. Előnyei: • könnyű telepítés • egyszerű backup • gyors fejlesztés • nincs adatbázis függőség Hátránya: • nagyon nagy adatmennyiség esetén érdemes lehet később adatbázis alapú megoldásra váltani.

Teljes rendszer komponens diagram

Ez az ábra a rendszer fő komponenseit mutatja meg magas szinten. A cél itt nem az endpointok részletes felsorolása, hanem annak bemutatása, hogy a frontend oldalak, a JavaScript modulok, a backend logika és a fájlrendszer hogyan kapcsolódnak egymáshoz.

Felhasználó A rendszer használata mindig valamelyik frontend oldalon indul.
User
  ↓
HTML page
Frontend entrypointok Az egyes oldalak külön funkcionális belépési pontok.
index.html
crm.html
dashboard.html
calendar.html
dj-view.html
Frontend JavaScript réteg Minden HTML oldal saját JS modult használ, amely a UI logikát és az API kommunikációt kezeli.
index.html       → app.js
crm.html         → crm.js
dashboard.html   → dashboard.js
calendar.html    → calendar.js
dj-view.html     → dj-view.js
Express backend A backend központi belépési pontja a server.js, amely route-okat, PDF generálást, template kezelést, indexelést és fájlműveleteket kezel.
Frontend JS
   ↓
Express routes (server.js)
   ↓
Planner / Quote / Dashboard / Calendar logika
Backend belső alrendszerek A szerver logikailag több részre bontható, még ha fizikailag jelenleg egy fájlban is van.
Planner session kezelés
Quote / CRM kezelés
Dashboard aggregáció
Calendar aggregáció
Upload kezelés
Template rendszer
PDF generálás
ICS generálás
Index rebuild / index update
Tárolási réteg A rendszer nem adatbázisra, hanem strukturált fájlrendszerre épül.
/data
/data/quotes
/uploads
/public/templates
/public/venues.json
Dokumentumkimenetek A backend strukturált üzleti dokumentumokat és listafájlokat hoz létre.
Planner JSON
Planner PDF
Planner ICS
Quote JSON
Quote PDF
_index.json
_quotes_index.json
_counters.json
Ez a komponensdiagram jól mutatja, hogy a rendszer jelenleg monolitikus, de logikailag rétegezett. Ez kedvez a gyors fejlesztésnek, ugyanakkor később viszonylag könnyen szétbontható külön modulokra vagy service rétegekre.

Frontend → API dependency matrix

Ez a mátrix azt mutatja meg, hogy az egyes frontend modulok pontosan mely backend végpontoktól függenek. Ez különösen hasznos hibakeresésnél, refaktorálásnál vagy új funkciók tervezésénél.

Frontend modul Függő API-k Függőség típusa Mi történik, ha az API hibás?
app.js GET /api/venues
POST /api/venues
GET /api/payment-transfer-config
POST /api/upload
GET /api/conflicts
POST /api/autotimeline
POST /api/sessions
GET /api/sessions
GET /api/session/:stamp
DELETE /api/session/:stamp
GET /api/stats
GET /api/planner-accepted-quotes
GET /api/planner-accepted-quote/:stamp
erős függőség A planner fő működése részlegesen vagy teljesen leáll.
crm.js GET /api/session/:stamp
POST /api/quotes/generate
GET /api/quotes
GET /api/quote/:stamp
DELETE /api/quote/:stamp
erős függőség Az ajánlatgenerálás és follow-up kezelés nem működik.
dashboard.js POST /api/auth/dashboard
GET /api/dashboard-summary
közepes függőség A dashboard nem tölti be az összesítő adatokat.
calendar.js GET /api/calendar egypontos függőség A naptár nézet üres vagy hibás lesz.
dj-view.js GET /api/session/:stamp
POST /api/auth/price-view
közepes függőség A preview megjelenhet részben, de pénzügyi feloldás nélkül.

Miért hasznos ez a mátrix?

  • gyors hibaforrás-beazonosítás
  • frontend refaktor támogatása
  • API változtatások hatásvizsgálata
  • moduláris bővítés előkészítése

Technikai megfigyelés

A legerősebb backend függősége jelenleg az app.js-nek van, mert ez kezeli a legtöbb üzleti folyamatot: mentés, visszatöltés, feltöltés, validáció, accepted quote import, statisztika és konfliktusellenőrzés.

Refaktorálás során ez a blokk segít eldönteni, hogy mely frontend modulokat lehet a legkisebb kockázattal leválasztani, külön bundle-be szervezni vagy új UI keretrendszerre migrálni.

Planner lifecycle – rekord életciklus

Ez a blokk a planner rekord tipikus életciklusát mutatja meg. Nem alacsony szintű technikai állapotgépről van szó, hanem üzleti és működési nézetről: hogyan jön létre egy esemény, mikor módosul, milyen dokumentumok kapcsolódnak hozzá, és hogyan kerülhet törlésre.

1. Üres űrlap állapot A felhasználó megnyitja a planner oldalt, és egy új rekord létrehozására készül.
Állapot:
nincs mentett rekord
nincs stamp
nincs PDF / ICS
2. Template alapú előtöltés A felhasználó kiválaszthat sablont, vagy accepted quote-ból tölthet elő adatokat. Ez még nem jelent mentett rekordot, csak szerkesztési állapotot.
Űrlap előtöltve
↓
még nincs végleges mentés
↓
szerkeszthető állapot
3. Validált szerkesztési állapot A felhasználó kitölti a kötelező mezőket, beállítja a menetrendet, pénzügyeket, jóváhagyást.
Kötelező mezők kitöltve
↓
frontend validáció
↓
mentésre kész állapot
4. Mentett rekord A POST /api/sessions route létrehozza vagy frissíti a planner rekordot.
JSON mentés
↓
PDF generálás
↓
ICS generálás
↓
index frissítés
5. Visszatölthető állapot A rekord megjelenik a keresésekben, a naptárban, a dashboard összesítésekben és a DJ preview oldalon is.
GET /api/sessions
GET /api/session/:stamp
GET /api/calendar
GET /api/dashboard-summary
6. Módosított rekord Ugyanazzal a stamp-pel újramenthető a rekord, ezzel a JSON / PDF / ICS is frissül.
létező rekord
↓
űrlap visszatöltés
↓
adatok módosítása
↓
újramentés
7. Törölt rekord A DELETE /api/session/:stamp route törli a kapcsolódó fájlokat és indexbejegyzést.
JSON törlés
PDF törlés
ICS törlés
index frissítés

Kapcsolódó dokumentumok

  • planner JSON rekord
  • planner PDF dokumentum
  • ICS naptárfájl
  • feltöltött képek / aláírások

Kapcsolódó üzleti nézetek

  • planner keresőlista
  • dashboard összesítés
  • calendar havi nézet
  • DJ preview
A planner rekord életciklusa nem lineáris, mert egy mentett esemény többször is módosítható. Gyakorlatilag egy újraírható dokumentum-alapú entitásról van szó, amelyhez minden mentéskor újragenerált kimenetek tartoznak.

3. Fájlszerkezet

PUBLIC_DIR/                         → frontend HTML / JS / CSS / template fájlok
PUBLIC_DIR/templates/               → eseménysablonok + payment-transfer.json
PUBLIC_DIR/venues.json              → helyszínek forrásfájlja
DATA_DIR/                           → planner session mentések
DATA_DIR/_index.json                → planner index
DATA_DIR/_counters.json             → quote sorszámozási számláló
DATA_DIR/quotes/                    → quote JSON és PDF fájlok
DATA_DIR/quotes/_quotes_index.json  → quote index
UPLOADS_DIR/                        → feltöltött képek, jegyzetek, aláírások

Miért jó az indexfájl?

Gyors listázást ad a frontendnek, így nem kell minden keresésnél egyenként végigolvasni az összes rekordfájlt.

Miért jó az atomic írás?

A JSON / PDF / ICS ideiglenes fájlba íródik, majd átneveződik. Ez csökkenti a félig elkészült sérült állományok kockázatát.

4. Helper függvények

A backend és a frontend több olyan segédfüggvényt használ, amelyek nem önálló üzleti végpontok, mégis kulcsszerepet játszanak a működésben. Ezek biztosítják az egységes névformázást, dátumkezelést, indexelést, pénzügyi számítást és dokumentum-előkészítést.

Backend helper-ek

  • safeSlug() – biztonságos fájlnév-részlet képzése
  • loadCounters() – quote számlálók betöltése
  • saveCounters() – quote számlálók mentése
  • nextQuoteNumber() – új quote sorszám generálása
  • normalizeQuotePayload() – quote mezők egységesítése
  • makeQuoteStamp() – quote fájlnév-stamp készítése
  • loadQuoteIndex() / saveQuoteIndex()
  • makeQuoteIndexEntry() – quote index rekord készítése
  • rebuildQuoteIndexFromFiles() – quote index újraépítése
  • upsertQuoteIndexEntry() – quote index frissítése
  • normalizeDate() – dátum egységesítése YYYY-MM-DD formára
  • fileStamp() – egyedi stamp létrehozása név + dátum alapján
  • writeJsonAtomic() – JSON biztonságos, atomikus mentése
  • readJson() – JSON fájl olvasása
  • normalizeText()
  • normalizeArray()
  • toIntOrNull()
  • toFloatOrZero()
  • formatMoney()
  • toBool()
  • pad2()
  • isValidTime()
  • addMinutesToTime()
  • escapeICS()
  • replaceFileAtomic() – ideiglenes fájl véglegesítése
  • safeUnlink() – biztonságos fájltörlés
  • ensureVenuesFile()
  • loadVenuesFile()
  • saveVenuesFile()
  • addVenueToFile()
  • ensureTemplateFiles()
  • ensurePaymentTransferFile()
  • loadPaymentTransferConfig()
  • buildAutoTimeline() – automatikus időpont-kalkuláció
  • generateICS() – ICS generálás
  • loadIndex() / saveIndexAtomic()
  • makeIndexEntryFromRecord() – planner index rekord készítése
  • rebuildIndexFromFiles() – planner index újraépítése
  • upsertIndexEntry() – planner index frissítése
  • includesCI()
  • filterIndexItems()
  • findConflictsByDate()
  • setBaseFont(), moveToContentStart()
  • ensureSpace(), ensureSectionSpace()
  • startSection(), drawHeader()
  • titleLine(), kvInline(), divider()
  • drawTable()
  • eventTypeLabelHu()
  • paymentStatusLabelHu()
  • effectListText()
  • getExtraServiceFees()
  • generatePdf()
  • generateQuotePdf()

Frontend helper-ek

  • escapeHtml() – biztonságos HTML kiírás
  • $() – elemlekérés
  • getModalRefs(), getPdfModalRefs()
  • showAppModal(), closeAppModal()
  • showPdfProgressModal(), finishPdfProgressModal()
  • bindModalEvents()
  • showStep()
  • loadTemplateIndex(), loadTemplateById()
  • applyTemplate(), clearTemplateDrivenFields()
  • inferEventTypeFromQuote(), inferTemplateIdFromQuote()
  • loadPlannerAcceptedQuotes(), applyAcceptedQuoteToPlanner()
  • renderGenres(), getSelectedGenres()
  • setChecked(), isChecked()
  • toNumberOrZero(), formatMoney(), truthy()
  • loadTransferConfig(), applyTransferConfig()
  • recalcFinance(), recalcQuoteFinance()
  • syncStep4UI(), syncBillingUI()
  • syncCeremonyMusicLocks(), syncConditionalSections()
  • syncEventTypeUI(), syncContactVisibility()
  • initSignaturePad(), clearSignaturePad()
  • renderAttachments()
  • loadVenues(), renderVenueOptions(), saveVenueIfNeeded()
  • validateForm()
  • renderConflictNotice(), checkConflicts()
  • getPayload(), setPayload()
  • setResultLinks()
  • runSearch(), renderSearchResults()
  • loadCalendar(), renderCalendar(), renderDayList()
  • loadDashboard(), renderDashList(), renderAlertList()
  • loadView(), buildTimeline(), annotateTimeline()
  • collectQuotePayload(), generateQuotePdf()
A helper függvények több helyen duplikáltan jelennek meg a frontend JS fájlokban. Ez jelenleg nem logikai hiba, hanem abból adódik, hogy az oldalak külön entrypointként működnek. Későbbi refaktor során ezek közös utility fájlba emelhetők.

5. Frontend → endpoint mátrix

Ez a blokk fordított nézetben mutatja meg, hogy az egyes frontend JS modulok pontosan mely backend végpontokat használják. Hibakeresésnél ez gyakran gyorsabb, mint endpointonként keresgélni.

Frontend JS Használt endpointok Fő cél
app.js GET /api/venues
POST /api/venues
GET /api/payment-transfer-config
POST /api/upload
GET /api/conflicts
POST /api/autotimeline
POST /api/sessions
GET /api/sessions
GET /api/session/:stamp
DELETE /api/session/:stamp
GET /api/stats
GET /api/planner-accepted-quotes
GET /api/planner-accepted-quote/:stamp
planner űrlap, mentés, keresés, statisztika, accepted quote előtöltés
crm.js GET /api/session/:stamp
POST /api/quotes/generate
GET /api/quotes
GET /api/quote/:stamp
DELETE /api/quote/:stamp
árajánlat generálás, follow-up betöltés, quote törlés
dashboard.js POST /api/auth/dashboard
GET /api/dashboard-summary
dashboard hitelesítés és összesítő kártyák
calendar.js GET /api/calendar havi naptár, napi eseménylista, PDF / ICS / Preview linkek
dj-view.js GET /api/session/:stamp
POST /api/auth/price-view
részletes preview, pénzügyi mezők opcionális feloldása

6. Adatmodellek

A rendszer több, egymással összefüggő objektummal dolgozik. Ezek nem formális TypeScript interfészek, de logikailag stabil szerkezetek, amelyeket a frontend és backend is követ.

Planner payload

{
  "eventTemplate": "wedding_classic",
  "eventTemplateName": "Esküvő – klasszikus magyar",
  "eventType": "wedding",
  "coupleName": "Minta Pár",
  "eventDate": "2026-08-15",
  "venue": "Szeged - Kastélykert Birtok",
  "primaryContactName": "Tarján Attila",
  "primaryContactPhone": "+36 30 123 4567",
  "genres": ["Retro", "Pop"],
  "guestArrivalTime": "17:00",
  "dinnerTime": "19:00",
  "serviceFee": "250000",
  "paymentMethod": "átutalás"
}

Quote objektum

{
  "quoteNumber": "AJ-2026-0001",
  "quoteDate": "2026-03-12",
  "validFrom": "2026-03-12",
  "validUntil": "2026-03-19",
  "servicePeriodFrom": "2026-08-15T12:00",
  "servicePeriodTo": "2026-08-15T23:00",
  "packageName": "Esküvő – Prémium",
  "basePrice": 250000,
  "extrasTotal": 60000,
  "discountAmount": 10000,
  "totalPrice": 300000,
  "status": "draft",
  "documentMode": "offer"
}

Planner index item

{
  "stamp": "minta_par_2026-08-15",
  "json": "/data/minta_par_2026-08-15.json",
  "pdf": "/data/minta_par_2026-08-15.pdf",
  "ics": "/data/minta_par_2026-08-15.ics",
  "eventType": "wedding",
  "coupleName": "Minta Pár",
  "eventDate": "2026-08-15",
  "venue": "Szeged - Kastélykert Birtok",
  "status": "szerződött",
  "isPaid": "nem"
}

Quote index item

{
  "stamp": "minta_par_2026-08-15_aj-2026-0001",
  "quoteNumber": "AJ-2026-0001",
  "quoteDate": "2026-03-12",
  "validUntil": "2026-03-19",
  "status": "accepted",
  "coupleName": "Minta Pár",
  "eventType": "wedding",
  "eventDate": "2026-08-15",
  "venue": "Szeged - Kastélykert Birtok",
  "totalPrice": 300000
}

Dashboard summary response

{
  "ok": true,
  "summary": {...},
  "nextEvent": {...},
  "todayItems": [...],
  "next7Days": [...],
  "openFinance": [...],
  "incompleteItems": [...],
  "alerts": {...},
  "quotes": {...}
}

Calendar day item

{
  "date": "2026-08-15",
  "day": 15,
  "inMonth": true,
  "isToday": false,
  "items": [
    {
      "stamp": "minta_par_2026-08-15",
      "coupleName": "Minta Pár",
      "venue": "Szeged - Kastélykert Birtok",
      "eventType": "wedding",
      "pdf": "/data/minta_par_2026-08-15.pdf",
      "json": "/data/minta_par_2026-08-15.json",
      "ics": "/data/minta_par_2026-08-15.ics"
    }
  ]
}

7. Kötelező / opcionális mezők

A frontend sok validációt már mentés előtt elvégez, de a backend is ellenőrzi a legfontosabb mezőket. Az alábbi táblák a legfontosabb mezőket foglalják össze.

Planner payload fő mezők

Mező Típus Kötelező Mikor releváns Megjegyzés
eventTemplatestringigenmindigtemplate kiválasztás kötelező
eventTypestringigenmindigwedding / corporate / prom / ball
coupleNamestringigenmindigüzleti és fájlnévi azonosítóban is szerepet kap
eventDatedate stringigenmindigconflict check és stamp alap
venuestringigenmindigselect vagy egyedi venue
primaryContactNamestringigenmindigkapcsolattartó
primaryContactPhonestringigenmindigkapcsolattartó telefon
guestArrivalTimetimeigenweddingmenetrend alapja
dinnerTimetimeigenweddingmenetrend alapja
eventEndTimetimeigenweddingmásnapi zárás is lehet
evGuestArrivalTimetimeigennon-weddingáltalános rendezvény kezdési pont
evEventEndTimetimeigennon-weddingáltalános rendezvény vége
paymentMethodstringigenmindigKP vagy átutalás
bankAccountstringfeltételesátutalásátutalásnál kötelező
invoiceNamestringfeltételesinvoiceNeeded=trueszámlázásnál kötelező

Quote mezők

Mező Típus Kötelező Megjegyzés
quoteNumberstringnemhiány esetén backend generálja
quoteDatedatenemdefault: mai nap
validFromdatenemdefault: mai nap
validUntildatenemdefault: +7 nap
packageNamestringnemtemplate vagy kézi kitöltés
basePricenumbernemnormalizálva lesz
extrasTotalnumbernemeffect gépek alapján is számolható
discountAmountnumbernemlevonás
totalPricenumbernembackend is újraszámolhatja
statusstringnemdraft / sent / accepted stb.
documentModestringnemoffer vagy followup

8. Eseménytípus-logika

A rendszer nem csak más szöveget jelenít meg az egyes eseménytípusoknál, hanem eltérő mezőket, menetrendet és validációkat is használ.

Wedding

  • ceremónia blokk elérhető
  • nyitótánc, torta, éjféli keringő, menyasszonytánc
  • menyasszony és vőlegény telefon mezők
  • ceremóniamester blokk
  • guestArrivalTime, dinnerTime, eventEndTime kiemelt mezők

Corporate / Prom / Ball

  • általános rendezvény menetrend
  • organizerName / Phone / Email
  • techStage / techProjector / techMicCount
  • evGuestArrivalTime, evOpeningTime, evEventEndTime
  • nincs külön wedding-specifikus blokk
Az autotimeline és a PDF generálás is eseménytípus-specifikus logikával dolgozik, tehát a mezők nem csak UI szinten, hanem backend oldalon is eltérően viselkednek.

9. Planner API végpontok

POST /api/sessions
Új planner session mentése, PDF és ICS generálása

A planner fő mentési route-ja. A teljes esemény payloadot fogadja, validál, opcionálisan automatikus menetrendet generál, majd létrehozza a JSON, PDF és ICS fájlokat.

Frontend JS Miért használja Létrejövő fájlok Fő mellékhatás
app.js Planner űrlap mentése JSON + PDF + ICS index frissítés + ütközésellenőrzés

Request példa

{
  "eventTemplate": "wedding_classic",
  "eventType": "wedding",
  "coupleName": "Minta Pár",
  "eventDate": "2026-08-15",
  "venue": "Szeged - Kastélykert Birtok",
  "primaryContactName": "Tarján Attila",
  "primaryContactPhone": "+36 30 123 4567",
  "guestArrivalTime": "17:00",
  "dinnerTime": "19:00",
  "eventEndTime": "04:00",
  "autoTimeline": true,
  "attachments": ["/uploads/123_note.png"]
}

Response példa

{
  "ok": true,
  "id": "uuid",
  "stamp": "minta_par_2026-08-15",
  "json": "/data/minta_par_2026-08-15.json",
  "pdf": "/data/minta_par_2026-08-15.pdf",
  "ics": "/data/minta_par_2026-08-15.ics",
  "conflicts": []
}

Validációk

  • eventTemplate kötelező
  • eventType kötelező
  • coupleName kötelező
  • eseménytípustól függően időmezők kötelezők
  • átutalás esetén számlaadatok kötelezők

Hibalehetőségek

  • hiányzó eseménytípus vagy sablon
  • hibás aláírásfájl vagy hiányzó feltöltés
  • PDF generálási hiba
  • ICS írási hiba
  • fájlrendszer jogosultsági probléma
GET /api/sessions
Mentett planner események listázása és szűrése

A planner keresője, az admin listák és bizonyos összesítő nézetek ezt a route-ot használják. Az indexfájlból dolgozik, majd query paraméterek alapján szűr.

Frontend JS Használat Query mezők Válasz jellege
app.js Keresés és listaépítés q, couple, venue, style, status, paid, eventType, eventTemplate, dateFrom, dateTo Index szintű tömör rekordlista
GET /api/sessions?q=kastely&eventType=wedding&dateFrom=2026-08-01&dateTo=2026-08-31
{
  "ok": true,
  "items": [
    {
      "stamp": "minta_par_2026-08-15",
      "json": "/data/minta_par_2026-08-15.json",
      "pdf": "/data/minta_par_2026-08-15.pdf",
      "ics": "/data/minta_par_2026-08-15.ics",
      "eventType": "wedding",
      "coupleName": "Minta Pár"
    }
  ]
}
Ez a route nem a teljes rekordot adja vissza, hanem gyors listázásra optimalizált indexadatokat.
GET /api/session/:stamp
Egy konkrét planner rekord teljes visszaolvasása

A visszatöltés, a DJ Preview és több részletes nézet ezt használja. A teljes mentett rekordot adja vissza.

Frontend JS Miért használja Bemenet Kimenet
app.js, crm.js, dj-view.js Részletes rekordbetöltés stamp paraméter teljes JSON rekord
{
  "ok": true,
  "record": {
    "id": "uuid",
    "createdAt": "2026-03-12T20:00:00.000Z",
    "updatedAt": "2026-03-12T20:15:00.000Z",
    "payload": { "coupleName": "Minta Pár", "eventType": "wedding" },
    "attachments": []
  }
}

Validáció

Csak létező stamp esetén ad választ. Hiányzó vagy hibás fájlnál 404 válasz jön.

Tipikus hibák

  • nem létező stamp
  • kézzel törölt JSON fájl
  • sérült JSON tartalom
DELETE /api/session/:stamp
Planner rekord törlése

Törli a sessionhöz tartozó JSON, PDF és ICS fájlt, majd frissíti az indexet.

{ "ok": true }

Frontend JS

app.js – a keresési eredményekből történő törlésnél.

Hibalehetőségek

  • fájl nem törölhető
  • index nem menthető
  • jogosultsági hiba a fájlrendszerben

10. CRM / Quote API végpontok

POST/api/quotes/generate
Árajánlat JSON és PDF generálás

A CRM űrlap ezt a route-ot hívja. A backend normalizálja a quote adatokat, sorszámot generál, majd PDF-et készít és indexel.

Frontend JS Miért használja Fő bemenet Kimenet
crm.js Ajánlat generálása payload + quote quote JSON + quote PDF

Request példa

{
  "payload": {
    "coupleName": "Minta Pár",
    "eventDate": "2026-08-15",
    "venue": "Szeged - Kastélykert Birtok",
    "eventType": "wedding"
  },
  "quote": {
    "quoteDate": "2026-03-12",
    "packageName": "Esküvő – Prémium",
    "basePrice": 250000,
    "discountAmount": 10000,
    "status": "draft"
  }
}

Response példa

{
  "ok": true,
  "stamp": "minta_par_2026-08-15_aj-2026-0001",
  "record": { "payload": {}, "quote": {} },
  "pdf": "/data/quotes/minta_par_2026-08-15_aj-2026-0001.pdf",
  "json": "/data/quotes/minta_par_2026-08-15_aj-2026-0001.json"
}

Validációk

  • coupleName kötelező
  • eventDate kötelező
  • quote normalizálás automatikusan történik
  • sorszám automatikusan generálódik, ha hiányzik

Hibalehetőségek

  • hiányzó alap adatok
  • PDF generálási hiba
  • quote fájl mentési hiba
  • quote index írási hiba
GET/api/quotes
Quote lista lekérése

A CRM follow-up lista és a korábbi ajánlatok visszatöltő dropdownja ezt használja.

GET /api/quotes?q=minta&status=accepted
{
  "ok": true,
  "items": [
    {
      "stamp": "minta_par_2026-08-15_aj-2026-0001",
      "quoteNumber": "AJ-2026-0001",
      "status": "accepted"
    }
  ]
}

Frontend JS

crm.js – follow-up ajánlatlista betöltése.

Hibalehetőségek

Quote index hiánya vagy sérülése esetén a backend újraépíti azt, de hibás JSON fájlok kieshetnek a listából.

GET/api/quote/:stamp
Egy quote teljes rekordjának visszaolvasása

Follow-up visszatöltéshez és korábbi ajánlat adatok újrafelhasználásához szükséges route.

Frontend JS Használat Validáció Válasz
crm.js Kiválasztott ajánlat visszatöltése létező quote fájl kell teljes quote rekord
{
  "ok": true,
  "record": {
    "id": "uuid",
    "payload": { "coupleName": "Minta Pár" },
    "quote": { "quoteNumber": "AJ-2026-0001" }
  }
}
DELETE/api/quote/:stamp
Quote törlése

Törli a kiválasztott quote JSON és PDF fájlt, majd kiveszi azt a quote indexből.

Frontend JS

crm.js – generált ajánlat és follow-up ajánlat törlése.

Tipikus hibák

  • nem létező quote stamp
  • fájltörlési hiba
  • quote index mentési hiba
GET/api/planner-accepted-quotes
Accepted quote-ok listája planner előtöltéshez

Csak az elfogadott státuszú ajánlatokat adja vissza, hogy a planner oldal ezekből tudjon új eseményt előkészíteni.

Frontend JS

app.js – accepted quote lista betöltése.

Miért külön route?

Nem kell a frontendnek külön szűrnie a teljes quote listát, így tisztább és biztonságosabb a workflow.

{
  "ok": true,
  "items": [
    {
      "stamp": "minta_par_2026-08-15_aj-2026-0001",
      "quoteNumber": "AJ-2026-0001",
      "quoteDate": "2026-03-12",
      "coupleName": "Minta Pár",
      "eventType": "wedding",
      "eventDate": "2026-08-15",
      "venue": "Szeged - Kastélykert Birtok",
      "status": "accepted",
      "totalPrice": 300000,
      "updatedAt": "2026-03-12T20:12:00.000Z"
    }
  ]
}
GET/api/planner-accepted-quote/:stamp
Egy accepted quote részletes betöltése plannerre

Csak akkor ad vissza rekordot, ha a kiválasztott quote valóban accepted állapotú.

Frontend JS

app.js – accepted ajánlatból planner űrlap előtöltése.

Hibalehetőségek

  • hiányzó quote azonosító
  • nem accepted státusz
  • nem található quote rekord
{
  "ok": true,
  "record": {
    "payload": { "coupleName": "Minta Pár", "eventDate": "2026-08-15" },
    "quote": { "status": "accepted", "quoteNumber": "AJ-2026-0001" }
  }
}

11. Segédvégpontok

GET/
Fő planner felület kiszolgálása

A gyökérútvonal a planner frontend főoldalát szolgálja ki.

Frontend fájl

main.html

Megjegyzés

Ez nem JSON API, hanem HTML kiszolgáló route.

GET/api/venues
Helyszínek lekérése

A planner helyszínlista töltése. A javított frontend már ezt az API-t használja a statikus JSON helyett.

Frontend JS

app.js

Response példa

{
  "ok": true,
  "options": [
    "Szeged - Kastélykert Birtok",
    "Mórahalom - Babos Tanya"
  ]
}
POST/api/venues
Új helyszín mentése

Az „Egyéb…” mezőből érkező új helyszínt menti, majd visszaadja a frissített listát.

{ "venue": "Új Helyszín Kft. Rendezvényterem" }
{
  "ok": true,
  "added": true,
  "venue": "Új Helyszín Kft. Rendezvényterem",
  "options": ["..."]
}

Frontend JS

app.js

Hibalehetőségek

  • üres venue mező
  • fájlrendszer írási hiba
  • venues.json sérülése
POST/api/upload
Képfeltöltés

Jegyzetek és aláírások feltöltéséhez használt route. Csak PNG / JPG / WEBP fájlokat enged be 12 MB méretig.

Frontend JS

app.js

Hibák / validáció

  • nem támogatott MIME típus
  • 12 MB feletti fájl
  • hiányzó file mező
{
  "ok": true,
  "file": "/uploads/1700000000000_signature.png",
  "original": "signature.png"
}
GET/api/conflicts
Dátumütközések lekérdezése

Az esemény dátuma alapján visszaadja, van-e már másik mentett session ugyanarra a napra.

GET /api/conflicts?eventDate=2026-08-15&excludeStamp=minta_par_2026-08-15
{
  "ok": true,
  "items": [
    {
      "stamp": "masik_par_2026-08-15",
      "coupleName": "Másik Pár",
      "eventDate": "2026-08-15",
      "venue": "Másik helyszín"
    }
  ]
}

Frontend JS

app.js

Miért fontos?

Nem tiltja automatikusan a mentést, csak figyelmeztet, így az adminisztratív döntés a felhasználónál marad.

POST/api/autotimeline
Automatikus menetrend generálása

A backend kiszámol hiányzó időpontokat a már megadott eseményidők alapján.

Frontend JS

app.js

Hibalehetőségek

Hibás vagy hiányos időformátumok esetén a visszaadott generált mezők részlegesek lehetnek.

{
  "ok": true,
  "generated": {
    "guestArrivalTime": "17:00",
    "dinnerTime": "19:00",
    "cakeTime": "22:00"
  }
}
GET/api/payment-transfer-config
Átutalási konfiguráció lekérése

A szolgáltató fix számlaadatainak lekérdezésére szolgál.

Frontend JS

app.js

Response példa

{
  "ok": true,
  "config": {
    "bankAccount": "11712345-12345678-12345678",
    "accountOwner": "Tarján Attila",
    "bankName": "CIB Bank Zrt"
  }
}
GET/api/stats
Statisztikai összesítés

Műfaji, tiltólistás, helyszín- és státuszgyakorisági adatokat ad a planner rekordok alapján.

Frontend JS

app.js – statisztika panel.

Hibalehetőségek

Sérült planner rekordok esetén egyes elemek hiányozhatnak a statisztikából, de az endpoint ettől még általában működőképes marad.

{
  "ok": true,
  "totalSessions": 18,
  "topGenres": [{"key":"retro","count":6}],
  "venueFrequency": [{"key":"Szeged - Kastélykert Birtok","count":4}]
}

12. Dashboard és naptár végpontok

GET/api/dashboard-summary
Dashboard összesítő route

A dashboard oldal már ezt a route-ot használja, így a számolási logika a backendben marad, és nem duplikálódik a frontendben.

Frontend JS Tartalom Fő blokkok Miért jobb így?
dashboard.js összesítő dashboard adatok summary, nextEvent, todayItems, next7Days, openFinance, incompleteItems, alerts, quotes kevesebb frontend logika, egységes üzleti szabályok
{
  "ok": true,
  "summary": {
    "totalEvents": 18,
    "todayCount": 1,
    "next7DaysCount": 4,
    "openFinanceTotal": 540000
  },
  "nextEvent": { "stamp": "...", "coupleName": "Minta Pár" },
  "alerts": {
    "missingDeposit": [],
    "missingInvoiceInfo": []
  },
  "quotes": {
    "totalQuotes": 9,
    "activeQuotes": 3,
    "acceptedQuotes": 2,
    "expiredQuotes": 1
  }
}
Ez a route aggregáló végpont, tehát nem egyetlen rekordot kezel, hanem több planner és quote rekordból épít üzleti nézetet.
GET/api/calendar?month=YYYY-MM
Havi naptár adatai

A naptár oldal a teljes havi rácsot és a napokhoz tartozó eseménylistát innen kapja meg.

Frontend JS

calendar.js

Javított működés

A frontend most már az API által visszaadott it.ics mezőt használja, nem kézzel rakja össze az ICS útvonalat.

{
  "ok": true,
  "month": "2026-08",
  "monthLabel": "2026. augusztus",
  "prevMonth": "2026-07",
  "nextMonth": "2026-09",
  "days": [
    {
      "date": "2026-08-15",
      "day": 15,
      "inMonth": true,
      "items": [
        {
          "stamp": "minta_par_2026-08-15",
          "pdf": "/data/minta_par_2026-08-15.pdf",
          "json": "/data/minta_par_2026-08-15.json",
          "ics": "/data/minta_par_2026-08-15.ics"
        }
      ]
    }
  ]
}

Validáció

A month paraméternek YYYY-MM formátumúnak kell lennie.

Hibalehetőségek

  • érvénytelen month paraméter
  • planner index hiánya
  • sérült eseménydátumok a rekordokban

13. PDF generálási logika és template rendszer

A rendszer kétféle PDF-et készít: planner PDF-et és quote PDF-et. Ezekhez közös tipográfiai és tördelési helper-ek tartoznak, de az üzleti tartalom eltérő. A template rendszer pedig előre definiált eseménytípus-alapbeállításokat biztosít.

Planner PDF logika

  • generatePdf() készíti el a planner PDF-et
  • fejléc logóval, eseménynévvel, dátummal és helyszínnel
  • külön blokkok: alapadatok, kapcsolattartás, zenei igények, menetrend, technika, pénzügyek
  • esküvő és nem esküvő eseménytípusnál eltérő szekciók
  • jóváhagyás és aláírás kép beillesztése
  • csatolt jegyzetképek külön oldalakra rakása

Quote PDF logika

  • generateQuotePdf() készíti el az ajánlati PDF-et
  • ajánlati fejléc, érvényességi idő, szolgáltatási időintervallum
  • csomagnév, csomagleírás, technikai tartalom
  • pénzügyi összesítés, kedvezmény, extra szolgáltatások
  • follow-up mód esetén számla- és utókövetési mezők is megjelennek

Közös PDF helper-ek

  • drawHeader() – fejléc rajzolása
  • titleLine() – szekciócím
  • divider() – elválasztó vonal
  • kvInline() – kulcs-érték sorok
  • drawTable() – menetrendi táblázatok
  • ensureSpace() – oldalváltás kezelése
  • setBaseFont() – alap betűkészlet és szín beállítása

Template rendszer

  • ensureTemplateFiles() hozza létre az alap sablonokat, ha hiányoznak
  • templates/index.json tartalmazza a választható sablonlistát
  • külön fájlok: wedding_classic.json, wedding_premium_show.json, corporate_gala.json, prom_standard.json, ball_classic.json
  • a frontend app.js és crm.js tölti be őket
  • a template-ek alap időpontokat, technikai szinteket és fizetési módokat tudnak előtölteni
{
  "id": "wedding_premium_show",
  "name": "Esküvő – prémium látvány",
  "eventType": "wedding",
  "payload": {
    "ceremonyOn": true,
    "ceremonyBy": "DJ",
    "effectColdSpark": true,
    "effectHeavyFog": true,
    "djTechLevel": "max",
    "lightTechLevel": "max",
    "paymentMethod": "átutalás"
  }
}
A template rendszer célja, hogy ne kelljen minden eseményt nulláról felépíteni. A sablon nem végleges adatot jelent, hanem kiinduló konfigurációt, amit a felhasználó tovább finomíthat.

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

Az alábbi mátrix összefoglalja, hogy melyik route milyen állományokat hoz létre, frissít vagy töröl. Ez különösen hasznos hibakeresésnél és karbantartásnál.

Route Művelet Létrejövő / módosuló fájl Típus Megjegyzés
GET / kiszolgál /public/main.html HTML planner főoldal
GET /api/venues olvas /public/venues.json konfiguráció helyszínlista forrás
POST /api/venues frissít /public/venues.json konfigurációs lista helyszínlista bővítése
POST /api/upload létrehoz /uploads/<generated_name> kép / aláírás planner csatolmány vagy signature
GET /api/payment-transfer-config olvas /public/templates/payment-transfer.json konfiguráció átutalási adatok
POST /api/sessions létrehoz / frissít /data/<stamp>.json planner rekord teljes payload mentés
POST /api/sessions létrehoz / frissít /data/<stamp>.pdf planner PDF egyeztető lap
POST /api/sessions létrehoz / frissít /data/<stamp>.ics naptárfájl importálható esemény
POST /api/sessions frissít /data/_index.json planner index listázáshoz szükséges
DELETE /api/session/:stamp töröl /data/<stamp>.json/.pdf/.ics planner fájlok index is frissül
POST /api/quotes/generate létrehoz / frissít /data/quotes/<stamp>.json quote rekord ajánlat mentés
POST /api/quotes/generate létrehoz / frissít /data/quotes/<stamp>.pdf quote PDF árajánlat vagy follow-up PDF
POST /api/quotes/generate frissít /data/quotes/_quotes_index.json quote index quote lista és accepted lista alapja
POST /api/quotes/generate frissít /data/_counters.json számláló quote sorszám növelése
DELETE /api/quote/:stamp töröl /data/quotes/<stamp>.json/.pdf quote fájlok quote index is frissül
GET /api/quotes olvas /data/quotes/_quotes_index.json quote index quote lista alapja
GET /api/sessions olvas /data/_index.json planner index session lista alapja
GET /api/quote/:stamp olvas /data/quotes/<stamp>.json quote rekord részletes betöltés
GET /api/session/:stamp olvas /data/<stamp>.json planner rekord részletes betöltés
A legtöbb végpont nem adatbázist, hanem fájlrendszert használ elsődleges tárolóként. Emiatt különösen fontos a fájlok, indexek és ideiglenes állományok viselkedésének ismerete.

15. Auth végpontok

POST/api/auth/dashboard
Dashboard feloldása jelszóval

A dashboard oldal belépő jelszavát ellenőrzi.

{ "password": "ateszadmin" }
{ "ok": true, "authorized": true }

Frontend JS

dashboard.js

Hibalehetőségek

Hibás jelszó esetén az endpoint nem dob hibát, hanem authorized: false választ ad.

POST/api/auth/price-view
Ármezők feloldása a DJ Preview oldalon

A DJ Preview felület alapértelmezetten elrejti a pénzügyi adatokat. Ezzel a route-tal lehet azokat ideiglenesen megjeleníteni.

{ "password": "ateszadmin" }
{ "ok": true, "authorized": true }

Frontend JS

dj-view.js

Megjegyzés

Jelenleg ugyanazt a master passwordöt használja, mint a dashboard auth, de funkcionálisan külön jogosultsági pontként kezelt route.

16. Hibakezelési stratégia

A rendszer vegyes hibakezelési modellt használ: egyes route-ok HTTP státuszkóddal jeleznek hibát, míg mások üzleti hibát { ok:false } szerkezetben adnak vissza.

Tipikus HTTP státuszkódok

  • 200 – sikeres válasz
  • 400 – hiányzó vagy hibás bemenet
  • 403 – jogosultsági üzleti tiltás, pl. nem accepted quote
  • 404 – nem található rekord
  • 500 – belső szerverhiba / fájlrendszer / PDF / JSON probléma

Frontend reakciók

  • app.js – modal hibaüzenet
  • crm.js – modal vagy error box
  • dashboard.js – auth error vagy alert
  • calendar.js – alert
  • dj-view.js – inline hibaüzenet a nézetben
A jövőbeni refaktor egyik jó célja lehetne egy teljesen egységes error contract kialakítása.

17. Gyors hibakeresés

Ha nem jelenik meg a venue lista Ellenőrizd a GET /api/venues végpontot és a /public/venues.json fájlt.
Ha nem készül PDF Ellenőrizd a generatePdf() vagy generateQuotePdf() logikát, a fontfájlokat, a logó elérési útját és a write permissiont.
Ha quote nem jelenik meg a listában Ellenőrizd a /data/quotes/_quotes_index.json fájlt és a rebuildQuoteIndexFromFiles() működését.
Ha dashboard üres Ellenőrizd a POST /api/auth/dashboard és GET /api/dashboard-summary válaszokat.
Ha a naptárban nincs esemény Ellenőrizd az eventDate formátumokat és a GET /api/calendar?month=... válaszát.
Ha accepted quote nem tölthető be plannerre Ellenőrizd, hogy a quote státusza valóban accepted-e és a GET /api/planner-accepted-quote/:stamp nem ad-e 403-at.

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

Planner mentés folyamata app.js → opcionális /api/upload/api/sessions → JSON + PDF + ICS → index frissítés → frontend eredmény linkek.
Quote generálás folyamata crm.js/api/quotes/generate → quote JSON + quote PDF → quote index.
Accepted quote → planner előtöltés app.js/api/planner-accepted-quotes → kiválasztás → /api/planner-accepted-quote/:stamp → űrlap előtöltés.
Dashboard betöltés dashboard.js/api/auth/dashboard/api/dashboard-summary → kártyák és riasztások renderelése.
Naptár betöltés calendar.js/api/calendar?month=... → havi rács + napi események + PDF / ICS / Preview linkek.
DJ Preview dj-view.js/api/session/:stamp → eseményadatok és menetrend kirajzolása → opcionális /api/auth/price-view árak feloldásához.

19. Tesztelési forgatókönyvek

1. Új wedding planner mentése Tölts ki kötelező mezőket, generálj PDF-et és ellenőrizd a JSON / PDF / ICS létrejöttét.
2. Corporate template használata Válassz corporate sablont, ellenőrizd a nem-wedding mezők aktiválódását és a PDF tartalmát.
3. Signature upload Rajzolt aláírás → upload → planner save → PDF-ben aláírás megjelenik.
4. Accepted quote előtöltés Accepted státuszú quote legyen elérhető, majd planner oldalon töltsd vissza.
5. Follow-up quote törlés CRM-ben korábbi quote betöltése, majd törlése és index frissülés ellenőrzése.
6. Dashboard auth Hibás jelszó → authorized:false, helyes jelszó → summary betöltés.
7. Calendar month navigation Előző / következő hónap váltás és adott napi események ellenőrzése.

20. Ismert korlátok

Jelenlegi korlátok

  • nincs adatbázis, fájlrendszer-alapú tárolás van
  • nincs teljes role-based auth rendszer
  • nincs API verziózás
  • nincs rate limiting
  • nincs dedikált audit log
  • a frontend helper-ek részben duplikáltak
  • nagy rekordszámnál az index újraépítés drágább lehet

Refaktor backlog

  • közös frontend util modul
  • route handler-ek külön modulokba bontása
  • service layer bevezetése planner / quote logikára
  • schema validation middleware
  • közös auth middleware
  • OpenAPI / Swagger export
  • opcionális adatbázis backend

21. Fejlesztői megjegyzések

Erősségek

  • Planner és quote logika jól elválasztva
  • Fájlalapú indexelés gyors listázásokhoz
  • Atomic mentés a JSON / PDF / ICS esetén
  • Külön dashboard summary végpont
  • Naptárhoz előkészített napi bontás
  • Accepted quote → planner workflow tiszta felépítésű
  • PDF generálás elkülönül a frontendtől

Későbbi bővítési irányok

  • közös frontend utility modul a duplikált helper függvények helyett
  • szigorúbb backend validáció
  • egységesebb mezőelnevezés planner és CRM oldalon
  • esetleges adatbázisra váltás nagyobb terhelésnél
  • részletesebb auth modell külön szerepkörökkel
  • OpenAPI / Swagger alapú automatikus dokumentáció
Ez a dokumentáció alkalmas belső technikai átadásra, saját fejlesztői jegyzetnek, valamint arra is, hogy később új funkciókat azonos szerkezeti elvek mentén lehessen beépíteni.