2025-10-31 11:08:46 +01:00

158 lines
2.9 KiB
Markdown

# 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.
---