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
| Item | Idioma | Exemplo |
|---|---|---|
| Tabelas e colunas | Português | reservas, dt_vencimento, valor_total_centavos |
| Models, Actions, Enums, DTOs | Português | Reserva, ConfirmarReservaAction, StatusParcela |
| Rotas | Português | /reservas, /pacotes/{pacote} |
| Métodos do framework | Inglês | handle(), rules(), authorize() |
| Componentes React, props, tipos | Inglês | ReservaForm, DataTableProps |
| Descrição de teste | Português | it('não confirma reserva sem estoque') |
Backend
declare(strict_types=1);em todos os arquivos; classesfinal.- 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=(oPaginator::currentPageResolvertraduz para opaginate()). - Mensagens de validação em
lang/pt_BR; dê nomes legíveis aos campos novos emvalidation.attributes. components/uié gerado pelo shadcn: não edite à mão; componha emcomponents/formoucomponents/domain.- Sem
any;tsconfigstrict. - Mudou enum no PHP?
php artisan types:generate.