Funcionalidade em Next.js App Router com Server Actions
Crie uma funcionalidade completa em Next.js App Router com Server Actions, validação com Zod, estados de carregamento e de erro, e testes. Pensado para ChatGPT, Claude e Microsoft Copilot. Inclui 5 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Avançado · Código · Pendente de revisão editorial
Prompt
Age como um engenheiro frontend sénior especializado em Next.js App Router, React Server Components e TypeScript estrito.
Preciso de implementar a funcionalidade «{{feature}}» numa aplicação Next.js {{next_version}}.
Camada de dados: {{data_layer}}.
Autenticação: {{auth}}.
Regras de negócio e campos do formulário: {{rules}}.
Entrega, por esta ordem:
1. A árvore de ficheiros dentro de `app/` e `lib/` (rotas, `page.tsx`, `loading.tsx`, `error.tsx`, componentes de cliente e de servidor), explicando o que é Server Component e o que é Client Component, e porquê.
2. Um esquema de validação Zod partilhado entre cliente e servidor, com mensagens de erro claras para o utilizador.
3. A Server Action completa (`'use server'`): verificação de sessão e de permissões, validação, escrita na base de dados, `revalidatePath` ou `revalidateTag`, e um objeto de resposta tipado `{ ok, errors, message }`.
4. O formulário com `useActionState` e `useFormStatus` (no Next.js 14 com React 18, usa `useFormState` de `react-dom` em vez de `useActionState`): erros por campo, botão desativado durante o envio e foco movido para o primeiro campo inválido.
5. Tratamento de erros: erros esperados vs. inesperados, o que fica registado em log e o que o utilizador vê.
6. Testes: testes unitários do esquema e da action (com a camada de dados simulada) e um teste end-to-end com Playwright para o caminho feliz.
7. Uma lista de verificação de segurança: CSRF, autorização no servidor, limites de tamanho do payload e dados sensíveis que nunca devem chegar ao cliente.
Restrições:
- TypeScript estrito, sem `any`.
- Não inventes nomes de tabelas nem variáveis de ambiente: usa [PREENCHER] se faltar alguma coisa.
- Se te faltar informação necessária para uma decisão importante, pergunta-me antes de escrever código.Como utilizar
- Descreva a funcionalidade e as regras de negócio com o máximo de detalhe possível.
- Indique a sua versão do Next.js e como guarda os dados (Prisma, Drizzle, Supabase…).
- Cole o prompt no seu assistente e copie os ficheiros para o projeto, um a um.
- Execute os testes e substitua todos os marcadores [PREENCHER] antes de publicar.
Exemplo de utilização
Funcionalidade: criar e editar reservas de salas de reuniões · Next.js 15 · Camada de dados: PostgreSQL com Prisma · Autenticação: Auth.js com perfis de administrador e colaborador.
Exemplo de resultado
3. Server Action app/bookings/actions.ts
Neste exemplo, o esquema Zod fica em lib/validation/booking.ts (um ficheiro 'use server' só pode exportar funções assíncronas). O nome do modelo Prisma booking é um pressuposto: [PREENCHER] se o seu for diferente.
'use server';
import { revalidatePath } from 'next/cache';
import { auth } from '@/auth';
import { prisma } from '@/lib/prisma';
import { bookingSchema } from '@/lib/validation/booking';
export type ActionState = {
ok: boolean;
errors?: Partial<Record<'roomId' | 'start' | 'end', string[]>>;
message?: string;
};
export async function createBooking(_prev: ActionState, formData: FormData): Promise<ActionState> {
const session = await auth();
if (!session?.user?.id) return { ok: false, message: 'Inicie sessão para reservar uma sala.' };
const parsed = bookingSchema.safeParse(Object.fromEntries(formData));
if (!parsed.success) return { ok: false, errors: parsed.error.flatten().fieldErrors };
const { roomId, start, end } = parsed.data;
const overlap = await prisma.booking.findFirst({
where: { roomId, start: { lt: end }, end: { gt: start } },
});
if (overlap) return { ok: false, errors: { start: ['A sala já está reservada nesse horário.'] } };
await prisma.booking.create({ data: { roomId, start, end, userId: session.user.id } });
revalidatePath('/bookings');
return { ok: true, message: 'Reserva criada.' };
}
A sessão e as sobreposições são sempre verificadas no servidor; a validação no cliente serve apenas para dar feedback rápido. Em produção, reforce a verificação com uma restrição de exclusão no PostgreSQL…
Dados-chave
- Categoria
- Programação e desenvolvimento · Next.js
- Tipo de resultado
- Código
- Nível
- Avançado
- Pensado para
- ChatGPT, Claude e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Funcionalidade, Versão do Next.js, Camada de dados, Autenticação e Regras e campos
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Porquê usar Server Actions em vez de uma rota de API?
Para formulários e mutações internas da sua própria aplicação, as Server Actions significam menos código, integram-se com a revalidação da cache e funcionam sem JavaScript no cliente. Se terceiros consumirem a operação, uma rota de API continua a ser a melhor escolha.
A validação no cliente é suficiente?
Não. A validação no cliente melhora a experiência, mas a Server Action tem de voltar a validar e a verificar as permissões, porque qualquer pessoa a pode chamar diretamente.
Para que serve este prompt?
Crie uma funcionalidade completa em Next.js App Router com Server Actions, validação com Zod, estados de carregamento e de erro, e testes.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Funcionalidade, Versão do Next.js, Camada de dados, Autenticação e Regras e campos). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.