- Instale node e npm. Recomenda-se fortemente utilizar [nvm](https://github.com/nvm-sh/nvm).
- Habilite pnpm com `corepack enable pnpm`.
- Instale [docker engine](https://docs.docker.com/engine/install/debian/) -- lembre-se de fazer os passos pós-instalação para não precisar digitar `sudo` toda hora.
## Estrutura de Pastas e Documentos
```plaintext
|-- docker-compose.yml
|-- drizzle.config.ts
|-- package.json
|-- pnpm-lock.yaml
|-- README.md
|-- src
| |-- db
| | |-- migrations
| | | |-- 0001_flat_captain_america.sql
| | | |-- 0001_happy_tomas.sql
| | | |-- 0002_serious_arclight.sql
| | | |-- 0003_goofy_zodiak.sql
| | | |-- meta
| | | |-- 0001_snapshot.json
| | | |-- 0002_snapshot.json
| | | |-- 0003_snapshot.json
| | | |-- _journal.json
| | |-- index.ts
| | |-- schema.ts
| |-- env.ts
| |-- handlers
| | |-- implants.ts
| | |-- user.ts
| |-- index.ts
| |-- middleware
| | |-- auth.ts
| |-- validators
| |-- implantsValidator.ts
| |-- userValidator.ts
|-- tsconfig.json
```
### Explicação da Estrutura
#### Arquivos da Raiz
-**docker-compose.yml**: Configuração do Docker Compose para gerenciar containers.
-**drizzle.config.ts**: Arquivo de configuração do Drizzle (ferramenta de migração ou ORM).
-**package.json**: Contém metadados do projeto e a lista de dependências.
-**pnpm-lock.yaml**: Lockfile do pnpm para garantir consistência nas versões das dependências.
-**README.md**: Documentação principal do projeto.
-**tsconfig.json**: Configuração do TypeScript para o projeto.
#### Diretório `src`
-**db**: Contém arquivos relacionados ao banco de dados.
-**migrations**: Armazena scripts de migração do banco de dados.
-**0001_flat_captain_america.sql**: Script de migração.
-**0001_happy_tomas.sql**: Script de migração.
-**0002_serious_arclight.sql**: Script de migração.
-**0003_goofy_zodiak.sql**: Script de migração.
-**meta**: Contém snapshots e metadados das migrações.
-**0001_snapshot.json**: Snapshot da migração 0001.
-**0002_snapshot.json**: Snapshot da migração 0002.
-**0003_snapshot.json**: Snapshot da migração 0003.
-**_journal.json**: Registro das migrações.
-**index.ts**: Arquivo principal de configuração do banco de dados.
-**schema.ts**: Define o esquema do banco de dados.
-**env.ts**: Configurações de ambiente.
-**handlers**: Contém os manipuladores de requisições.
-**implants.ts**: Lida com requisições relacionadas a implantes.
-**user.ts**: Lida com requisições relacionadas a usuários.
-**index.ts**: Arquivo principal da aplicação.
-**middleware**: Contém middlewares da aplicação.
-**auth.ts**: Middleware de autenticação.
-**validators**: Contém validadores de dados.
-**implantsValidator.ts**: Valida dados de implantes.
-**userValidator.ts**: Valida dados de usuários.
---
## Executar
Essa estrutura é típica para projetos Node.js com TypeScript, utilizando Docker para containerização e Drizzle para migrações de banco de dados. O diretório `src` organiza o código-fonte em módulos, como banco de dados, handlers, middlewares e validators, seguindo boas práticas de desenvolvimento.
Para executar o projeto:
1. Instale as dependências com `pnpm install`.
2. Suba o banco com `docker compose up --build -d`.
3. Execute as migrações do banco de dados com `npx drizzle-kit generate && npx drizzle-kit migrate` na raiz do projeto.