// Données de la vue publique : le portfolio partagé + ses projets figés. // Public (hors mot de passe), mais uniquement si publicShare est actif et // qu'un instantané figé existe. On ne sert jamais le contenu live. import { getPortfolio } from '../../lib/portfolio-store' import type { Portfolio, Project } from '~~/types' export default defineEventHandler(async (event): Promise<{ portfolio: Portfolio; projects: Record }> => { const id = getRouterParam(event, 'id') ?? '' if (!/^[\w-]+$/.test(id)) { throw createError({ statusCode: 400, statusMessage: 'Identifiant invalide' }) } const portfolio = await getPortfolio(id) if (!portfolio?.publicShare || !portfolio.frozenContent) { throw createError({ statusCode: 404, statusMessage: 'Portfolio introuvable' }) } return { portfolio, projects: portfolio.frozenContent.projects } })