# Convencoes tecnicas - Wezapp

## Escopo

Estas convencoes pertencem somente ao projeto **Wezapp** e ao app inicial **Shots**.

Nao usar estas convencoes para outros projetos sem revisao explicita.

## Nome do projeto

- Projeto: `Wezapp`
- App inicial: `Shots`
- Dominio principal: `wezapp.com.br`
- Dominio do app: `shots.wezapp.com.br`

## Prefixo de banco

Todas as tabelas proprias do projeto devem usar o prefixo:

```text
wezapp_
```

Exemplos:

```text
wezapp_clients
wezapp_campaigns
wezapp_dispatch_jobs
```

## Idioma de codigo e banco

Para evitar mistura de padroes, os nomes tecnicos devem usar ingles:

- Tabelas em ingles
- Campos em ingles
- Classes em ingles
- Rotas tecnicas em ingles quando aplicavel

A documentacao operacional pode ficar em portugues.

## Datas

Campos de data/hora devem seguir padrao:

```text
created_at
updated_at
deleted_at
```

Campos de evento devem usar sufixo `_at`:

```text
sent_at
failed_at
started_at
finished_at
```

## Status

Campos de status devem usar strings controladas e documentadas.

Exemplo:

```text
status = active | inactive | paused | cancelled
```

Evitar status soltos sem documentacao.

## Dinheiro

Valores financeiros devem ser armazenados em decimal fixo.

Padrao sugerido:

```text
DECIMAL(12,4)
```

Motivo: permitir calculo por shot com precisao, sem depender de float.

## Quantidades

Quantidades de shots e itens devem ser inteiros.

```text
INT UNSIGNED
```

## JSON

Campos JSON devem usar sufixo `_json`.

Exemplos:

```text
metadata_json
request_payload_json
response_payload_json
message_payload_json
```

## Auditoria

Acoes sensiveis devem registrar:

- Usuario responsavel
- Entidade alterada
- Antes/depois quando aplicavel
- IP
- User agent
- Data/hora

## Integracoes externas

Toda integracao externa deve passar por uma camada de client/service propria do Wezapp.

Nao chamar APIs externas diretamente de controllers, telas ou scripts soltos.

## Segredos

Nunca versionar:

- `.env`
- tokens
- senhas
- chaves privadas
- dumps SQL
- backups
- arquivos de credenciais

## Commits

Mensagens sugeridas:

```text
docs: ...
chore: ...
feat: ...
fix: ...
refactor: ...
security: ...
```

## Regra de arquitetura

Evitar remendos. Se uma funcionalidade exigir muitos atalhos, documentar a decisao antes de implementar.
