# viniciuslima30/teammanager architecture

> Architecture diagram of the GitHub repository viniciuslima30/teammanager, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/viniciuslima30/teammanager
- Repository: https://github.com/viniciuslima30/teammanager

## Overview

Basketball Team API é uma API REST para cadastro e autenticação de usuários e gestão de times e escalações. O fluxo principal parte de uma requisição HTTP, passa pelas rotas e controladores, aplica regras de negócio nos serviços e persiste dados pelos repositórios com Prisma. Os estágios de escalação incluem criar, editar, mover e remover jogadores, além de substituir titular por reserva atomicamente. O README documenta também rotação de refresh tokens, autenticação JWT e limites de elenco; serviços e repositórios não amostrados foram incluídos com base nessa arquitetura documentada.

Main entry points: [`src/modules/teams/team.routes.js`](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.routes.js) (Rotas de times), [`src/config/prisma.js`](https://github.com/viniciuslima30/teammanager/blob/main/src/config/prisma.js) (Cliente Prisma), [`src/app.js`](https://github.com/viniciuslima30/teammanager/blob/main/src/app.js) (Aplicação Express), [`src/modules/auth/auth.routes.js`](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.routes.js) (Rotas de autenticação)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP e segurança"]
  node_app["Aplicação Express<br/>[app.js]"]
  node_authenticate["Autenticação JWT<br/>[authenticate.js]"]
  node_validate["Validação de entrada<br/>[validate.js]"]
  node_error_handler["Tratamento de erros<br/>[errorHandler.js]"]
end

subgraph group_identity["Identidade"]
  node_auth_routes["Rotas de autenticação<br/>[auth.routes.js]"]
  node_auth_controller["Controlador de autenticação<br/>[auth.controller.js]"]
  node_auth_service["Serviço de autenticação<br/>[auth.service.js]"]
end

subgraph group_roster["Times e escalação"]
  node_team_routes["Rotas de times<br/>[team.routes.js]"]
  node_team_controller["Controlador de times<br/>[team.controller.js]"]
  node_team_service["Serviço de times<br/>[team.service.js]"]
  node_player_routes["Rotas de jogadores<br/>[player.routes.js]"]
  node_player_controller["Controlador de jogadores"]
  node_player_service["Serviço de escalação<br/>[player.service.js]"]
  node_lineup["Montagem da escalação<br/>[lineup.js]"]
end

subgraph group_storage["Persistência"]
  node_user_repo["Repositório de usuários<br/>[user.repository.js]"]
  node_refresh_repo["Repositório de tokens"]
  node_team_repo["Repositório de times<br/>[team.repository.js]"]
  node_player_repo["Repositório de jogadores"]
  node_prisma["Cliente Prisma<br/>[prisma.js]"]
  node_schema["Modelo de dados<br/>[schema.prisma]"]
  node_postgres[("PostgreSQL")]
end

node_client(("Cliente API"))

node_client -->|"envia requisições"| node_app
node_app -->|"monta rotas"| node_auth_routes
node_app -->|"monta rotas"| node_team_routes
node_app -->|"consulta saúde"| node_prisma
node_app -->|"encaminha erros"| node_error_handler
node_auth_routes -->|"valida entrada"| node_validate
node_auth_routes -->|"protege perfil"| node_authenticate
node_auth_routes -->|"despacha"| node_auth_controller
node_auth_controller -->|"executa operações"| node_auth_service
node_auth_service -->|"consulta usuários"| node_user_repo
node_auth_service -->|"rotaciona tokens"| node_refresh_repo
node_team_routes -->|"protege rotas"| node_authenticate
node_team_routes -->|"valida entrada"| node_validate
node_team_routes -->|"despacha"| node_team_controller
node_team_controller -->|"executa operações"| node_team_service
node_team_service -->|"acessa times"| node_team_repo
node_team_routes -->|"monta rotas"| node_player_routes
node_team_routes -->|"despacha substituição"| node_player_controller
node_player_routes -->|"valida entrada"| node_validate
node_player_routes -->|"despacha"| node_player_controller
node_player_controller -->|"executa operações"| node_player_service
node_player_service -->|"acessa jogadores"| node_player_repo
node_player_service -->|"monta resultado"| node_lineup
node_user_repo -->|"consulta e grava"| node_prisma
node_refresh_repo -->|"consulta e grava"| node_prisma
node_team_repo -->|"consulta e grava"| node_prisma
node_player_repo -->|"consulta e grava"| node_prisma
node_prisma -->|"lê e grava"| node_postgres

click node_app "https://github.com/viniciuslima30/teammanager/blob/main/src/app.js"
click node_auth_routes "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.routes.js"
click node_auth_controller "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.controller.js"
click node_auth_service "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.service.js"
click node_authenticate "https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/authenticate.js"
click node_validate "https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/validate.js"
click node_error_handler "https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/errorHandler.js"
click node_user_repo "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/user.repository.js"
click node_refresh_repo "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/refreshToken.repository.js"
click node_team_routes "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.routes.js"
click node_team_controller "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.controller.js"
click node_team_service "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.service.js"
click node_team_repo "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.repository.js"
click node_player_routes "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.routes.js"
click node_player_controller "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.controller.js"
click node_player_service "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.service.js"
click node_player_repo "https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.repository.js"
click node_lineup "https://github.com/viniciuslima30/teammanager/blob/main/src/utils/lineup.js"
click node_prisma "https://github.com/viniciuslima30/teammanager/blob/main/src/config/prisma.js"
click node_schema "https://github.com/viniciuslima30/teammanager/blob/main/prisma/schema.prisma"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_authenticate,node_validate,node_error_handler,node_client toneBlue
class node_auth_routes,node_auth_controller,node_auth_service toneAmber
class node_team_routes,node_team_controller,node_team_service,node_player_routes,node_player_controller,node_player_service,node_lineup toneMint
class node_user_repo,node_refresh_repo,node_team_repo,node_player_repo,node_prisma,node_schema,node_postgres toneRose
```

## Components

### HTTP e segurança

- [Aplicação Express](https://github.com/viniciuslima30/teammanager/blob/main/src/app.js): `src/app.js`
- [Autenticação JWT](https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/authenticate.js): `src/middlewares/authenticate.js`
- [Validação de entrada](https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/validate.js): `src/middlewares/validate.js`
- [Tratamento de erros](https://github.com/viniciuslima30/teammanager/blob/main/src/middlewares/errorHandler.js): `src/middlewares/errorHandler.js`

### Identidade

- [Rotas de autenticação](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.routes.js): `src/modules/auth/auth.routes.js`
- [Controlador de autenticação](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.controller.js): `src/modules/auth/auth.controller.js`
- [Serviço de autenticação](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/auth.service.js): `src/modules/auth/auth.service.js`

### Times e escalação

- [Rotas de times](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.routes.js): `src/modules/teams/team.routes.js`
- [Controlador de times](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.controller.js): `src/modules/teams/team.controller.js`
- [Serviço de times](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.service.js): `src/modules/teams/team.service.js`
- [Rotas de jogadores](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.routes.js): `src/modules/players/player.routes.js`
- [Controlador de jogadores](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.controller.js): `src/modules/players/player.controller.js`
- [Serviço de escalação](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.service.js): `src/modules/players/player.service.js`
- [Montagem da escalação](https://github.com/viniciuslima30/teammanager/blob/main/src/utils/lineup.js): `src/utils/lineup.js`

### Persistência

- [Repositório de usuários](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/user.repository.js): `src/modules/auth/user.repository.js`
- [Repositório de tokens](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/auth/refreshToken.repository.js): `src/modules/auth/refreshToken.repository.js`
- [Repositório de times](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/teams/team.repository.js): `src/modules/teams/team.repository.js`
- [Repositório de jogadores](https://github.com/viniciuslima30/teammanager/blob/main/src/modules/players/player.repository.js): `src/modules/players/player.repository.js`
- [Cliente Prisma](https://github.com/viniciuslima30/teammanager/blob/main/src/config/prisma.js): `src/config/prisma.js`
- [Modelo de dados](https://github.com/viniciuslima30/teammanager/blob/main/prisma/schema.prisma): `prisma/schema.prisma`
- **PostgreSQL**

### Other components

- **Cliente API**

## Connections

- Cliente API → Aplicação Express: envia requisições
- Aplicação Express → Rotas de autenticação: monta rotas
- Aplicação Express → Rotas de times: monta rotas
- Aplicação Express → Cliente Prisma: consulta saúde
- Aplicação Express → Tratamento de erros: encaminha erros
- Rotas de autenticação → Validação de entrada: valida entrada
- Rotas de autenticação → Autenticação JWT: protege perfil
- Rotas de autenticação → Controlador de autenticação: despacha
- Controlador de autenticação → Serviço de autenticação: executa operações
- Serviço de autenticação → Repositório de usuários: consulta usuários
- Serviço de autenticação → Repositório de tokens: rotaciona tokens
- Rotas de times → Autenticação JWT: protege rotas
- Rotas de times → Validação de entrada: valida entrada
- Rotas de times → Controlador de times: despacha
- Controlador de times → Serviço de times: executa operações
- Serviço de times → Repositório de times: acessa times
- Rotas de times → Rotas de jogadores: monta rotas
- Rotas de times → Controlador de jogadores: despacha substituição
- Rotas de jogadores → Validação de entrada: valida entrada
- Rotas de jogadores → Controlador de jogadores: despacha
- Controlador de jogadores → Serviço de escalação: executa operações
- Serviço de escalação → Repositório de jogadores: acessa jogadores
- Serviço de escalação → Montagem da escalação: monta resultado
- Repositório de usuários → Cliente Prisma: consulta e grava
- Repositório de tokens → Cliente Prisma: consulta e grava
- Repositório de times → Cliente Prisma: consulta e grava
- Repositório de jogadores → Cliente Prisma: consulta e grava
- Cliente Prisma → PostgreSQL: lê e grava
