Skip to content
This repository was archived by the owner on May 12, 2026. It is now read-only.

bfukumori/grindsense-backend

Repository files navigation

🔋 GrindSense - API Rest

Bun ElysiaJS PostgreSQL Docker Better-Auth

O GrindSense é o motor de back-end de um projeto de Iniciação Científica (IC) desenvolvido para o evento NEXT 2026 (FIAP). Trata-se de uma plataforma de gamificação adaptativa que ajusta a carga de produtividade de estudantes com base nos seus dados biométricos (Variabilidade da Frequência Cardíaca - HRV e qualidade de sono), recolhidos via integração com dispositivos wearables (Fitbit).

O objetivo principal é mitigar o burnout académico, substituindo a gamificação punitiva (como a perda de streaks) por um sistema que respeita a recuperação fisiológica (Modo Anti-Shame).


🏗️ Arquitetura e Decisões de Engenharia

O projeto foi construído focando no Estado da Arte do ecossistema TypeScript moderno, garantindo performance, segurança e testabilidade:

  • Clean Architecture: Separação estrita em camadas de Rotas, Controladores e Serviços (Routes -> Controllers -> Services), tornando as regras de negócio independentes do framework HTTP.
  • Runtime de Alta Performance: Utilização do Bun e ElysiaJS, oferecendo tempos de resposta em microssigundos e validação estrita de esquemas na borda (Edge Validation).
  • Gestão de Sessões & Segurança: Implementação do Better-Auth para gestão unificada de identidade, mitigando vulnerabilidades comuns de autenticação (rotação de tokens e invalidação de sessões).
  • Transações ACID: Uso do Drizzle ORM com db.transaction() para garantir a consistência na distribuição de pontos de experiência (XP) e status das tarefas diárias.
  • Deploy Imutável e Distroless: Dockerização com compilação standalone (multi-stage build). A imagem de produção baseia-se em gcr.io/distroless/base-debian12, removendo vulnerabilidades de shell e garantindo um cold start quase instantâneo.

🚀 Como Executar o Projeto

Pré-requisitos

  • Bun instalado localmente.
  • Docker e Docker Compose instalados.
  • Credenciais de Desenvolvedor da Fitbit (Client ID e Secret).

1. Variáveis de Ambiente

Crie um ficheiro .env na raiz do projeto com base no formato abaixo:

# Base de Dados
DB_USER="admin"
DB_PASSWORD="admin_password"
DB_NAME="grindsense"
DB_HOST="localhost"
DB_PORT=5432
DATABASE_URL=postgresql://admin:admin_password@localhost:5432/grindsense
DATABASE_TEST_URL="postgresql://admin:admin_password@localhost:5432/grindsense_test"
PORT=3000

# Better Auth
BETTER_AUTH_SECRET=gerar_uma_chave_aleatoria_longa
BETTER_AUTH_URL=http://localhost:3000

# Cache/Redis Stream
REDIS_URL="redis://localhost:6379"

# OTEL
OTEL_SERVICE_NAME="grindsense-api"
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318/v1/traces"

2. Executar com Docker Compose (Recomendado)

O ambiente Docker subirá a base de dados PostgreSQL, executará as migrações através de um Init Container e iniciará a API de forma isolada e segura.

# Sobe toda a infraestrutura em background
docker-compose up -d

3. Executar Localmente (Modo de Desenvolvimento)

Caso queira correr o servidor localmente para desenvolvimento:

# Instala as dependências
bun install

# Sobe a base de dados, o worker e o redis via Docker
docker-compose up -d db grindsense-iot-worker redis

# Aplica as migrações na base de dados
bun run db:push

# Aplica o seed no banco
bun run db:seed

# Inicia o servidor em modo watch (hot-reload)
bun dev

4. Executar testes

# Sobe a base de dados, o worker e o redis via Docker
docker-compose up -d db grindsense-iot-worker redis

# Aplica as migrações na base de dados de teste
bun run tests:setup

# Executa os testes de integração
bun test

🔄 CI/CD Pipeline

Este repositório possui uma pipeline configurada no GitHub Actions. A cada push na branch main:

  1. O código é validado.
  2. A imagem Docker é construída usando o Dockerfile distroless otimizado.
  3. A imagem é publicada automaticamente no GitHub Container Registry (GHCR).

👨‍💻 Autores

Desenvolvido como projeto de Iniciação Científica para o NEXT 2026 - FIAP.

About

API do GrindSense - NEXT 2026 (FIAP)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors