Vamos remover qualquer instalação prévia, por desencargo, e depois baixar o binário e descompactá-lo.
## 🌆 História
> **Importante**: confira a versão mais recente no site [Go Downloads](https://go.dev/dl/). Se necessário, substitua o comando abaixo pelo número da versão correta.
> Não vamos usar `apt` para gerenciar esse pacote porque está desatualizado no Debian. Use por sua conta e risco.
O ano é **2177**. Você sobrevive no auge do **capitalismo tardio** em sua forma mais agressiva: metade do planeta é um imenso depósito de "indesejados", contaminado por lixo nuclear e plástico não biodegradável. Enquanto isso, a outra metade se esconde em meio ao **concreto, metal e grafeno**, agarrando-se ao pouco de humanidade que resta nos grandes centros urbanos. Árvores? Cães? Gatos? Essas palavras desapareceram da linguagem comum. Quem ainda está na Terra trabalha remotamente para os **1% que vivem confortavelmente em colônias espaciais**.
Você é um desses infelizes terráqueos. Criado nas ruas de **Cybertiba**, aprendeu a sobreviver nos becos da cidade, catando peças e códigos no submundo digital. Seu melhor amigo, **Maziero**, é um **Ripperdoc**—um cirurgião de implantes clandestinos, especialista em transformar corpos comuns em máquinas aprimoradas. Dizem que ele se formou na extinta **Universidade Federativa do Paraná**, antes de a instituição ser vendida para o **Império Unificado Americano (IUA)** junto com o já inexistente Brasil.
Precisamos exportar a variável de ambiente para que o bash saiba qual binário rodar quando digitarmos `go` no terminal:
Mas Maziero tem um problema: ele precisa de um site para vender seus implantes **DIY (Do It Yourself)**. No futuro, ninguém mais pode pagar por cirurgias formais; os implantes são enviados para casa e instalados pelo próprio usuário, sem perguntas. O problema? As **IAs foram privatizadas** pelos ultra-ricos das colônias espaciais. Esqueça **ChatGPT, DeepSeek ou Copilot**—aqui, a única coisa que resta é o seu **conhecimento puro de programação**.
Felizmente, a resistência digital ainda vive. A internet na Terra se mantém ativa graças aos **nós de Software Livre** espalhados pelo planeta. Em Cybertiba, a conexão é mantida pelo **C4SL (Cyber Centro de Computação Científica e Software Livre)**, garantindo acesso ao conhecimento para os poucos que ainda podem usá-lo.
Vamos verificar se tudo deu certo:
Agora que você tem o contexto, é hora de agir. Você e Maziero precisam deste site funcionando—quem sabe, um dia, isso renda o suficiente para comprar um **Ryzen 20 7800X** e finalmente resolver **Matemática Discreta de cabeça**.
```bash
go version
```
---
Se funcionou, seu terminal deve mostrar a mensagem:
## 🖥️ Frontend
```bash
go version go1.24.0 linux/amd64
```
O frontend será desenvolvido em **Svelte**, um framework moderno e eficiente.
---
### 🛠️ Pré-requisitos:
- Certifique-se de que o **Node.js** está na versão **LTS**.
## 📂 Arquitetura
### 🚀 Instalação:
Para criar o projeto, execute:
```bash
npx sv create frontend
```
meu_projeto/
├── src/
│ └── main.go
├── config/
│ ├── config.yaml
│ └── .env
├── internal/
│ ├── dto/
│ ├── entity/
│ ├── handler/
│ ├── database/
│ │ ├── migrations/
│ │ ├── queries/
│ │ ├── sqlc/
│ ├── repository/
│ ├── service/
├── go.mod
├── go.sum
└── README.md
```
---
## 📁 Descrição das Pastas
Durante a configuração, escolha as seguintes opções:
### 🔹 `src/`
Contém os arquivos `main.go`, responsáveis por iniciar nossa aplicação.
Minimal
TypeScript
Linter + Prettier
pnpm como gerenciador de pacotes
### 🔹 `config/`
Armazena configurações da aplicação, como variáveis de ambiente (`.env`) e arquivos de configuração (`config.yaml`). Também pode incluir logs, caso necessário.
## ⚙️ Backend
O backend será desenvolvido em TypeScript, utilizando Drizzle ORM para manipulação do banco de dados de forma eficiente e tipada.
### 🔹 `internal/`
Aqui fica a lógica de negócio da aplicação, organizada da seguinte maneira:
### 🏗️ Estrutura:
O backend será uma API REST simples.
Utilizará Drizzle para comunicação com o banco de dados PostgreSQL.
Terá suporte para autenticação e CRUD básico de implantes.
-**`dto/`** → Define os tipos de dados permitidos na aplicação (Data Transfer Objects - DTOs).
-**`entity/`** → Contém as entidades do domínio da aplicação.
-**`handler/`** → Responsável pelo roteamento das requisições HTTP. Pode ser chamada de `controller/`, se preferir.
-**`database/`** → Contém toda a lógica de banco de dados:
-**`migrations/`** → Scripts de migração do banco de dados.
-**`queries/`** → Arquivos contendo as queries SQL de consulta ao banco.
-**`sqlc/`** → Arquivos gerados automaticamente pelo SQLC para manipulação do banco.
-**`repository/`** → Camada de repositórios, que faz a comunicação entre o banco de dados e a aplicação. Poderíamos usar diretamente as estruturas do `sqlc`, mas adicionamos essa camada para manter um desacoplamento maior.
-**`service/`** → Camada de serviços onde fica a lógica de negócio. Também pode ser chamada de `usecase/`.
### 🚀 Instalação:
Entre no diretório do backend e instale as dependências:
---
```bash
pnpm install
```
## 📄 Arquivos Importantes
## 🗄️ Banco de Dados
A aplicação utilizará um PostgreSQL containerizado via Docker.
### 🔹 `go.mod`
Este arquivo é essencial para o gerenciamento de dependências em Go. Ele define o módulo do projeto e lista as dependências do código, garantindo que todas as bibliotecas necessárias sejam baixadas corretamente.
### 🛠️ Configuração:
Dentro do diretório do backend, há um arquivo docker-compose.yml que configura o banco de dados.
Criado com o comando:
Para subir o PostgreSQL localmente, basta rodar:
```bash
go mod init treinamento-2025.1/backend
docker-compose up -d
```
### 🔹 `go.sum`
Este arquivo contém checksums das versões exatas das dependências do projeto. Ele garante que as bibliotecas usadas sejam sempre as mesmas, evitando inconsistências entre ambientes de desenvolvimento e produção.
---
## Rodando
\ No newline at end of file
Isso criará um ambiente pronto para desenvolvimento, permitindo iniciar a implementação do backend imediatamente.