A API Go e o backend principal do projeto. Ela fornece os recursos consumidos pelo painel administrativo e pelas funcionalidades voltadas ao motorista, concentrando autenticacao, controle de acesso, cadastros operacionais, viagens, ocorrencias, abastecimentos, manutencoes, notificacoes, arquivos e relatorios.
O projeto segue uma organizacao em camadas, separando handlers HTTP, regras de negocio, repositorios, entidades de dominio, middlewares e configuracoes.
- Go: linguagem principal do backend.
- Gin: framework HTTP usado para declarar rotas, middlewares e handlers.
- PostgreSQL: banco de dados relacional da aplicacao.
- pgx: driver e pool de conexoes com PostgreSQL.
- JWT: autenticacao por tokens de acesso e refresh.
- godotenv: carregamento das variaveis de ambiente.
- AWS SDK S3 compativel: integracao com armazenamento de arquivos, como Cloudflare R2.
- Expo Push Notifications: envio de notificacoes push.
- SMTP: envio de mensagens para fluxo de redefinicao de senha.
api-go/
├── cmd/
│ └── api/
│ └── main.go # Ponto de entrada da API
├── config/
│ └── config.go # Configuracao de ambiente e banco
├── docs/
│ └── push_notifications.md # Documentacao auxiliar de notificacoes
├── internal/
│ ├── domain/ # Entidades, contratos e erros de dominio
│ ├── handler/ # Handlers HTTP e registro das rotas
│ ├── middleware/ # CORS, autenticacao e autorizacao
│ ├── repository/ # Acesso ao banco de dados
│ ├── security/ # Tokens, chaves e seguranca
│ └── service/ # Regras de negocio e integracoes externas
├── esquilo.sql # Script de criacao do banco
├── inserts_teste.sql # Dados de teste
├── go.mod
└── go.sum
A aplicacao e inicializada em cmd/api/main.go. Nesse arquivo sao carregadas as variaveis de ambiente, criada a conexao com o banco, inicializados os repositorios, servicos, middlewares e handlers, e registradas as rotas da API.
O fluxo principal segue esta divisao:
- Handlers recebem as requisicoes HTTP, validam entradas e montam respostas.
- Services concentram regras de negocio e integracoes externas.
- Repositories fazem a comunicacao com o PostgreSQL.
- Domain define os modelos e contratos usados entre as camadas.
- Middlewares aplicam CORS, autenticacao, autorizacao e seguranca de rotas internas.
- Security gerencia tokens JWT, chaves e criptografia de dados sensiveis.
Prefixo: /auth
POST /auth/login: login administrativo.POST /auth/admin/login: login administrativo.POST /auth/motorista/login: login do motorista.POST /auth/refresh: renovacao de token.POST /auth/logout: encerramento de sessao.POST /auth/reset-password: redefinicao de senha.GET /auth/me: dados do usuario autenticado.POST /auth/change-password: alteracao de senha.
Prefixo: /admin
As rotas administrativas exigem autenticacao e ator do tipo admin.
Principais modulos:
- Dashboard e alertas.
- Usuarios administrativos.
- Funcionarios.
- Folha de pagamento.
- Motoristas.
- Veiculos.
- Clientes.
- Tipos de carga.
- Viagens.
- Ocorrencias.
- Abastecimentos.
- Notificacoes.
- Manutencoes.
- Relatorios.
- Historico de alteracoes.
Prefixo: /motorista
As rotas do motorista exigem autenticacao e ator do tipo motorista.
Principais recursos:
- Perfil do motorista.
- Listagem de viagens.
- Viagem atual.
- Historico de viagens.
- Registro e finalizacao de paradas.
- Solicitacao de finalizacao de viagem.
- Cadastro e consulta de ocorrencias.
- Cadastro e consulta de abastecimentos.
- Consulta e leitura de notificacoes.
- Registro e remocao de token push.
Prefixo: /internal
As rotas internas sao protegidas por token proprio, definido em variavel de ambiente. Elas sao usadas para comunicacao entre servicos, como criacao interna de notificacoes.
/uploads: exposicao de arquivos estaticos locais.
GET /admin/dashboardGET /admin/alertas
GET /admin/usuariosPOST /admin/usuarios/password-reset-token
GET /admin/funcionariosPOST /admin/funcionariosGET /admin/funcionarios/:idPUT /admin/funcionarios/:idDELETE /admin/funcionarios/:idPATCH /admin/funcionarios/:id/statusPOST /admin/funcionarios/:id/fotoGET /admin/folha-pagamentoGET /admin/funcionarios/:id/folha-pagamentoPUT /admin/funcionarios/:id/folha-pagamento
GET /admin/motoristasPOST /admin/motoristasGET /admin/motoristas/:idPUT /admin/motoristas/:idDELETE /admin/motoristas/:idPATCH /admin/motoristas/:id/statusPOST /admin/motoristas/:id/fotoGET /admin/motoristas/:id/indicadoresGET /admin/motoristas/:id/viagensGET /admin/motoristas/:id/ocorrencias
GET /admin/veiculosGET /admin/veiculos/custos-totaisGET /admin/veiculos/consumo-medioPOST /admin/veiculosGET /admin/veiculos/:idPUT /admin/veiculos/:idDELETE /admin/veiculos/:idGET /admin/veiculos/:id/custosGET /admin/veiculos/:id/consumoGET /admin/veiculos/:id/historico
GET /admin/clientesPOST /admin/clientesGET /admin/clientes/:idPUT /admin/clientes/:idDELETE /admin/clientes/:id
GET /admin/tipos-cargaPOST /admin/tipos-cargaGET /admin/tipos-carga/:idPUT /admin/tipos-carga/:idDELETE /admin/tipos-carga/:id
GET /admin/viagensPOST /admin/viagensGET /admin/viagens/:idPUT /admin/viagens/:idDELETE /admin/viagens/:idPOST /admin/viagens/:id/finalizarGET /admin/viagens/:id/historicoGET /admin/viagens/:id/documentosPOST /admin/viagens/:id/documentosGET /admin/viagens/:id/documentos/:documentoIdGET /admin/viagens/:id/finalizacoesPOST /admin/viagens/:id/finalizacoes/:finalizacaoId/aprovarPOST /admin/viagens/:id/finalizacoes/:finalizacaoId/rejeitar
GET /admin/ocorrenciasGET /admin/ocorrencias/:idGET /admin/abastecimentosGET /admin/abastecimentos/:id
GET /admin/notificacoesGET /admin/notificacoes/streamPOST /admin/notificacoes/push-tokenDELETE /admin/notificacoes/push-tokenPATCH /admin/notificacoes/:id/lida
GET /admin/manutencoesPOST /admin/manutencoesGET /admin/manutencoes/:idPUT /admin/manutencoes/:idGET /admin/veiculos/:id/manutencoes
GET /admin/relatorios/viagensGET /admin/relatorios/combustivelGET /admin/relatorios/manutencoesGET /admin/relatorios/custosGET /admin/relatorios/desempenhoGET /admin/relatorios/lucro-por-viagemGET /admin/relatorios/exportacoes/xlsxGET /admin/relatorios/exportacoes/csv
A API carrega as configuracoes a partir de um arquivo .env.
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=
DB_NAME=JWT_ACCESS_SECRET=
JWT_REFRESH_SECRET=
JWT_ACCESS_TTL=
JWT_REFRESH_TTL=
JWT_ISSUER=
REFRESH_TOKEN_PEPPER=
DATA_ENCRYPTION_KEY=
INTERNAL_API_TOKEN=
PASSWORD_RESET_TOKEN_TTL=CORS_ALLOW_ORIGINS=R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET_NAME=
R2_REGION=
R2_ENDPOINT=
R2_PUBLIC_BASE_URL=
R2_FUNCIONARIOS_PREFIX=
R2_MOTORISTAS_PREFIX=
R2_VIAGENS_DOCUMENTOS_PREFIX=
R2_ABASTECIMENTOS_PREFIX=
R2_OCORRENCIAS_PREFIX=EXPO_PUSH_ENDPOINT=
EXPO_ACCESS_TOKEN=SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_FROM_EMAIL=
SMTP_FROM_NAME=O projeto possui dois scripts SQL principais:
esquilo.sql: estrutura do banco de dados.inserts_teste.sql: dados de teste para desenvolvimento.
Antes de iniciar a API, crie o banco PostgreSQL e execute o script esquilo.sql. Se quiser popular o ambiente com dados de exemplo, execute tambem inserts_teste.sql.
- Go instalado.
- PostgreSQL configurado.
- Arquivo
.envpreenchido. - Banco criado com o script
esquilo.sql.
go mod downloadgo run ./cmd/apiA API sera iniciada em:
http://localhost:8080
- Autenticacao de administradores e motoristas.
- Controle de sessoes com access token e refresh token.
- Protecao de rotas por tipo de usuario.
- CRUD de funcionarios, motoristas, veiculos, clientes e tipos de carga.
- Gestao de viagens, paradas, documentos e finalizacoes.
- Registro e consulta de ocorrencias.
- Registro e consulta de abastecimentos.
- Controle de manutencoes.
- Folha de pagamento de funcionarios.
- Dashboard com indicadores e alertas.
- Notificacoes em tempo real e notificacoes push.
- Upload e consulta de arquivos em storage compativel com S3.
- Relatorios operacionais e exportacoes.
- Historico de alteracoes para auditoria.