Backend da Aplicação
O backend da aplicação é desenvolvido em Go (Golang), utilizando práticas modernas de desenvolvimento e containerização.
Estrutura do Backend
O backend está organizado em diferentes pacotes:
constants
: Configurações e constantes da aplicaçãodatabase
: Gerenciamento de conexões e modelos do banco de dadosdatabase/models
: Estruturas de dados que refletem o schema do banco
Modelos Implementados
O sistema possui vários modelos que representam as entidades do negócio:
bilhetes.go
: Gerenciamento de bilheteschamados.go
: Sistema de chamados e reclamaçõesconexoes.go
: Conexões entre estaçõesestacoes.go
: Informações das estaçõesfavoritos.go
: Gerenciamento de favoritos dos usuárioslinhas.go
: Informações das linhas de tremmensagens_contato.go
: Sistema de contatonotificacoes.go
: Sistema de notificaçõessobreCPTM.go
: Conteúdo institucionaltrens.go
: Informações dos trensusuarios.go
: Gerenciamento de usuários
Containerização
O backend utiliza um processo de build em duas etapas (multi-stage build) para criar uma imagem Docker otimizada:
Primeira Etapa (Builder)
FROM golang:alpine AS builder
- Utiliza Go com Alpine Linux para o build
- Instala dependências essenciais
- Configura um usuário não-root para segurança
- Compila o código com flags de otimização
Segunda Etapa (Final)
FROM scratch
- Imagem final baseada em
scratch
(mínima possível) - Copia apenas o binário e arquivos essenciais
- Configurada com usuário não-root
- Inclui certificados CA e dados de timezone
Segurança
- Execução como usuário não-privilegiado (
appuser
) - Imagem mínima sem shell ou utilitários
- Certificados SSL/TLS incluídos para comunicação segura
Variáveis de Ambiente
O backend aceita configuração através de variáveis de ambiente:
GIN_MODE
: Modo de execução do Gin (framework web)PORT
: Porta de execução do servidor- Variáveis de conexão com o banco de dados
POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB
POSTGRES_HOSTNAME