Lekce 04.6: Stavba nové funkce (Build a Feature)
🧠 Mentální model & teoretický rozbor
Kompletní inženýrský cyklus pro stavbu nové produkční funkce propojuje všechny dosud probrané principy do uceleného řetězce:
INŽENÝRSKÝ CYKLUS TVORBY FUNKCE:┌─────────────────────────────────────────────────────────────┐│ 1. KONTRAKT & TYPY (Definice rozhraní a Zod schémat) │├─────────────────────────────────────────────────────────────┤│ 2. SELHÁVAJÍCÍ TEST (TDD Red: ověření požadavků) │├─────────────────────────────────────────────────────────────┤│ 3. MINIMÁLNÍ IMPLEMENTACE (TDD Green: čistý funkční kód) │├─────────────────────────────────────────────────────────────┤│ 4. DETERMINISTICKÁ VALIDACE (Linter, Kompilátor, Test) │├─────────────────────────────────────────────────────────────┤│ 5. CLEAN COMMIT & FLUSH (Git commit + /clear pro další úkol)│└─────────────────────────────────────────────────────────────┘Pokud přeskočíte krok 1 nebo 2, vracíte se zpět k náhodnému vibe codingu.
🏢 Realistický scénář z praxe
Úkol: Přidat do SaaS aplikace možnost vygenerovat jednorázový přihlašovací odkaz (Magic Link):
- Typy: Definujeme rozhraní
CreateMagicLinkInputa výstupMagicLinkResult. - Test: Napíšeme test ověřující generování kryptograficky bezpečného náhodného tokenu s expirací 15 minut a uložením hashe do DB.
- Implementace: Agent napíše funkci s využitím nativního modulu
crypto. - Validace: Spustíme
vitestatsc --noEmit. - Commit: Změna je uložena s konvenční zprávou
feat(auth): add magic link generation.
💻 Konkrétní ukázky kódu & promptů
Ukázka definice typu a Zod schématu (src/schemas/magic-link.ts):
import { z } from 'zod';
export const MagicLinkInputSchema = z.object({ email: z.string().email('Neplatný formát e-mailu'), redirectUrl: z.string().url().optional()});
export type MagicLinkInput = z.infer<typeof MagicLinkInputSchema>;
export interface MagicLinkResult { token: string; expiresAt: Date;}Inženýrský prompt pro agenta:
Kontext: Stavíme funkci pro generování Magic Linku podle schématu src/schemas/magic-link.ts.
Kroky:1. Prohlédni si test src/services/__tests__/magic-link.test.ts (je ve stavu Red).2. Implementuj funkci generateMagicLink v src/services/magic-link.ts.3. Token generuj přes `crypto.randomBytes(32).toString('hex')`.4. Expiraci nastav na aktuální čas + 15 minut.5. Spusť test: `npx vitest run src/services/__tests__/magic-link.test.ts`.⚠️ Analýza selhání & Anti-patterns
Chyba: Snaha postavit frontend i backend v jednom jediném promptu
Vývojář zadá: „Vytvoř mi Magic Link přihlašování – UI komponentu, API endpoint, databázovou tabulku a posílání e-mailů přes Resend.“
- Agent se zahltí, vygeneruje poloviční řešení na 8 souborech a nic z toho nebude otestované.
- Pravidlo: Každá vrstva (DB ➔ Service ➔ API ➔ UI) je samostatný inženýrský krok s vlastním commitem!
🛠️ Inženýrský postup krok za krokem (Playbook)
- Vytvořte Git branch:
git checkout -b feat/magic-link. - Definujte typy a rozhraní.
- Napište selhávající test.
- Nechte agenta test zprovoznit.
- Zkontrolujte kód v IDE a commitněte.
🧪 Praktické cvičení (Hands-on Lab)
Úkol:
Postavte jednoduchou novou funkci podle tohoto 5krokového protokolu ve svém projektu.
Kroky:
- Zvolte malou utilitu (např. formátovač telefonních čísel).
- Vytvořte test
phone.test.ts. - Nechte agenta kód implementovat.
- Ověřte zelený test a proveďte commit.