gohorsejobs/backend
Tiago Yamamoto be35be0c10 fix(docker): align Dockerfile port with .env configuration (8521)
- Updated EXPOSE from 8080 to 8521
- Updated HEALTHCHECK to check port 8521
- Updated default ENV PORT from 8080 to 8521

This fixes the deployment health check issue where the container
was expecting port 8080 but the app was configured to run on 8521.
2025-12-13 18:23:48 -03:00
..
cmd docs: complete project documentation overhaul 2025-12-09 19:36:36 -03:00
docs chore: update port configuration to avoid conflicts 2025-12-11 17:06:37 -03:00
internal Merge branch 'hml' into dev 2025-12-11 14:59:40 -03:00
migrations first commit 2025-12-09 19:04:48 -03:00
.dockerignore docs: complete project documentation overhaul 2025-12-09 19:36:36 -03:00
.env.example chore: update port configuration to avoid conflicts 2025-12-11 17:06:37 -03:00
.gitignore first commit 2025-12-09 19:04:48 -03:00
Dockerfile fix(docker): align Dockerfile port with .env configuration (8521) 2025-12-13 18:23:48 -03:00
go.mod chore: update port configuration to avoid conflicts 2025-12-11 17:06:37 -03:00
go.sum feat(backend): add PostgreSQL SSL support and DB_SSLMODE env var 2025-12-11 14:41:11 -03:00
README.md docs: complete project documentation overhaul 2025-12-09 19:36:36 -03:00

Backend - GoHorse Jobs API

Go PostgreSQL

API REST desenvolvida em Go seguindo princípios de Clean Architecture e DDD.


🏗️ Arquitetura

internal/
├── api/                    # Clean Architecture Layer
│   ├── handlers/           # HTTP Handlers (Controllers)
│   └── middleware/         # Auth, CORS, Rate Limiting
│
├── core/                   # Domain Layer (DDD)
│   ├── domain/entity/      # Entidades puras (sem deps externas)
│   ├── ports/              # Interfaces (Repository, Service)
│   └── usecases/           # Casos de uso (Business Logic)
│
├── infrastructure/         # Infrastructure Layer
│   ├── auth/               # JWT Service implementation
│   └── persistence/        # Repository implementations
│
├── handlers/               # Legacy controllers
├── middleware/             # Security middlewares
├── models/                 # GORM models
├── services/               # Business logic (legacy)
└── utils/                  # Helpers (JWT, Sanitizer)

🔒 Segurança

Middlewares Implementados

Middleware Arquivo Descrição
Auth middleware/auth.go Validação JWT + RBAC
CORS middleware/cors.go Whitelist de origens via CORS_ORIGINS
Rate Limiting middleware/rate_limit.go 100 req/min por IP
Security Headers middleware/security_headers.go OWASP headers (XSS, CSP, etc.)

Validação de JWT

O servidor valida no boot que JWT_SECRET tenha pelo menos 32 caracteres. Em produção (ENV=production), o servidor não inicia com secrets fracos.


📡 Endpoints

Públicos

Método Endpoint Descrição
GET /health Health check
GET /swagger/* Documentação Swagger
POST /api/v1/auth/login Autenticação
POST /api/v1/companies Registro de empresa
GET /jobs Listar vagas

Protegidos (JWT Required)

Método Endpoint Roles Descrição
GET /api/v1/users superadmin, companyAdmin Listar usuários
POST /api/v1/users superadmin, companyAdmin Criar usuário
DELETE /api/v1/users/{id} superadmin Deletar usuário
POST /jobs companyAdmin, recruiter Criar vaga

🚀 Desenvolvimento

Executar

# Copie o .env
cp .env.example .env

# Execute
go run ./cmd/api

Testes

# Todos os testes
go test ./...

# Com verbose
go test -v ./internal/middleware/... ./internal/utils/...

Regenerar Swagger

swag init -g cmd/api/main.go --parseDependency --parseInternal

🐳 Docker

# Build
docker build -t gohorse-backend .

# Run
docker run -p 8080:8080 --env-file .env gohorse-backend

Imagem otimizada: ~73MB (Alpine + non-root user)


📁 Arquivos Importantes

Arquivo Descrição
cmd/api/main.go Entrypoint da aplicação
internal/router/router.go Configuração de todas as rotas
internal/database/database.go Conexão GORM com PostgreSQL
migrations/*.sql Migrations do banco de dados
docs/swagger.json Documentação OpenAPI gerada