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

  1. Descreva a funcionalidade e as regras de negócio com o máximo de detalhe possível.
  2. Indique a sua versão do Next.js e como guarda os dados (Prisma, Drizzle, Supabase…).
  3. Cole o prompt no seu assistente e copie os ficheiros para o projeto, um a um.
  4. 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.

Prompts relacionados