Skip to content

Repository files navigation

SENAI Courses Track

Serviço Go multiusuário para acompanhar cursos e turmas disponíveis no SENAI-SP e avisar cada usuário pelo Telegram conforme seus próprios filtros.

Funcionalidades atuais

  • scraping de cursos, cidades, unidades e turmas do portal SENAI-SP;
  • filtros e assinaturas multiusuário persistidos em SQLite;
  • configuração self-service pelo bot em conversa privada;
  • busca compartilhada para filtros equivalentes;
  • baseline configurável: somente futuros ou incluir cursos atuais;
  • outbox transacional com retry para notificações Telegram;
  • dashboard administrativo autenticado e protegido por CSRF;
  • API HTTP administrativa para filtros, cursos e configurações.

Stack

  • Go 1.25.12+
  • Gorilla Mux
  • Templ
  • Goquery
  • SQLite (modernc.org/sqlite)
  • Robfig Cron

Desenvolvimento

go mod tidy
go test ./...
go vet ./...
go build ./cmd/server

Gere um hash bcrypt para a senha administrativa e inicie o servidor:

export SENAI_TRACK_ADMIN_PASSWORD_HASH="$(htpasswd -bnBC 12 '' 'troque-esta-senha' | tr -d ':\n')"
go run ./cmd/server

O servidor escuta em :8020, cria courses.db e exige login no dashboard. Configure o token do bot no painel e use /start em uma conversa privada com o bot.

Docker

A imagem oficial é publicada no GitHub Container Registry:

docker pull ghcr.io/brook-sys/senai-courses-track:latest

Execução direta com persistência:

docker run -d \
  --name senai-courses-track \
  --restart unless-stopped \
  -p 8020:8020 \
  -e SENAI_TRACK_ADMIN_PASSWORD_HASH='$2y$12$...' \
  -v senai-courses-data:/data \
  ghcr.io/brook-sys/senai-courses-track:latest

Ou com Compose:

docker compose up -d
docker compose ps
docker compose logs -f

O dashboard fica disponível em http://localhost:8020 e o healthcheck em http://localhost:8020/healthz.

Variáveis de ambiente

Variável Padrão no container Descrição
SENAI_TRACK_ADDR :8020 Endereço HTTP do servidor.
SENAI_TRACK_DB_PATH /data/courses.db Caminho persistente do SQLite.
SENAI_TRACK_ADMIN_PASSWORD_HASH obrigatório Hash bcrypt da senha do dashboard.
SENAI_TRACK_SECURE_COOKIES false Use true quando o dashboard estiver atrás de HTTPS.
TZ America/Sao_Paulo Fuso horário do container.

O container roda sem privilégios como UID/GID 10001 e persiste os dados no volume /data.

Publicação no GHCR

O workflow .github/workflows/container.yml executa formatação, testes, vet e build. Em pushes para main e tags v*, publica imagens multi-arquitetura para linux/amd64 e linux/arm64, com tags latest, branch, SHA e versão.

Dados locais e credenciais

O banco SQLite e os logs não são versionados. O token do Telegram, IDs, sessões e filtros ficam no banco local e não devem ser adicionados ao Git. O bot aceita configuração somente em chats privados; /privacidade descreve os dados armazenados e /excluirconta remove a conta do usuário.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages