docs: atualiza árvore de diretórios em README e CLAUDE com estrutura pós-refatoração

- Adiciona subpastas novas em shared/components/ (brand, widgets, feedback)
- Documenta o padrão interno de feature: actions.ts, queries.ts, actions/,
  components/, hooks/, lib/
- Atualiza shared/lib/ com pastas que já existiam mas faltavam listar
  (import, notifications, storage, version)
- Atualiza shared/utils/ com fetch-json.ts (movido do shared/lib) e id.ts
- Inclui lib/ no checklist de criação de nova feature

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-05-06 18:49:44 +00:00
parent 7fdf9e2876
commit 18893bfe02
2 changed files with 70 additions and 16 deletions

View File

@@ -97,7 +97,7 @@ src/
│ ├── api/ │ ├── api/
│ ├── globals.css │ ├── globals.css
│ └── layout.tsx │ └── layout.tsx
├── features/ ├── features/ # cada feature segue: actions.ts, queries.ts, actions/, components/, hooks/, lib/
│ ├── auth/ │ ├── auth/
│ ├── landing/ │ ├── landing/
│ ├── dashboard/ │ ├── dashboard/
@@ -117,9 +117,12 @@ src/
│ └── settings/ │ └── settings/
├── shared/ ├── shared/
│ ├── components/ │ ├── components/
│ │ ├── ui/ │ │ ├── ui/ # shadcn/ui primitives
│ │ ├── navigation/ │ │ ├── navigation/ # navbar, sidebar, breadcrumbs
│ │ ├── providers/ │ │ ├── providers/ # React context providers
│ │ ├── brand/ # logos do app (logo, logo-icon, logo-text)
│ │ ├── widgets/ # widget-card, widget-empty-state, expandable-widget-card
│ │ ├── feedback/ # empty-state, status-dot, payment-success
│ │ ├── month-picker/ │ │ ├── month-picker/
│ │ ├── logo-picker/ │ │ ├── logo-picker/
│ │ ├── calculator/ │ │ ├── calculator/
@@ -134,34 +137,56 @@ src/
│ │ ├── calculator/ │ │ ├── calculator/
│ │ ├── categories/ │ │ ├── categories/
│ │ ├── email/ │ │ ├── email/
│ │ ├── import/
│ │ ├── installments/ │ │ ├── installments/
│ │ ├── invoices/ │ │ ├── invoices/
│ │ ├── logo/ │ │ ├── logo/
│ │ ├── notifications/
│ │ ├── payers/ │ │ ├── payers/
│ │ ├── schemas/ │ │ ├── schemas/
│ │ ├── storage/
│ │ ├── transfers/ │ │ ├── transfers/
│ │ ├── types/ │ │ ├── types/
│ │ ├── version/
│ │ └── db.ts │ │ └── db.ts
│ └── utils/ │ └── utils/
│ ├── period/ │ ├── period/
│ ├── calculator.ts
│ ├── calendar.ts
│ ├── category-colors.ts
│ ├── currency.ts │ ├── currency.ts
│ ├── date.ts │ ├── date.ts
│ ├── export-branding.ts
│ ├── fetch-json.ts
│ ├── financial-dates.ts │ ├── financial-dates.ts
│ ├── percentage.ts │ ├── icons.tsx
│ ├── category-colors.ts │ ├── id.ts
│ ├── calendar.ts │ ├── initials.ts
│ ├── math.ts │ ├── math.ts
│ ├── number.ts │ ├── number.ts
│ ├── percentage.ts
│ ├── string.ts │ ├── string.ts
── initials.ts ── ui.ts
│ ├── icons.tsx
│ ├── export-branding.ts
│ ├── ui.ts
│ └── calculator.ts
└── db/ └── db/
└── schema.ts └── schema.ts
``` ```
### Estrutura interna padrão de uma feature
Toda feature em `src/features/<nome>/` segue:
```text
<feature>/
├── actions.ts # entry point de Server Actions (barrel quando há actions/)
├── queries.ts # entry point de leitura do banco
├── actions/ # (opcional) Server Actions divididas por domínio quando o volume cresce
├── components/ # componentes de UI da feature
├── hooks/ # React hooks específicos da feature
└── lib/ # helpers, types, sub-queries e constantes internas
```
`actions.ts` e `queries.ts` são as portas de entrada da feature. Tudo que é helper interno fica em `lib/`. Componentes e hooks ficam nas pastas com nome óbvio.
--- ---
## Import Patterns ## Import Patterns
@@ -299,9 +324,11 @@ export async function fetchData(userId: string, period: string) {
2. Criar a feature em `src/features/<feature>/` 2. Criar a feature em `src/features/<feature>/`
3. Separar: 3. Separar:
- `components/` - `components/`
- `queries.ts` - `queries.ts` (entry point de leitura)
- `actions.ts` - `actions.ts` (entry point de Server Actions; vira barrel quando crescer e migrar para `actions/`)
- `types.ts` ou `schemas.ts` quando fizer sentido - `lib/` para helpers internos, sub-queries por tópico, types e constantes da feature
- `types.ts` ou `schemas.ts` quando fizer sentido (alternativa a `lib/`)
- `hooks/` quando houver hooks específicos da feature
4. Extrair para `src/shared/` tudo que for reutilizavel 4. Extrair para `src/shared/` tudo que for reutilizavel
5. Atualizar navegacao e `revalidateForEntity()` se a feature tiver CRUD 5. Atualizar navegacao e `revalidateForEntity()` se a feature tiver CRUD
6. Rodar: 6. Rodar:

View File

@@ -507,7 +507,18 @@ openmonetis/
│ │ └── auth/ # Formulários de autenticação │ │ └── auth/ # Formulários de autenticação
│ │ │ │
│ ├── shared/ # Código reutilizado entre features │ ├── shared/ # Código reutilizado entre features
│ │ ├── components/ # UI compartilhada (shadcn/ui, navigation, skeletons...) │ │ ├── components/ # UI compartilhada
│ │ │ ├── ui/ # shadcn/ui primitives
│ │ │ ├── navigation/ # navbar, sidebar, breadcrumbs
│ │ │ ├── brand/ # logos do app
│ │ │ ├── widgets/ # widget-card e variantes
│ │ │ ├── feedback/ # empty-state, status-dot, payment-success
│ │ │ ├── entity-avatar/ # avatares de categoria/estabelecimento
│ │ │ ├── month-picker/ # seletor de período
│ │ │ ├── logo-picker/ # seletor de logos
│ │ │ ├── calculator/ # calculadora de cálculos rápidos
│ │ │ ├── skeletons/ # loading skeletons
│ │ │ └── providers/ # React context providers
│ │ ├── hooks/ # React hooks globais │ │ ├── hooks/ # React hooks globais
│ │ ├── lib/ # Helpers de domínio (auth, db, payers, schemas, email...) │ │ ├── lib/ # Helpers de domínio (auth, db, payers, schemas, email...)
│ │ └── utils/ # Utilitários (currency, date, period, math, string...) │ │ └── utils/ # Utilitários (currency, date, period, math, string...)
@@ -523,6 +534,22 @@ openmonetis/
└── proxy.ts # Middleware (auth + multi-domínio) └── proxy.ts # Middleware (auth + multi-domínio)
``` ```
### Estrutura interna de uma feature
Toda feature em `src/features/<nome>/` segue o mesmo padrão:
```
<feature>/
├── actions.ts # Server Actions (entry point — barrel re-export quando há actions/)
├── queries.ts # Funções de leitura do banco (entry point)
├── actions/ # (opcional) Server Actions divididas por domínio quando o volume cresce
├── components/ # Componentes de UI da feature
├── hooks/ # React hooks específicos da feature
└── lib/ # Helpers, types, sub-queries e constantes
```
A regra é: `actions.ts` e `queries.ts` são as portas de entrada da feature. Tudo que é helper interno fica em `lib/`. Componentes e hooks ficam nas pastas com nome óbvio.
--- ---
## 🤝 Contribuindo ## 🤝 Contribuindo