158 lines
2.9 KiB
Markdown
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.
|
|
|
|
---
|
|
|