Merge pull request #31 from rede5/codex/refactor-api-seeder-for-environment-support

seeder-api: add .env.example, embedded Swagger and optimized Dockerfile
This commit is contained in:
Tiago Yamamoto 2025-12-22 11:31:33 -03:00 committed by GitHub
commit 55d727f176
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 139 additions and 1 deletions

2
seeder-api/.env.example Normal file
View file

@ -0,0 +1,2 @@
PORT=8080
DATABASE_URL=postgres://user:password@localhost:5432/saveinmed?sslmode=disable

24
seeder-api/Dockerfile Normal file
View file

@ -0,0 +1,24 @@
# syntax=docker/dockerfile:1.7
FROM golang:1.22-alpine AS builder
WORKDIR /app
RUN apk add --no-cache ca-certificates
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -trimpath -ldflags="-s -w" -o seeder-api ./main.go
FROM gcr.io/distroless/static-debian12:nonroot
WORKDIR /app
COPY --from=builder /app/seeder-api /app/seeder-api
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["/app/seeder-api"]

View file

@ -47,7 +47,7 @@ Use este modo para desenvolvimento diário. Ele cria as seguintes credenciais de
- Go 1.22+
### 1. Configurar
Certifique-se que o `.env` ou variáveis de ambiente estão corretas:
Use o arquivo `.env.example` como base e configure as variáveis:
```bash
export DATABASE_URL=postgres://user:password@localhost:5432/saveinmed?sslmode=disable
@ -73,6 +73,26 @@ _Saída esperada:_
curl -X POST "http://localhost:8216/seed"
```
## 📜 Swagger/OpenAPI
O documento OpenAPI está disponível em:
```bash
curl http://localhost:8216/swagger.json
```
## 🐳 Docker (imagem otimizada)
Build:
```bash
docker build -t saveinmed-seeder-api .
```
Run:
```bash
docker run --rm -p 8216:8080 --env-file .env saveinmed-seeder-api
```
## ⚡ Fluxo Recomendado de Trabalho
1. Pare o backend principal (`backend-go`) para liberar conexões com o banco.
2. Rode o seeder: `go run main.go` em um terminal.

View file

@ -0,0 +1,78 @@
{
"openapi": "3.0.3",
"info": {
"title": "SaveInMed Seeder API",
"version": "1.0.0",
"description": "API utilitária para popular o banco de dados com dados de teste."
},
"servers": [
{
"url": "http://localhost:8080",
"description": "Ambiente local"
}
],
"paths": {
"/seed": {
"post": {
"summary": "Executa o seed do banco",
"description": "Limpa e recria as tabelas, gerando dados de teste.",
"parameters": [
{
"name": "mode",
"in": "query",
"required": false,
"description": "Modo de seed: `lean` para dados de dev ou `full` para carga.",
"schema": {
"type": "string",
"enum": ["lean", "full"],
"default": "full"
}
}
],
"responses": {
"200": {
"description": "Seed executado com sucesso",
"content": {
"application/json": {
"schema": {
"type": "string"
},
"examples": {
"lean": {
"value": "Lean seed completed. 4 Pharmacies. Users: 13. Pass: 123456 (admin: admin123)"
}
}
}
}
},
"405": {
"description": "Método não permitido"
},
"500": {
"description": "Erro ao executar o seed"
}
}
}
},
"/swagger.json": {
"get": {
"summary": "Retorna o Swagger/OpenAPI da Seeder API",
"responses": {
"200": {
"description": "Documento OpenAPI",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"405": {
"description": "Método não permitido"
}
}
}
}
}
}

View file

@ -1,6 +1,7 @@
package main
import (
_ "embed"
"log"
"net/http"
"os"
@ -9,6 +10,9 @@ import (
"github.com/saveinmed/seeder-api/pkg/seeder"
)
//go:embed docs/openapi.json
var swaggerJSON string
func main() {
godotenv.Load()
port := os.Getenv("PORT")
@ -40,6 +44,16 @@ func main() {
w.Write([]byte(result))
})
http.HandleFunc("/swagger.json", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(swaggerJSON))
})
log.Printf("Seeder API listening on port %s", port)
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatalf("Server error: %v", err)