# Arquitetura — Shop Compras

## Diagnóstico do legado

O diretório pai contém PHP procedural com PDO/MySQL, jQuery e lojas copiadas por pasta. Não há framework, Composer, migrations, testes ou repositório Git detectável. A autenticação usa sessão PHP e uma função de criptografia própria. O legado permanece intocado e será tratado como fonte de regras para uma migração posterior.

## Arquitetura alvo

Monólito modular em Next.js/TypeScript, PostgreSQL e Prisma. O App Router serve o institucional, painéis e sites públicos. Módulos internos ficam separados em autenticação, tenancy, planos, catálogo, comercial e administração. Filas e S3 entram quando houver tarefas assíncronas/uploads reais.

O modelo multitenant inicial usa banco e schema compartilhados. Toda entidade de negócio possui `tenantId`; chaves naturais são únicas dentro do tenant e índices começam por `tenantId`. Serviços recebem o tenant do contexto autenticado ou do host resolvido no servidor. IDs enviados pelo cliente nunca escolhem o tenant.

## Domínios

`ROOT_DOMAIN` define o domínio da plataforma. Um host `slug.ROOT_DOMAIN` resolve o slug; domínios próprios são consultados em `Domain.hostname`. O host é normalizado, portas são removidas e hosts não cadastrados falham fechados. A ativação de domínio próprio exige verificação DNS antes de `VERIFIED`; SSL será automatizado pela infraestrutura de hospedagem numa fase posterior.

## Autenticação e autorização

Senhas usam bcrypt. O cookie contém token aleatório opaco, `HttpOnly`, `SameSite=Lax` e `Secure` em produção; somente SHA-256 do token fica no banco. Autorizações combinam `isSuperAdmin`, vínculo ativo `TenantUser`, papel e permissão de ação. Alterações sensíveis geram `AuditLog`.

## Planos e limites

Planos, preço e recursos vivem em `Plan` e `PlanFeature`. `limit=null` representa ilimitado; nenhuma regra comercial fica hard-coded na interface. A criação/alteração de recursos deve checar limite dentro da mesma transação da escrita.

## Estrutura

- `src/app`: rotas e layouts
- `src/lib`: infraestrutura segura e casos de uso
- `prisma`: schema, migrations e seed
- `docs`: decisões e roteiro
- `tests`: testes unitários de fronteiras críticas

## SEO da vitrine

O site do tenant é a origem canônica. A vitrine indexa páginas curatoriais e usa canonical para a URL do tenant em detalhes duplicados; participação depende de `directoryOptIn`.
