Update Denkweise authored by Ali Khavari's avatar Ali Khavari
✅ 1. Backend that accepts and validates requests
You implemented POST /api/request with Zod validation
---
title: Denkweise
---
✅ 1. Probleme analysieren – Beispielhafte Denkweise
🎯 Problem: Anfragen und Kunden laufen getrennt in SaaS-Tools – das soll zusammengeführt werden.
Analyse & Lösung:
Handles customer creation and links it to an order
Kunden und Aufträge gehören logisch zusammen → also relationales Modell.
✅ 2. Database with customer and order tables
Prisma models Customer and Order are working
Viele Kunden können mehrere Aufträge haben ⇒ OneToMany-Relation (→ Prisma)
Data is correctly stored and viewed via Prisma Studio
Status eines Auftrags muss filterbar sein ⇒ status als Text oder Enum
✅ 3. Frontend with clear data visualization
Dashboard shows total orders and customer count
Eingabedaten können fehlerhaft sein ⇒ Validierung mit zod
UI is built using React (and shadcn/ui, from the look of it ✅)
💡 Mitgedacht: Ich speichere nur neue Kunden, wenn die E-Mail noch nicht existiert ⇒ verhindert Dubletten.
✅ 4. Separate routes to fetch data
GET /api/orders
✅ 2. Umsetzung mit technischer Tiefe
Beispiel: POST /api/request
`// 1. Validierung
const parsed = requestSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({ error: 'Ungültige Daten', details: parsed.error.flatten() });
}
GET /api/customers
// 2. Kunde suchen oder anlegen
let customer = await prisma.customer.findUnique({ where: { email } });
if (!customer) {
customer = await prisma.customer.create({ data: { name, email } });
}
✅ You've successfully tested both via PowerShell
\ No newline at end of file
// 3. Auftrag anlegen
const order = await prisma.order.create({
data: { status: 'Wartet auf Angebot', customerId: customer.id },
});
`
✅ Kommentiert.
✅ Fehlerbehandlung.
✅ Repräsentiert Mitdenken: Nur ein Auftrag, wenn Daten gültig + Kunde bekannt.
✅ 3. Frontend durchdacht umgesetzt
Tabs statt Dropdowns: Schnell sichtbar & klickbar
Fehlerhafte Daten? → Backend meldet 400 mit flatten() → Frontend könnte Felder markieren
"Alle"-Tab bleibt erhalten, damit der Nutzer schnell Gesamtüberblick bekommt
💡 Mitgedacht: Eine Hilfsfunktion renderOrders(status) vermeidet doppelten Code für Kartenanzeige.
## 🧠 Gedanken zur Umsetzung
- Ich habe die Datenmodelle so aufgebaut, dass Kunden und Aufträge klar getrennt, aber logisch verbunden sind.
- Die API prüft auf fehlerhafte Daten mit Zod und gibt sinnvolle Fehlermeldungen zurück – im echten UI könnte man diese anzeigen.
- Die Tab-Ansicht ermöglicht es, den Statusfluss der Aufträge sofort zu erkennen („Wartet“, „Abgeschickt“, „Angenommen“).
- Alle Anfragen werden zusätzlich im „Alle“-Tab angezeigt – so bleibt der Überblick erhalten.