2.9 KiB
2.9 KiB
Order Management System (OMS)
Ein modernes Order Management System für konfigurierbare Produkte, entwickelt als White-Label-Lösung für On-Premise-Hosting.
Übersicht
Dieses System wurde für eine Coding Challenge entwickelt und zeigt:
- RESTful API mit Express.js und TypeScript
- Eingabevalidierung mit Zod
- SQLite3 Datenbank mit automatischer Initialisierung
- Event-Driven Architecture (simuliert für Demo)
- React Frontend mit Material UI
- Docker-Container für einfaches Deployment
- Unit-Tests mit Jest
Architektur
Siehe:
- ARCHITEKTUR.md - Technische Übersicht mit Diagrammen
- docs/aufgabe1-architektur.md - Ausführliche Antwort zu Aufgabe 1 mit Begründungen
Schnellstart
Voraussetzungen
- Node.js 18+
- npm
- Docker (optional)
Installation
# Alle Dependencies installieren
npm run install:all
# Datenbank-Ordner wird automatisch erstellt beim ersten Start
Entwicklung
# Terminal 1: Backend
npm run dev
# Terminal 2: Frontend
npm run dev:frontend
- Backend: http://localhost:3990
- Frontend: http://localhost:3980
Mit Docker
docker compose up
Tests
npm test
API Dokumentation
GET /orders
Ruft alle Bestellungen ab.
Response (200):
{
"success": true,
"data": [...],
"count": 5
}
POST /orders
Erstellt eine neue Bestellung.
Request:
{
"customerId": "CUST1",
"customerName": "Lui Denkwerk",
"customerEmail": "lui@test.com",
"items": [
{
"productId": "TISCH1",
"quantity": 1,
"price": 29.99
}
],
"shippingAddress": {
"street": "yxcstraße 1",
"city": "Grevenbroich",
"postalCode": "41515",
"country": "DE"
}
}
Response (201):
{
"success": true,
"data": {
"id": 1,
"orderNumber": "Order-1234567890-123",
"totalAmount": 299.99,
"status": "pending",
...
}
}
Features
Backend
- Express.js mit TypeScript
- Zod für Runtime-Validierung
- SQLite3 (zero-config, ideal für On-Premise)
- Event-System (simuliert, in Production würde ich RabbitMQ oder Kafka nutzen)
- Jest Tests
Frontend
- React 18 mit TypeScript
- Material UI 5 für schnelle UI-Entwicklung
- Vite als Build-Tool
- Client-Side Validierung
- Error-Handling
- Zwei Views: Bestellung erstellen + Bestellübersicht
Deployment
- Docker & Docker Compose
- Nginx als Reverse Proxy für Frontend
- Isolierte Container für Backend/Frontend
Technische Entscheidungen
SQLite statt PostgreSQL: Für die Challenge ausreichend, leicht zu deployen, keine externe DB nötig. In Production würde ich auf PostgreSQL wechseln.
Event-Simulation: Events werden mit Console-Logs simuliert.
Keine Auth: Nicht Teil der Challenge. In Production JWT oder OAuth implementieren.
Material UI: Schnelle UI-Entwicklung mit professionellem Look ohne viel CSS schreiben zu müssen.