# 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](./ARCHITEKTUR.md) - Technische Übersicht mit Diagrammen - [docs/aufgabe1-architektur.md](./docs/aufgabe1-architektur.md) - Ausführliche Antwort zu Aufgabe 1 mit Begründungen ## Schnellstart ### Voraussetzungen - Node.js 18+ - npm - Docker (optional) ### Installation ```bash # Alle Dependencies installieren npm run install:all # Datenbank-Ordner wird automatisch erstellt beim ersten Start ``` ### Entwicklung ```bash # Terminal 1: Backend npm run dev # Terminal 2: Frontend npm run dev:frontend ``` - Backend: http://localhost:3990 - Frontend: http://localhost:3980 ### Mit Docker ```bash docker compose up ``` ### Tests ```bash npm test ``` ## API Dokumentation ### GET /orders Ruft alle Bestellungen ab. **Response (200):** ```json { "success": true, "data": [...], "count": 5 } ``` ### POST /orders Erstellt eine neue Bestellung. **Request:** ```json { "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):** ```json { "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. ---