# danilop85/cli-loterias-caixa architecture

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

- Interactive diagram: https://gitdiagram.com/danilop85/cli-loterias-caixa
- Repository: https://github.com/danilop85/cli-loterias-caixa

## Overview

Loterias Caixa is a Spring MVC/JSP and REST application for importing Caixa lottery draws, storing results, checking users’ bets, and exploring or exporting statistical features. The main workflow starts when a user requests an import: the API dispatches background work, which fetches draws, derives features, saves them, and streams progress. Users can then browse results, register bets, and compare them with draws; separate analytics and dataset services support dashboards and ML study. The graph reflects documented routes and sampled service calls; unsampled implementation details are left out.

Main entry points: [`src/main/java/br/com/dpsnqmk/controller/api/ConcursoRestController.java`](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/api/ConcursoRestController.java) (Draw API), [`src/main/java/br/com/dpsnqmk/service/JogoService.java`](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/JogoService.java) (Game service), [`src/main/java/br/com/dpsnqmk/controller/web/PaginasController.java`](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/web/PaginasController.java) (Page controller), [`src/main/java/br/com/dpsnqmk/repository/ConcursoRepository.java`](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/repository/ConcursoRepository.java) (Draw repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["Web and API"]
  node_web["Web pages"]
  node_pages["Page controller"]
  node_drawapi["Draw API"]
  node_gameapi["Game API"]
end

subgraph group_import["Draw Import"]
  node_importer["Import service"]
  node_http["HTTP client"]
  node_status["Import status"]
end

subgraph group_domain["Lottery Features"]
  node_lottery["Lottery rules<br/>[Loteria.java]"]
  node_games["Game service<br/>[JogoService.java]"]
  node_prizes["Prize service<br/>[PremioService.java]"]
  node_statistics["Statistics"]
  node_dataset["Dataset export"]
end

subgraph group_persistence["Persistence"]
  node_drawrepo["Draw repository"]
  node_gamerepo["Game repository"]
end

node_user(("User"))
node_caixa{{"Caixa API"}}
node_mongo[("MongoDB")]

node_user -->|"requests import or data"| node_drawapi
node_drawapi -->|"starts, checks, subscribes"| node_importer
node_importer -->|"fetches draws"| node_http
node_http -->|"requests draw data"| node_caixa
node_importer -->|"reads and saves draws"| node_drawrepo
node_importer -->|"updates progress"| node_status
node_importer -->|"streams SSE progress"| node_user
node_user -->|"opens pages"| node_pages
node_pages -->|"dispatches views"| node_web
node_pages -->|"reads draw pages"| node_drawrepo
node_pages -->|"reads import status"| node_importer
node_pages -->|"requests statistics"| node_statistics
node_pages -->|"requests game summaries"| node_games
node_user -->|"manages games"| node_gameapi
node_gameapi -->|"delegates game actions"| node_games
node_games -->|"saves and reads games"| node_gamerepo
node_games -->|"reads draw results"| node_drawrepo
node_games -->|"validates and checks prizes"| node_lottery
node_games -->|"looks up prize values"| node_prizes
node_drawapi -->|"reads draw records"| node_drawrepo
node_drawapi -->|"checks a draw"| node_games
node_drawapi -->|"requests aggregates"| node_statistics
node_drawapi -->|"requests export data"| node_dataset
node_drawapi -->|"requests price table"| node_prizes
node_statistics -->|"counts draws"| node_drawrepo
node_statistics -->|"aggregates draw features"| node_mongo
node_dataset -->|"reads ordered draws"| node_drawrepo
node_prizes -.->|"fetches missing prize rates"| node_http
node_prizes -.->|"caches prize rates"| node_drawrepo

click node_web "https://github.com/danilop85/cli-loterias-caixa/tree/main/src/main/webapp/WEB-INF/jsp"
click node_pages "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/web/PaginasController.java"
click node_drawapi "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/api/ConcursoRestController.java"
click node_gameapi "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/api/JogoRestController.java"
click node_importer "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/ImportacaoService.java"
click node_http "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/impl/HttpServiceImpl.java"
click node_status "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/StatusImportacao.java"
click node_lottery "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/enums/Loteria.java"
click node_games "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/JogoService.java"
click node_prizes "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/PremioService.java"
click node_statistics "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/EstatisticaService.java"
click node_dataset "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/DatasetService.java"
click node_drawrepo "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/repository/ConcursoRepository.java"
click node_gamerepo "https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/repository/JogoRepository.java"

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_web,node_pages,node_drawapi,node_gameapi,node_user toneBlue
class node_importer,node_http,node_status,node_mongo toneAmber
class node_lottery,node_games,node_prizes,node_statistics,node_dataset,node_caixa toneMint
class node_drawrepo,node_gamerepo toneRose
```

## Components

### Web and API

- [Web pages](https://github.com/danilop85/cli-loterias-caixa/tree/main/src/main/webapp/WEB-INF/jsp): `src/main/webapp/WEB-INF/jsp`
- [Page controller](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/web/PaginasController.java): `src/main/java/br/com/dpsnqmk/controller/web/PaginasController.java`
- [Draw API](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/api/ConcursoRestController.java): `src/main/java/br/com/dpsnqmk/controller/api/ConcursoRestController.java`
- [Game API](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/controller/api/JogoRestController.java): `src/main/java/br/com/dpsnqmk/controller/api/JogoRestController.java`

### Draw Import

- [Import service](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/ImportacaoService.java): `src/main/java/br/com/dpsnqmk/service/ImportacaoService.java`
- [HTTP client](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/impl/HttpServiceImpl.java): `src/main/java/br/com/dpsnqmk/service/impl/HttpServiceImpl.java`
- [Import status](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/StatusImportacao.java): `src/main/java/br/com/dpsnqmk/service/StatusImportacao.java`

### Lottery Features

- [Lottery rules](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/enums/Loteria.java): `src/main/java/br/com/dpsnqmk/enums/Loteria.java`
- [Game service](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/JogoService.java): `src/main/java/br/com/dpsnqmk/service/JogoService.java`
- [Prize service](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/PremioService.java): `src/main/java/br/com/dpsnqmk/service/PremioService.java`
- [Statistics](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/EstatisticaService.java): `src/main/java/br/com/dpsnqmk/service/EstatisticaService.java`
- [Dataset export](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/service/DatasetService.java): `src/main/java/br/com/dpsnqmk/service/DatasetService.java`

### Persistence

- [Draw repository](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/repository/ConcursoRepository.java): `src/main/java/br/com/dpsnqmk/repository/ConcursoRepository.java`
- [Game repository](https://github.com/danilop85/cli-loterias-caixa/blob/main/src/main/java/br/com/dpsnqmk/repository/JogoRepository.java): `src/main/java/br/com/dpsnqmk/repository/JogoRepository.java`

### Other components

- **User**
- **Caixa API**
- **MongoDB**

## Connections

- User → Draw API: requests import or data
- Draw API → Import service: starts, checks, subscribes
- Import service → HTTP client: fetches draws
- HTTP client → Caixa API: requests draw data
- Import service → Draw repository: reads and saves draws
- Import service → Import status: updates progress
- Import service → User: streams SSE progress
- User → Page controller: opens pages
- Page controller → Web pages: dispatches views
- Page controller → Draw repository: reads draw pages
- Page controller → Import service: reads import status
- Page controller → Statistics: requests statistics
- Page controller → Game service: requests game summaries
- User → Game API: manages games
- Game API → Game service: delegates game actions
- Game service → Game repository: saves and reads games
- Game service → Draw repository: reads draw results
- Game service → Lottery rules: validates and checks prizes
- Game service → Prize service: looks up prize values
- Draw API → Draw repository: reads draw records
- Draw API → Game service: checks a draw
- Draw API → Statistics: requests aggregates
- Draw API → Dataset export: requests export data
- Draw API → Prize service: requests price table
- Statistics → Draw repository: counts draws
- Statistics → MongoDB: aggregates draw features
- Dataset export → Draw repository: reads ordered draws
- Prize service → HTTP client: fetches missing prize rates
- Prize service → Draw repository: caches prize rates
