Stack

Backend

API-ul PoetryHub rulează pe Nitro — framework-ul server al Nuxt — cu handler-e file-based în server/api/.

Nitro & framework

  • Nitro — server engine Nuxt; fiecare fișier server/api/foo.get.ts devine GET /api/foo
  • Preset Vercelnitro.preset: 'vercel' în nuxt.config.ts
  • CachedefineCachedEventHandler pe rute publice frecvente; headers pe /_nuxt/**
  • Runtime config — secrete server-only (databaseUrl, jwtSecret, chei OAuth)

Autentificare

Utilizatori publici

  • Înregistrare/login email + parolă (bcryptjs)
  • OAuth Google (jose pentru JWT, flow în /api/auth/google)
  • Sesiune JWT în cookie httpOnly
  • Roluri: user, editor, moderator, admin

Admin panel

  • Model separat AdminUser + login POST /api/auth/login
  • Middleware admin pe rute /admin/*

Validare & erori

  • Zod — validare input pe endpoint-uri critice
  • createError (h3) — răspunsuri HTTP cu status corect (401, 403, 404, 422)
  • Utilitare în server/utils/ — auth, slug, cache keys, home payload

Integrări externe

  • PoetryDB — import corpus clasic (POETRY_DB_URL)
  • Anthropic — enrichment opțional date poezii (ANTHROPIC_API_KEY)
  • Google OAuthNUXT_OAUTH_GOOGLE_CLIENT_ID / SECRET

Structură server

server/
├── api/           # Route handlers (public API)
├── utils/         # Shared server logic
├── middleware/    # Nitro middleware (dacă există)
└── plugins/       # Nitro plugins

Vezi referința API pentru lista completă de endpoint-uri.