Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • T taskee_wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Taskee
  • taskee_wiki
  • Wiki
  • API

Last edited by Lucas Aquino Brentano Nov 23, 2025
Page history

API

Taskee Backend API - Documentação Técnica

Visão Geral

API REST desenvolvida com FastAPI para gerenciamento de eventos gamificados, tarefas, atividades e ranking de participantes. Utiliza Firebase Authentication para autenticação e Cloud Firestore como banco de dados NoSQL.

URL Base: http://localhost:8000
Documentação Interativa: http://localhost:8000/docs


Arquitetura

Stack Tecnológica

  • Framework: FastAPI
  • Autenticação: Firebase Authentication (JWT)
  • Banco de Dados: Cloud Firestore (NoSQL)
  • Storage: Firebase Storage
  • Testes: Pytest (31 arquivos de teste)
  • Containerização: Docker + Docker Compose

Padrão Arquitetural

app/
├── controllers/     # Endpoints HTTP (rotas)
├── services/        # Lógica de negócio
├── models/          # Modelos de dados (Pydantic)
├── schemas/         # Validação de entrada/saída
├── dependencies/    # Injeção de dependências (Firebase, Auth)
└── utils/           # Funções auxiliares

Autenticação e Autorização

Níveis de Segurança

Nível Descrição Dependência
PUBLIC Sem autenticação Nenhuma
AUTHENTICATED Requer token Firebase válido get_current_user_firebase
ADMIN Requer is_admin=true require_admin_firebase

Fluxo de Autenticação

  1. Frontend faz login via Firebase Client SDK (signInWithEmailAndPassword)
  2. Obtém ID Token com getIdToken()
  3. Envia token para /firebase-auth/verify (validação backend)
  4. Backend valida token e retorna dados do usuário

Controle de Plataforma

  • Web Dashboard: Somente admins (is_admin=true)
  • Mobile App: Todos usuários ativos

Recursos e Endpoints

1. Account Management (Público)

Prefixo: /account

Método Endpoint Descrição
POST /signup Criar conta Firebase Auth
DELETE /delete-account Deletar conta permanentemente
DELETE /soft-delete-account Deletar conta logicamente

Nota: Login é feito no frontend via Firebase SDK.


2. Firebase Authentication (Público)

Prefixo: /firebase-auth

Método Endpoint Descrição
POST /verify Validar token Firebase e sincronizar usuário
POST /logout Logout (invalidar token)

Validação de Plataforma:

{
  "firebase_token": "eyJhbG...",
  "platform": "web" // ou "mobile"
}

3. Password Management (Público)

Prefixo: /password

Método Endpoint Descrição
POST /reset/request Solicitar reset de senha (email com token válido por 1h)

4. Users (Autenticado)

Prefixo: /users

Método Endpoint Descrição Acesso
POST /create Criar usuário (com Firebase UID) Admin
POST /create-with-firebase Criar usuário + Firebase Auth Admin
GET / Listar todos usuários Admin
GET /{user_id} Buscar por ID Autenticado
GET /uuid/{uuid} Buscar por UUID Autenticado
GET /email/{email} Buscar por email Autenticado
PUT /{user_id} Atualizar perfil (próprio ou admin) Autenticado
DELETE /{user_id} Deletar do Firestore Admin
DELETE /{user_id}/complete Deletar Firebase Auth + Firestore Autenticado

Modelo User:

{
  "id": str,
  "firebase_uid": str,
  "name": str,
  "email": str,
  "birth_date": datetime,
  "phone_number": str,
  "city": str,
  "state": str,
  "country": str,
  "gender": UserGender,
  "is_active": bool,
  "is_admin": bool
}

5. Events (Autenticado)

Prefixo: /events

Método Endpoint Descrição Acesso
POST /create Criar evento (com upload de banner) Admin
PUT /update Atualizar evento Admin
GET /all Listar todos eventos Público
GET /my-events Eventos do usuário (admin: todos / user: inscritos) Autenticado

Modelo Event:

{
  "id": str,
  "title": str,
  "description": str,
  "access_code": str,  # Código de inscrição
  "field": str,
  "start_date": datetime,
  "end_date": datetime,
  "type": str,  # Feira, Workshop, etc.
  "status": str,  # ongoing, finished
  "is_active": bool,
  "customization": {
    "primary_color": str,
    "secondary_color": str,
    "tertiary_color": str,
    "font": str,
    "icon_url": str,
    "banner_url": str
  },
  "tasks": List[Task],
  "activities": List[Activity]
}

6. Tasks (Autenticado)

Prefixo: /tasks

Método Endpoint Descrição
POST /create/{event_id} Criar tarefa em evento
GET /all/{event_id} Listar tarefas do evento
GET /{event_id}/{task_id} Buscar tarefa específica
PUT /update/{event_id}/{task_id} Atualizar tarefa
DELETE /delete/{event_id}/{task_id} Deletar tarefa

Modelo Task:

{
  "id": str,
  "title": str,
  "description": str,
  "task_type": str,  # question, quiz, challenge
  "task_category": str,
  "status": str,
  "score": int,
  "sequence": int,
  "min_char": int,  # Mínimo de caracteres para resposta
  "question": List[Question],  # Para quizzes
  "is_active": bool
}

7. Activities (Autenticado)

Prefixo: /events/{event_id}/activities

Método Endpoint Descrição
POST / Criar atividade (com upload de imagem)
GET / Listar atividades (ativas por padrão)
GET /{activity_id} Buscar atividade específica
PUT /{activity_id} Atualizar atividade
DELETE /{activity_id} Deletar permanentemente
DELETE /{activity_id}/soft Desativar atividade
PUT /{activity_id}/restore Reativar atividade

Modelo Activity:

{
  "id": str,
  "title": str,
  "description": str,
  "type": str,  # Palestra, Workshop, etc.
  "image_url": str,
  "start_at": datetime,
  "end_at": datetime
}

8. User Tasks (Autenticado)

Prefixo: /user_tasks

Gerencia respostas de usuários em tarefas.

Método Endpoint Descrição
POST /upsert/question/{user_id}/{event_id}/{task_id} Submeter resposta dissertativa
POST /upsert/quiz/{user_id}/{event_id} Submeter quiz (múltipla escolha)
POST /upsert/challenge/{user_id}/{event_id}/{task_id} Submeter desafio (upload de imagem)
GET /event/{event_id}/user/{user_id} Listar respostas do usuário no evento
GET /{event_id} Listar todas respostas do evento
GET /{event_id}/task/{task_id} Respostas de tarefa específica
GET /current/{event_id}/{user_id} Tarefa atual do usuário
GET /completion/{event_id}/{user_id} Status de conclusão das tarefas
PUT /evaluate/{user_task_id} Avaliar resposta (admin)

Modelo UserTask:

{
  "id": str,  # {user_id}_{task_id}
  "user_id": str,
  "task_id": str,
  "event_id": str,
  "answers": [
    {
      "user_answer": str,
      "is_correct": bool,
      "submission_type": SubmissionType,  # text, image
      "submission_url": str  # URL Firebase Storage
    }
  ],
  "is_validated": bool,
  "score": float
}

9. User Events (Autenticado)

Prefixo: /user_event

Gerencia inscrições de usuários em eventos.

Método Endpoint Descrição
POST /register Inscrever-se em evento (via código de acesso)
GET /event/{event_id}/my-registration Buscar inscrição do usuário
GET /my-registrations Listar todos eventos inscritos

Modelo UserEvent:

{
  "id": str,  # {user_id}_{event_id}
  "user_id": str,
  "event_id": str,
  "total_score": int,  # Pontuação consolidada
  "enrollment_date": datetime
}

10. Ranking (Público)

Prefixo: /ranking

Método Endpoint Descrição
GET /{event_id} Ranking completo do evento
GET /{event_id}/user/{user_id} Posição específica do usuário

Resposta Ranking:

{
  "event_id": str,
  "ranks": [
    {
      "position": int,
      "user_id": str,
      "name": str,
      "total_score": int
    }
  ]
}

Serviços

AccountService

  • Criação de usuários no Firebase Auth
  • Deleção física e lógica de contas

FirebaseAuthService

  • Validação de tokens JWT
  • Controle de acesso por plataforma (web/mobile)
  • Atualização de último login

UserService

  • CRUD completo de usuários
  • Integração Firebase Auth ↔ Firestore
  • Validação de permissões

EventService

  • Gerenciamento de eventos gamificados
  • Upload de banners (Firebase Storage)
  • Customização de aparência

TaskService

  • CRUD de tarefas (question, quiz, challenge)
  • Validação de tipos e categorias
  • Sequenciamento de tarefas

ActivityService

  • CRUD de atividades do evento
  • Upload de imagens
  • Soft delete (desativação)

UserTaskService

  • Submissão de respostas (texto, quiz, imagem)
  • Avaliação de respostas (admin)
  • Atualização de pontuação no UserEvent
  • Validação de respostas de quiz

UserEventService

  • Inscrição em eventos via código de acesso
  • Controle de pontuação consolidada
  • Listagem de eventos do usuário

RankingService

  • Geração de ranking por evento
  • Ordenação por pontuação
  • Busca de posição específica

PasswordService

  • Envio de email de reset (token temporário 1h)

Modelos de Dados Principais

Enumerações

class UserGender(str, Enum):
    MALE = "male"
    FEMALE = "female"
    OTHER = "other"

class SubmissionType(str, Enum):
    TEXT = "text"
    IMAGE = "image"

Testes

Cobertura

  • Total de arquivos: 31 testes
  • Estrutura:
    • Controllers: 9 arquivos
    • Services: 10 arquivos
    • Models: 4 arquivos
    • Integrações: 8 arquivos

Testes por Módulo

Módulo Arquivos de Teste
User test_user_controller.py, test_user_service.py, test_user_model.py
Task test_task_controller.py, test_task.py, test_task_validators.py
Event test_event_controller.py, test_event_service.py
Activity test_activity_controller.py, test_activity_service_extended.py, test_activity.py
UserTask test_user_task_controller.py, test_user_task_service.py, test_user_task_service_extended.py
UserEvent test_user_event_controller.py, test_user_event_service.py
Auth test_firebase_auth_controller.py, test_firebase_auth_service.py, test_firebase_auth_dependencies.py
Password test_password_controller.py, test_password_service.py, test_password_reset_confirm.py
Ranking test_ranking_controller.py, test_ranking_service.py
Account test_account_controller.py, test_account_service.py
Infrastructure test_firebase.py, test_firebase_storage.py, test_main.py, test_routes.py

Executar Testes

# Todos os testes
pytest tests/

# Com cobertura
pytest --cov=app --cov-report=term-missing

# Teste específico
pytest tests/test_user_service.py

Configuração e Deploy

Variáveis de Ambiente

Crie .env com:

# Firebase
FIREBASE_CREDENTIALS_PATH=service-account.json
FIREBASE_STORAGE_BUCKET=your-bucket.appspot.com

# API
DEBUG=true
ALLOWED_ORIGINS=http://localhost:5173,https://taskee.work.gd

Instalação Local

# Criar ambiente virtual
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
.venv\Scripts\activate     # Windows

# Instalar dependências
pip install -r requirements.txt

# Iniciar servidor
uvicorn app.main:app --reload

Docker

# Build e Run
docker-compose up --build

# Ou manualmente
docker build -t taskee_backend .
docker run -p 8000:8000 taskee_backend

CORS e Segurança

Origins Permitidas

allow_origins=[
    "http://localhost:5173",      # Frontend local
    "https://taskee.work.gd",     # Produção
    "https://www.taskee.work.gd"
]

Proteção de Rotas

  • PUBLIC: Signup, login, reset de senha
  • AUTHENTICATED: Perfis, eventos, tarefas, atividades
  • ADMIN: Criação de usuários, gestão completa

Fluxos Principais

1. Fluxo de Cadastro e Login

1. POST /account/signup (cria Firebase Auth)
2. Frontend: signInWithEmailAndPassword()
3. Frontend: getIdToken()
4. POST /firebase-auth/verify (valida e sincroniza)
   → Retorna dados do usuário + valida plataforma

2. Fluxo de Inscrição em Evento

1. GET /events/all (usuário vê eventos disponíveis)
2. POST /user_event/register (inscreve com access_code)
3. GET /user_event/my-registrations (confirma inscrição)

3. Fluxo de Resolução de Tarefa

1. GET /tasks/all/{event_id} (lista tarefas)
2. POST /user_tasks/upsert/{tipo}/{user_id}/{event_id}/{task_id}
   → Submete resposta (text/quiz/image)
3. Admin: PUT /user_tasks/evaluate/{user_task_id}
   → Avalia e pontua
4. Atualiza automaticamente total_score no UserEvent
5. GET /ranking/{event_id} (visualiza posição)

4. Fluxo de Ranking

1. Usuário completa tarefas → score atualizado em UserEvent
2. GET /ranking/{event_id} → lista ordenada por pontuação
3. GET /ranking/{event_id}/user/{user_id} → posição específica

Dependências Principais

fastapi              # Framework web
firebase-admin       # Firebase SDK Python
pydantic[email]      # Validação de dados
uvicorn              # ASGI server
pytest               # Framework de testes
pytest-cov           # Cobertura de testes
python-multipart     # Upload de arquivos
httpx                # Cliente HTTP async

Observações Importantes

  1. Login não é feito na API: Frontend usa Firebase Client SDK
  2. Tokens expiram em 1 hora: Frontend deve renovar automaticamente
  3. Plataforma web é exclusiva para admins: Validado em /firebase-auth/verify
  4. Pontuação é automática: Atualizada ao avaliar UserTask (quizzes) ou ao submeter (questões abertas precisam avaliação)
  5. Upload de arquivos: Banner (events), imagens (activities, challenges) → Firebase Storage
  6. Soft delete: Activities podem ser desativadas sem perder dados

Suporte e Documentação

  • Swagger UI: http://localhost:8000/docs
  • Repositório: Estrutura modular com separação clara de responsabilidades
  • Padrão: Controllers → Services → Firestore (DDD simplificado)
Clone repository
  • API
  • Arquitetura
  • Banco de Dados
  • Home