JobPilot

REST API

Architekturdokumentation

JobPilot ist eine REST-API zur Verwaltung von Bewerbungsprozessen. Das Backend basiert auf Node.js/Express mit einer SQLite-Datenbank. Die folgende Dokumentation zeigt Komponentendiagramm und verfeinertes Klassendiagramm.

Komponentendiagramm

Zeigt die Systemarchitektur mit ihren Komponenten, Schnittstellen und Abhängigkeiten.

«subsystem» Frontend «component» React App localhost:5173 «component» Express Server — :3001 «component» Middleware Stack cors · body-parser · json «component» API Router GET /api/bewerbungen GET /api/bewerbungen/:id POST /api/bewerbungen PUT /api/bewerbungen/:id DELETE /api/bewerbungen/:id GET /api/statistiken GET /api /health «component» database.js / · /health · /api SQLite DB «table» bewerbungen id INTEGER PK position firma · status … HTTP/CORS sqlite3 — — — → Datenbankverbindung (async callback) ———→ Komponentenabhängigkeit / HTTP

Verfeinertes Klassendiagramm

Da Express keine klassische OOP-Architektur erzwingt, zeigt das Diagramm die logischen Module als Klassen mit Attributen, Methoden und deren Beziehungen.

«module» App - app: Express - PORT: number = 3001 + use(middleware) + get(path, handler) + post(path, handler) + put(path, handler) + delete(path, handler) + listen(port, cb) - setupMiddleware() - registerRoutes() «module» Database - db: sqlite3.Database - DB_PATH: string + all(sql, params, cb) + get(sql, params, cb) + run(sql, params, cb) - initSchema(): void - resetSequence(): void «controller» BewerbungenController - db: Database + getAll(req, res): void ↳ query: status?: string + getById(req, res): void ↳ params: id + create(req, res): void ↳ validates: pos, firma, status, datum + update(req, res): void ↳ full replace, params: id + delete(req, res): void ↳ resets ID-seq on empty table + getStatistiken(req, res): void ↳ GROUP BY status → StatistikDTO + healthCheck(req, res): void + apiInfo(req, res): void ↳ returns endpoint list «entity» Bewerbung + id: INTEGER (PK, AI) + position: TEXT NN + firma: TEXT NN + status: TEXT NN + datum: TEXT NN + standort?: TEXT + ansprechpartner?: TEXT + notizen?: TEXT + bewerbungsart?: TEXT + startdatum?: TEXT + link?: TEXT + created_at: TIMESTAMP + updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP status ∈ {beworben, stufe_weiter, angenommen, abgelehnt, keine_antwort} «DTO» StatistikDTO + beworben: number + stufe_weiter: number + angenommen: number + abgelehnt: number + keine_antwort: number + gesamt: number aggregiert via GROUP BY status fehlende Werte default: 0 uses injects uses returns creates maps rows → NN = NOT NULL | PK = Primary Key | AI = AUTO INCREMENT | ? = optional | + public | - private ——→ Abhängigkeit / uses | - - → inject / maps | · · → creates / returns

API-Endpunkte

Methode Pfad Beschreibung Request Body / Query Response
GET /api/bewerbungen Alle Bewerbungen auflisten ?status=beworben 200 Bewerbung[]
GET /api/bewerbungen/:id Einzelne Bewerbung 200 Bewerbung | 404
POST /api/bewerbungen Neue Bewerbung erstellen position, firma, status, datum (NN) 201 {id, message} | 400
PUT /api/bewerbungen/:id Bewerbung aktualisieren alle Felder (full replace) 200 {message} | 404
DELETE /api/bewerbungen/:id Bewerbung löschen 200 {message} | 404
GET /api/statistiken Bewerbungsstatistiken 200 StatistikDTO
GET /health Health Check 200 {status: "ok"}

Datenmodell

bewerbungen — Pflichtfelder
idINTEGERPK · AUTOINCREMENT
positionTEXTNOT NULL
firmaTEXTNOT NULL
statusTEXTNOT NULL
datumTEXTNOT NULL
created_atTIMESTAMPDEFAULT NOW
updated_atTIMESTAMPDEFAULT NOW
bewerbungen — Optionale Felder
standortTEXTnullable
ansprechpartnerTEXTnullable
notizenTEXTnullable
bewerbungsartTEXTnullable
startdatumTEXTnullable
linkTEXTnullable · URL
Status-Enum (Werte)
beworbenInitiale Bewerbung verschickt
stufe_weiterIn einem nächsten Schritt
angenommenAngebot erhalten/akzeptiert
abgelehntAbsage erhalten
keine_antwortKeine Rückmeldung
Anmerkungen zur Architektur
⚠ PUT ist Full-Replace Kein PATCH-Endpunkt vorhanden. Alle Felder müssen beim Update mitgeschickt werden.
⚠ ID-Reset bei leerer Tabelle Nach DELETE aller Einträge wird sqlite_sequence zurückgesetzt.
✓ CORS konfiguriert Origin localhost:5173 explizit erlaubt (Vite Dev Server).