Skip to main content

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ção
  • database: Gerenciamento de conexões e modelos do banco de dados
  • database/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 bilhetes
  • chamados.go: Sistema de chamados e reclamações
  • conexoes.go: Conexões entre estações
  • estacoes.go: Informações das estações
  • favoritos.go: Gerenciamento de favoritos dos usuários
  • linhas.go: Informações das linhas de trem
  • mensagens_contato.go: Sistema de contato
  • notificacoes.go: Sistema de notificações
  • sobreCPTM.go: Conteúdo institucional
  • trens.go: Informações dos trens
  • usuarios.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