feat: sessão #3 — lib (db/auth/email/validations), API routes, NextAuth v5, middleware, páginas account/shelters/shelter-dashboard, Prisma v7 fix

This commit is contained in:
2026-05-21 09:01:59 +01:00
parent e6ebc0909c
commit e62dc9d6e6
44 changed files with 5341 additions and 273 deletions

46
app/shelter/layout.tsx Normal file
View File

@@ -0,0 +1,46 @@
import type { Metadata } from 'next';
import Link from 'next/link';
import { PawPrint, Home } from 'lucide-react';
export const metadata: Metadata = {
title: 'Painel do Canil | PawLink',
description: 'Área de gestão do canil na plataforma PawLink.',
};
export default function ShelterLayout({ children }: { children: React.ReactNode }) {
return (
<div style={{ minHeight: '100dvh', display: 'flex', flexDirection: 'column', background: 'var(--cream)' }}>
{/* Header do painel */}
<header
style={{
height: '60px',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
padding: '0 var(--space-5)',
background: 'var(--linen)',
borderBottom: '1px solid var(--parchment)',
position: 'sticky',
top: 0,
zIndex: 50,
}}
>
<Link href="/shelter/dashboard" style={{ display: 'flex', alignItems: 'center', gap: '8px', textDecoration: 'none' }}>
<PawPrint size={20} style={{ color: 'var(--terra)' }} />
<span style={{ fontFamily: 'var(--font-display)', fontStyle: 'italic', fontWeight: 700, fontSize: '17px', color: 'var(--terra)' }}>
PawLink Canil
</span>
</Link>
<Link
href="/"
style={{ display: 'flex', alignItems: 'center', gap: '6px', fontFamily: 'var(--font-body)', fontSize: '13px', color: 'var(--soil-mid)', textDecoration: 'none' }}
>
<Home size={14} />
Site público
</Link>
</header>
<main style={{ flex: 1 }}>{children}</main>
</div>
);
}