Regras do projeto

As regras invioláveis (cada uma nasceu de um defeito do sistema antigo), a convenção de idioma e os padrões de backend e frontend.

Violar qualquer regra abaixo é motivo para recusar o PR. Cada uma existe porque o sistema antigo a violou e isso custou caro.

Idioma: domínio em português, framework em inglês

ItemIdiomaExemplo
Tabelas e colunasPortuguêsreservas, dt_vencimento, valor_total_centavos
Models, Actions, Enums, DTOsPortuguêsReserva, ConfirmarReservaAction, StatusParcela
RotasPortuguês/reservas, /pacotes/{pacote}
Métodos do frameworkInglêshandle(), rules(), authorize()
Componentes React, props, tiposInglêsReservaForm, DataTableProps
Descrição de testePortuguêsit('não confirma reserva sem estoque')

Backend

  • declare(strict_types=1); em todos os arquivos; classes final.
  • Sempre DTO tipado. Nunca Model::create($request->all()).
  • DB::transaction() em operações que tocam mais de uma tabela.
  • Estoque com lock pessimista (lockForUpdate).
  • Efeitos colaterais (parcelas, contrato, e-mail) por evento de domínio.
  • IDs nas URLs são cifrados (CifraIdNaUrl): use o route key do model, nunca o ID numérico, ao montar URLs.
  • Migration nova sempre com FK, índice e CHECK dos enums.

Frontend

  • react-hook-form + zod; o schema espelha o Form Request.
  • Tabelas com DataTable (TanStack) e estado na URL (use-server-table). A página vai em ?pagina= (o Paginator::currentPageResolver traduz para o paginate()).
  • Mensagens de validação em lang/pt_BR; dê nomes legíveis aos campos novos em validation.attributes.
  • components/ui é gerado pelo shadcn: não edite à mão; componha em components/form ou components/domain.
  • Sem any; tsconfig strict.
  • Mudou enum no PHP? php artisan types:generate.

Nesta página