challange29102025/docs/ARCHITEKTUR.md
2025-10-31 11:13:33 +01:00

139 lines
2.8 KiB
Markdown

# Architektur-Übersicht
Order Management System - Systemdesign und Entscheidungen
## Komponenten
### 1. API Layer (Backend)
- **Framework**: Express.js mit TypeScript
- **Port**: 3990
- **Validierung**: Zod für Runtime-Checks
- **API-Endpunkte**:
- `POST /orders` - Neue Bestellung erstellen
### 2. Datenhaltung
- **Datenbank**: SQLite3
- **Pfad**: `./data/orders.db`
- **Schema**:
```sql
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
orderNumber TEXT UNIQUE,
customerId TEXT,
customerName TEXT,
customerEmail TEXT,
items TEXT, -- JSON to Convert
shippingAddress TEXT, -- JSON to Convert
totalAmount REAL,
status TEXT,
createdAt TEXT
);
```
**Warum SQLite?**
- Zero-config, einfach zu deployen
- Keine externe DB nötig für On-Premise
- Für Production würde ich auf PostgreSQL wechseln
### 3. Event-System
Simuliert mit Console-Logs. Events werden an folgende Systeme geschickt:
- Versand-Service
- Lager-System
- E-Mail-Service
### 4. Frontend
- **Framework**: React 18 + TypeScript
- **UI Library**: Material UI 5
- **Build**: Vite
## Deployment-Strategie
### Docker Compose
Zwei Container:
1. **Backend** (Node.js)
2. **Frontend** (Nginx)
### On-Premise Deployment
1. `docker compose up` auf Kundenserver
2. SQLite DB im Volume gemounted
3. Kein externes Setup nötig
### Skalierung (für später)
- **Horizontal**: Mehrere Backend-Instanzen mit Load Balancer
- **DB**: PostgreSQL
- **Cache**: Redis für Sessions/Performance
## Sicherheit
### Aktuell implementiert:
- Input-Validierung mit Zod
- CORS aktiviert
- SQL Injection durch Prepared Statements verhindert
### Für Production:
- [ ] JWT Authentication
- [ ] Rate Limiting (express-rate-limit)
- [ ] API Keys für Service-to-Service (X-API-Key)
## Monitoring & Logging
### Aktuell:
- Console Logs
- Error Stack Traces
## Fehlerhandling
### API-Level
```typescript
try {
// validation
// business logic
} catch (error) {
if (error.name === 'ZodError') {
return 400 // Bad Request
}
return 500 // Internal Error
}
```
### DB-Level
- Promises mit try/catch
### Frontend
- Axios error handling
- User feedback mit Material UI Alerts
- Form validation
## Design-Entscheidungen
### TypeScript
**Pro**: Type Safety, Enteprise Version von Javascript :P
**Contra**: Etwas mehr Setup
### SQLite vs PostgreSQL
**Gewählt**: SQLite für einfaches Setup
**Grund**: Challenge-Kontext, On-Premise ohne Komplexität
**Migration**: In Production auf PostgreSQL umstellen
### Material UI vs Custom CSS
**Gewählt**: Material UI
**Grund**: Schnelle Entwicklung, professionelles Aussehen
### Event-Simulation
**Aktuell**: Console Logs
**Grund**: ausreichend für aufgabe
## Testing
### Backend
```bash
npm test
```
- Unit Tests mit Jest
- Integration Tests mit Supertest
- Mocked DB für schnelle Tests