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.
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**.
> Não vamos usar `apt` para gerenciar esse pacote porque está desatualizado no Debian. Use por sua conta e risco.
```bash
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**.
```bash
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.
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
O frontend será desenvolvido em **Svelte**, um framework moderno e eficiente.
go version go1.24.0 linux/amd64
```
---
### 🛠️ 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/`
Minimal
Contém os arquivos `main.go`, responsáveis por iniciar nossa aplicação.
TypeScript
Linter + Prettier
pnpm como gerenciador de pacotes
### 🔹 `config/`
## ⚙️ Backend
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.
O backend será desenvolvido em TypeScript, utilizando Drizzle ORM para manipulação do banco de dados de forma eficiente e tipada.
### 🔹 `internal/`
### 🏗️ Estrutura:
Aqui fica a lógica de negócio da aplicação, organizada da seguinte maneira:
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).
### 🚀 Instalação:
-**`entity/`** → Contém as entidades do domínio da aplicação.
Entre no diretório do backend e instale as dependências:
-**`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/`.
---
```bash
pnpm install
```
## 📄 Arquivos Importantes
## 🗄️ Banco de Dados
A aplicação utilizará um PostgreSQL containerizado via Docker.
### 🔹 `go.mod`
### 🛠️ Configuração:
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.
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
```bash
go mod init treinamento-2025.1/backend
docker-compose up -d
```
```
### 🔹 `go.sum`
Isso criará um ambiente pronto para desenvolvimento, permitindo iniciar a implementação do backend imediatamente.
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.