Skip to content

IKauedev/batch-users-100mil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio Técnico: Performance e Análise de Dados via API

Objetivo

Desenvolver uma API altamente performática capaz de:

  • Receber e armazenar um volume massivo de dados (100.000 usuários).
  • Analisar esses dados em tempo real através de endpoints estratégicos.
  • Garantir excelente tempo de resposta (<1s) para todas as operações.

O desafio avaliará:

  • Capacidade de estruturar código limpo, modular e de alta manutenção.
  • Competência em design de API performática.
  • Habilidade de documentar, validar e auditar a entrega.

Especificação do JSON de Entrada

O payload a ser processado terá a seguinte estrutura para cada usuário:

{
  "id": "uuid",
  "name": "string",
  "age": "int",
  "score": "int",
  "active": "bool",
  "country": "string",
  "team": {
    "name": "string",
    "leader": "bool",
    "projects": [
      { "name": "string", "completed": "bool" }
    ]
  },
  "logs": [
    { "date": "YYYY-MM-DD", "action": "login/logout" }
  ]
}

Endpoints Obrigatórios

Método Rota Descrição
POST /users Recebe o arquivo JSON, valida e armazena usuários na memória (simulando um banco de dados).
GET /superusers Retorna usuários ativos (active = true) com score >= 900, tempo de resposta e timestamp.
GET /top-countries Agrupa superusuários por country e retorna os 5 países com maior número de superusuários.
GET /team-insights Agrupa usuários por team.name, retornando: total de membros, total de líderes, total de projetos concluídos e % de membros ativos.
GET /active-users-per-day Conta logins por date. Suporta filtro por min (ex.: ?min=3000 para dias com pelo menos 3000 logins).
GET /evaluation Autoavaliação da API: verifica status 200, tempo de resposta, validade do JSON para os principais endpoints. Retorna um relatório de avaliação.

Requisitos Técnicos

  • Tempo de resposta < 1 segundo em todos os endpoints (considerando memória local).
  • Todos os endpoints devem obrigatoriamente retornar:
    • processing_time_ms (tempo de processamento em milissegundos).
    • timestamp (momento exato da requisição).
  • Código modular, escalável e documentado.
  • Framework/language de livre escolha (preferencialmente estruturas que facilitem alta performance).

Detalhes Adicionais

POST /users

  • Aceita o payload contendo todos os usuários.
  • Valida a estrutura do JSON.
  • Persistência apenas em memória (não usar bancos de dados externos).
  • Aceita cargas tanto de 1.000 quanto de 100.000 usuários.

GET /superusers

  • Filtro dinâmico aplicado:
    • active == true
    • score >= 900
  • Deverá também informar:
    • Quantidade de superusuários encontrados.
    • Tempo de execução da consulta.

GET /top-countries

  • Baseado no resultado de /superusers.
  • Retornar:
    • Nome do país.
    • Quantidade de superusuários.
  • Ordenar do maior para o menor e limitar a 5 resultados.

GET /team-insights

Para cada equipe (team.name), calcular:

  • Número total de membros.
  • Quantidade de líderes (leader = true).
  • Total de projetos concluídos (completed = true).
  • Percentual de membros ativos (active = true).

GET /active-users-per-day

  • Baseado nos logs de ação login.
  • Permitir filtro opcional via query param ?min=valor.
  • Exemplo: /active-users-per-day?min=3000 retorna somente datas com mais de 3000 logins.

GET /evaluation

Executa testes automatizados nos endpoints:

  • Valida status HTTP 200.
  • Mede o tempo de resposta em milissegundos.
  • Valida que o retorno seja JSON bem formado.
  • Devolve um relatório consolidado de performance.

Exemplo de resposta:

{
  "superusers": { "status": 200, "response_time_ms": 128, "valid_json": true },
  "top-countries": { "status": 200, "response_time_ms": 105, "valid_json": true },
  "team-insights": { "status": 200, "response_time_ms": 142, "valid_json": true },
  "active-users-per-day": { "status": 200, "response_time_ms": 97, "valid_json": true }
}

Critérios de Avaliação

Critério Peso
Código limpo, modular e documentado Alto
Desempenho <1s para todos endpoints Altíssimo
Estruturação correta dos dados e lógicas de negócio Alto
Qualidade e estrutura da documentação Bônus
Estratégia de avaliação automática no /evaluation Bônus extra

Dicas para Brilhar no Desafio

  • Use estruturas de dados otimizadas (e.g., HashMap, Streams paralelos, Cache local).
  • Trabalhe com Streams e lambdas se estiver usando Java, ou FastAPI se Python.
  • Sempre medir o tempo de início e fim no controller para calcular processing_time_ms.
  • Garanta que o sistema suporte múltiplas requisições simultâneas (thread-safe).

Arquivos de Entrada para Testes

Entrega bônus sugerida

  • Documentar API via Swagger/OpenAPI.
  • Fornecer um arquivo README.md explicando estrutura, decisão de arquitetura e como executar localmente.
  • Incluir scripts prontos de testes.

Observação final

"O verdadeiro diferencial não será apenas construir a API, mas pensar em performance, escalabilidade, governança de dados e experiência de consumo como um todo."

About

Technical Challenge: Performance and Data Analysis via API

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages