# nyainaratolojanahary/ultimate-team-race architecture

> Architecture diagram of the GitHub repository nyainaratolojanahary/ultimate-team-race, 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/nyainaratolojanahary/ultimate-team-race
- Repository: https://github.com/nyainaratolojanahary/ultimate-team-race

## Overview

Ultimate Team Race is a Java web application for managing race stages, rider participation and arrival times, team penalties, and provisional and final rankings. Admins and teams use separate web views; administrators also import race data and generate winner certificates. The graph separates request handling, race operations, ranking/reporting, and persistence. Sampled code confirms CSV utilities perform database inserts and that models query/update race data; wiring among unsampled ranking and penalty routes is shown only where the repository’s documented capabilities support the subsystem, not as an invented sequence.

Main entry points: [`UltimateRaceTeam/web`](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web) (Admin pages), [`UltimateRaceTeam/src/java/Models`](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/src/java/Models) (Race rankings), [`UltimateRaceTeam/src/java/Controllers/AjouterCoureurEtapeServlet.java`](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjouterCoureurEtapeServlet.java) (Rider assignment), [`UltimateRaceTeam/src/java/Models/CoureurEtape.java`](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/CoureurEtape.java) (Stage participation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web access"]
  node_adminui["Admin pages"]
  node_teamui["Team pages"]
  node_adminlogin["Admin login<br/>[LoginServlet.java]"]
  node_teamlogin["Team login"]
end

subgraph group_race["Race operations"]
  node_import["Race data import"]
  node_csv["CSV conversion<br/>[CsvUtilities.java]"]
  node_stage["Stage management<br/>[EtapeCourse.java]"]
  node_roster["Rider assignment"]
  node_times["Arrival times"]
  node_penalties["Team penalties"]
end

subgraph group_results["Results and reporting"]
  node_rankings["Race rankings"]
  node_rankingviews["Ranking views"]
  node_certificate["Certificate PDF"]
end

subgraph group_data["Domain and persistence"]
  node_rider["Rider records<br/>[Coureur.java]"]
  node_participation["Stage participation<br/>[CoureurEtape.java]"]
  node_penaltymodel["Penalty records<br/>[Penalite.java]"]
  node_teammodel["Team records<br/>[Equipe.java]"]
  node_database[("PostgreSQL database")]
end

node_admin(("Race administrator"))
node_team(("Team user"))

node_admin -->|"uses"| node_adminui
node_team -->|"uses"| node_teamui
node_adminui -->|"submits login"| node_adminlogin
node_teamui -->|"submits login"| node_teamlogin
node_adminui -->|"uploads files"| node_import
node_import -->|"parses CSV"| node_csv
node_csv -->|"inserts race data"| node_database
node_adminui -->|"manages stages"| node_stage
node_teamui -->|"assigns riders"| node_roster
node_roster -->|"loads riders"| node_rider
node_roster -->|"assigns stage riders"| node_participation
node_adminui -->|"records arrivals"| node_times
node_times -->|"records times"| node_participation
node_adminui -->|"records penalties"| node_penalties
node_penalties -->|"updates penalties"| node_penaltymodel
node_adminui -->|"views standings"| node_rankings
node_teamui -->|"views standings"| node_rankings
node_rankings -->|"displays results"| node_rankingviews
node_adminui -->|"requests certificate"| node_certificate
node_certificate -->|"loads standings"| node_rankings
node_stage -->|"reads and writes"| node_database
node_participation -->|"reads and writes"| node_database
node_rider -->|"reads records"| node_database
node_teammodel -->|"reads records"| node_database
node_penaltymodel -->|"reads and writes"| node_database

click node_adminui "https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web"
click node_teamui "https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web"
click node_adminlogin "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/LoginServlet.java"
click node_teamlogin "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/LoginEquipeServlet.java"
click node_import "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/ImportMultipleServlet.java"
click node_csv "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Csv/CsvUtilities.java"
click node_stage "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/EtapeCourse.java"
click node_roster "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjouterCoureurEtapeServlet.java"
click node_times "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjouterTempsCoureurEtapeServlet.java"
click node_penalties "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjoutPenalitesEquipeServlet.java"
click node_rider "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Coureur.java"
click node_participation "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/CoureurEtape.java"
click node_penaltymodel "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Penalite.java"
click node_teammodel "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Equipe.java"
click node_rankings "https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/src/java/Models"
click node_rankingviews "https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web"
click node_certificate "https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/GeneratePDFServlet.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_adminui,node_teamui,node_adminlogin,node_teamlogin,node_team toneBlue
class node_import,node_csv,node_stage,node_roster,node_times,node_penalties toneAmber
class node_rankings,node_rankingviews,node_certificate toneMint
class node_rider,node_participation,node_penaltymodel,node_teammodel,node_database toneRose
class node_admin toneIndigo
```

## Components

### Web access

- [Admin pages](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web): `UltimateRaceTeam/web`
- [Team pages](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web): `UltimateRaceTeam/web`
- [Admin login](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/LoginServlet.java): `UltimateRaceTeam/src/java/Controllers/LoginServlet.java`
- [Team login](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/LoginEquipeServlet.java): `UltimateRaceTeam/src/java/Controllers/LoginEquipeServlet.java`

### Race operations

- [Race data import](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/ImportMultipleServlet.java): `UltimateRaceTeam/src/java/Controllers/ImportMultipleServlet.java`
- [CSV conversion](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Csv/CsvUtilities.java): `UltimateRaceTeam/src/java/Csv/CsvUtilities.java`
- [Stage management](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/EtapeCourse.java): `UltimateRaceTeam/src/java/Models/EtapeCourse.java`
- [Rider assignment](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjouterCoureurEtapeServlet.java): `UltimateRaceTeam/src/java/Controllers/AjouterCoureurEtapeServlet.java`
- [Arrival times](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjouterTempsCoureurEtapeServlet.java): `UltimateRaceTeam/src/java/Controllers/AjouterTempsCoureurEtapeServlet.java`
- [Team penalties](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/AjoutPenalitesEquipeServlet.java): `UltimateRaceTeam/src/java/Controllers/AjoutPenalitesEquipeServlet.java`

### Results and reporting

- [Race rankings](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/src/java/Models): `UltimateRaceTeam/src/java/Models`
- [Ranking views](https://github.com/nyainaratolojanahary/ultimate-team-race/tree/main/UltimateRaceTeam/web): `UltimateRaceTeam/web`
- [Certificate PDF](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Controllers/GeneratePDFServlet.java): `UltimateRaceTeam/src/java/Controllers/GeneratePDFServlet.java`

### Domain and persistence

- [Rider records](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Coureur.java): `UltimateRaceTeam/src/java/Models/Coureur.java`
- [Stage participation](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/CoureurEtape.java): `UltimateRaceTeam/src/java/Models/CoureurEtape.java`
- [Penalty records](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Penalite.java): `UltimateRaceTeam/src/java/Models/Penalite.java`
- [Team records](https://github.com/nyainaratolojanahary/ultimate-team-race/blob/main/UltimateRaceTeam/src/java/Models/Equipe.java): `UltimateRaceTeam/src/java/Models/Equipe.java`
- **PostgreSQL database**

### Other components

- **Race administrator**
- **Team user**

## Connections

- Race administrator → Admin pages: uses
- Team user → Team pages: uses
- Admin pages → Admin login: submits login
- Team pages → Team login: submits login
- Admin pages → Race data import: uploads files
- Race data import → CSV conversion: parses CSV
- CSV conversion → PostgreSQL database: inserts race data
- Admin pages → Stage management: manages stages
- Team pages → Rider assignment: assigns riders
- Rider assignment → Rider records: loads riders
- Rider assignment → Stage participation: assigns stage riders
- Admin pages → Arrival times: records arrivals
- Arrival times → Stage participation: records times
- Admin pages → Team penalties: records penalties
- Team penalties → Penalty records: updates penalties
- Admin pages → Race rankings: views standings
- Team pages → Race rankings: views standings
- Race rankings → Ranking views: displays results
- Admin pages → Certificate PDF: requests certificate
- Certificate PDF → Race rankings: loads standings
- Stage management → PostgreSQL database: reads and writes
- Stage participation → PostgreSQL database: reads and writes
- Rider records → PostgreSQL database: reads records
- Team records → PostgreSQL database: reads records
- Penalty records → PostgreSQL database: reads and writes
