Files
Lorenzo SanesiandClaude Opus 5.5 b83ce039fb
Deploy stack su Proxmox / deploy (push) Failing after 3s
Piattaforma ITI TECHNOLOGY: monorepo, Medusa, API, sito, area riservata e deploy
Monorepo npm con apps/public (Angular SSR), apps/private (Angular SPA),
apps/api (Fastify), packages/shared e packages/styles; Medusa 2.21 in medusa/;
infrastruttura Docker (Postgres PostGIS+pgvector, Redis, Caddy, backup) e
workflow Gitea Actions per il deploy via SSH a ogni push su master.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jQyT6dR9czzGwqb7FkG6u
2026-10-20 09:30:48 +02:00

20 lines
1.1 KiB
Markdown

# 17 — API: blog
Leggi `CLAUDE.md`.
## Obiettivo
Blog con contenuti markdown, ricerca full-text e gestione admin.
## Cosa fare
- Pubblico: `GET /blog/posts` (paginazione, categoria, `q` per ricerca full-text con `websearch_to_tsquery('italian', unaccent(q))` e ordinamento per rank), `GET /blog/posts/:slug`, `GET /blog/categories`. Solo post `published` con `published_at <= now()`.
- Il dettaglio restituisce sia `content_md` sia `content_html` renderizzato con `marked` e **sanitizzato** (`sanitize-html` con whitelist).
- Admin: CRUD post e categorie, slug generato dal titolo e univoco, cambio stato draft/published, preview (`POST /admin/blog/preview` riceve markdown e restituisce HTML sanitizzato).
- `GET /sitemap-data` con slug e date di aggiornamento (servirà al frontend SSR per la sitemap).
## Criteri di accettazione
- La ricerca "pompa calore" trova un post intitolato "Pompe di calore: guida" (stemming italiano + unaccent).
- Markdown con `<script>` o `onerror=` viene ripulito.
- I draft non sono visibili via API pubblica.
- Test per ricerca, sanitizzazione e permessi admin.
- `CLAUDE.md` aggiornato.