# allanmaslopes/yoursummoner-api architecture

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

- Interactive diagram: https://gitdiagram.com/allanmaslopes/yoursummoner-api
- Repository: https://github.com/allanmaslopes/yoursummoner-api

## Overview

1. **Overall shape**
   - This is a Spring Boot microservice named **YourSummoner-API**.
   - Its job is to expose a REST API for Riot Games / League of Legends data and act as a thin orchestration layer over external Riot endpoints.

2. **Request entry points**
   - The API surface is split into three controllers:
     - `SummonerController`
     - `ChampionController`
     - `MatchController`
   - These are the primary inbound boundaries for clients consuming the service.

3. **Service layer**
   - Business orchestration sits in `SummonerService`, `ChampionService`, `MatchService`, `ProfileIconService`, and `StaticService`.
   - The services likely coordinate fetching, transforming, and combining Riot responses into API-specific DTOs rather than exposing raw upstream payloads directly.

4. **Outbound integration layer**
   - External HTTP calls are isolated in `SummonerClient`, `ChampionClient`, `MatchClient`, and shared `RESTClient`.
   - This is the main outbound boundary to Riot’s APIs, keeping controller/service code separate from transport details.

5. **Configuration and cross-cutting concerns**
   - `RiotgamesConfiguration` centralizes Riot-related configuration, likely base URLs, credentials, or request settings.
   - `CorsCofiguration` handles browser-origin access rules.
   - `SwaggerConfig` exposes API documentation, which is a visible part of the service contract.

6. **Domain model vs API contract**
   - The `model` package contains rich response structures for Riot data, including:
     - summoner/account objects
     - ranking/profile data
     - match details
     - champion metadata and mastery
   - The `model/dto` package contains outward-facing response shapes such as `SummonerProfileDto`, `RankingDto`, `ChampionDto`, `ChampionMasteryDto`, and `MainChampionDto`.
   - This suggests the service transforms upstream API payloads into a cleaner API contract before returning data to callers.

7. **Riot-specific data domains**
   - The repository is organized around Riot’s main data domains:
     - **Summoner/profile**: `Summoner`, `SummonerDetails`, `Ranking`, `Status`, `ProfileIcon`
     - **Champions**: `Champion`, `ChampionDetail`, `ChampionByMastery`, and supporting nested types like `Spell`, `Skin`, `Passive`
     - **Matches**: `Match`, `MatchRequest`, `InfoMatch`, `Participants`, `Team`, `Perks`, and objective breakdowns
   - This indicates the service is not generic; it is purpose-built for League of Legends profile and match analytics.

8. **Match data complexity**
   - The `model/match/objectives` subtree and associated classes (`Objectives`, `Dragon`, `Baron`, `Tower`, etc.) show that match responses are deeply nested and normalized into dedicated types.
   - That implies the match subsystem is one of the more complex transformation paths in the service.

9. **Error handling boundary**
   - Error models live under `model/error` with `ApiError`, `ErrorJsonApi`, and `ErrorXmlApi`.
   - This suggests the service standardizes failures coming from upstream Riot APIs or its own request validation into structured error payloads.

10. **Utility and request semantics**
   - `RequestApiEnum` likely centralizes the supported Riot request types or endpoints.
   - `UtilsWS` appears to support web-service utility behavior, probably shared request/response handling or URL construction.

11. **Runtime and packaging**
   - The project uses Maven (`pom.xml`) and a standard `src/main/java` / `src/main/resources` layout.
   - `application.properties` is the main runtime configuration entry point.
   - `YourSummonerApiApplication` is the Spring Boot bootstrap class.

12. **Tests**
   - There is a minimal Spring context test at `src/test/java/com/your/summoner/api/RiotGamesApiApplicationTests.java`.
   - That indicates test coverage is currently lightweight and centered on application startup rather than broad functional validation.

13. **Architecture summary for a diagram**
   - The clean diagram is:
     - **Client -> Controller -> Service -> Client -> Riot Games API**
     - with **DTO/model transformation** in the service layer and **config/error handling** as shared supporting concerns.
   - The service does not appear to persist data locally; it is primarily a stateless API aggregation and transformation layer.

Main entry points: [`src/main/java/com/your/summoner/api/client/RESTClient.java`](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/RESTClient.java) (REST Client), [`src/main/java/com/your/summoner/api/service/SummonerService.java`](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/SummonerService.java) (Summoner Service), [`src/main/java/com/your/summoner/api/service/ChampionService.java`](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/ChampionService.java) (Champion Service), [`src/main/java/com/your/summoner/api/YourSummonerApiApplication.java`](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/YourSummonerApiApplication.java) (API App)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_g_bootstrap["Bootstrap"]
  node_app(("API App<br/>Spring Boot app"))
end

subgraph group_g_inbound["Inbound API"]
  node_summoner_controller["Summoner API<br/>REST controller"]
  node_champion_controller["Champion API<br/>REST controller"]
  node_match_controller["Match API<br/>REST controller"]
end

subgraph group_g_service["Services"]
  node_summoner_service{{"Summoner Service"}}
  node_champion_service{{"Champion Service"}}
  node_match_service{{"Match Service<br/>[MatchService.java]"}}
  node_profile_icon_service{{"Icon Service"}}
  node_static_service{{"Static Service<br/>[StaticService.java]"}}
end

subgraph group_g_outbound["Outbound Integration"]
  node_summoner_client["Summoner Client<br/>http client"]
  node_champion_client["Champion Client<br/>http client"]
  node_match_client["Match Client<br/>http client<br/>[MatchClient.java]"]
  node_rest_client["REST Client<br/>transport<br/>[RESTClient.java]"]
  node_riot_api[("Riot Games API<br/>external api")]
end

subgraph group_g_domain["Domain Models"]
  node_summoner_dto["Summoner DTOs<br/>api dto"]
  node_champion_dto["Champion DTOs<br/>api dto<br/>[ChampionDto.java]"]
  node_match_model["Match Models<br/>domain model<br/>[Match.java]"]
  node_champion_model["Champion Models<br/>domain model<br/>[Champion.java]"]
  node_summoner_model["Summoner Models<br/>domain model<br/>[Summoner.java]"]
  node_error_model["Error Models<br/>error contract<br/>[ApiError.java]"]
end

subgraph group_g_support["Support"]
  node_config["Riot Config<br/>configuration"]
  node_swagger_config["Swagger Config<br/>configuration<br/>[SwaggerConfig.java]"]
  node_cors_config["CORS Config<br/>configuration"]
  node_request_enum["Request Enum"]
  node_utils_ws["Utils WS<br/>[UtilsWS.java]"]
end

node_app -->|"starts"| node_summoner_controller
node_app -->|"starts"| node_champion_controller
node_app -->|"starts"| node_match_controller
node_summoner_controller -->|"uses"| node_summoner_service
node_champion_controller -->|"uses"| node_champion_service
node_match_controller -->|"uses"| node_match_service
node_summoner_service -->|"fetches"| node_summoner_client
node_summoner_service -->|"composes"| node_profile_icon_service
node_champion_service -->|"fetches"| node_champion_client
node_champion_service -->|"uses"| node_static_service
node_match_service -->|"fetches"| node_match_client
node_summoner_client -->|"built on"| node_rest_client
node_champion_client -->|"built on"| node_rest_client
node_match_client -->|"built on"| node_rest_client
node_rest_client -->|"calls"| node_riot_api
node_config -->|"configures"| node_rest_client
node_swagger_config -->|"documents"| node_app
node_cors_config -->|"secures"| node_app
node_request_enum -->|"supports"| node_utils_ws
node_utils_ws -->|"supports"| node_rest_client
node_summoner_service -->|"maps to"| node_summoner_dto
node_summoner_service -->|"reads"| node_summoner_model
node_champion_service -->|"maps to"| node_champion_dto
node_champion_service -->|"reads"| node_champion_model
node_match_service -->|"reads"| node_match_model
node_match_service -->|"handles"| node_error_model

click node_app "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/YourSummonerApiApplication.java"
click node_summoner_controller "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/SummonerController.java"
click node_champion_controller "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/ChampionController.java"
click node_match_controller "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/MatchController.java"
click node_summoner_service "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/SummonerService.java"
click node_champion_service "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/ChampionService.java"
click node_match_service "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/MatchService.java"
click node_profile_icon_service "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/ProfileIconService.java"
click node_static_service "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/StaticService.java"
click node_summoner_client "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/SummonerClient.java"
click node_champion_client "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/ChampionClient.java"
click node_match_client "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/MatchClient.java"
click node_rest_client "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/RESTClient.java"
click node_config "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/RiotgamesConfiguration.java"
click node_swagger_config "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/SwaggerConfig.java"
click node_cors_config "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/CorsCofiguration.java"
click node_request_enum "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/enumeration/RequestApiEnum.java"
click node_utils_ws "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/utils/UtilsWS.java"
click node_summoner_dto "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/dto/SummonerProfileDto.java"
click node_champion_dto "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/dto/ChampionDto.java"
click node_match_model "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/Match.java"
click node_champion_model "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/champion/Champion.java"
click node_summoner_model "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/Summoner.java"
click node_error_model "https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/error/ApiError.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_app toneBlue
class node_summoner_controller,node_champion_controller,node_match_controller toneAmber
class node_summoner_service,node_champion_service,node_match_service,node_profile_icon_service,node_static_service toneMint
class node_summoner_client,node_champion_client,node_match_client,node_rest_client,node_riot_api toneRose
class node_summoner_dto,node_champion_dto,node_match_model,node_champion_model,node_summoner_model,node_error_model toneIndigo
class node_config,node_swagger_config,node_cors_config,node_request_enum,node_utils_ws toneTeal
```

## Components

### Bootstrap

Application entry point and startup wiring

- [API App](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/YourSummonerApiApplication.java): Spring Boot app · Application bootstrap and runtime entry point · `src/main/java/com/your/summoner/api/YourSummonerApiApplication.java`

### Inbound API

REST controllers exposed to clients

- [Summoner API](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/SummonerController.java): REST controller · Summoner/profile endpoints · `src/main/java/com/your/summoner/api/controller/SummonerController.java`
- [Champion API](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/ChampionController.java): REST controller · Champion metadata and mastery endpoints · `src/main/java/com/your/summoner/api/controller/ChampionController.java`
- [Match API](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/controller/MatchController.java): REST controller · Match lookup and analysis endpoints · `src/main/java/com/your/summoner/api/controller/MatchController.java`

### Services

Orchestration and transformation layer

- [Summoner Service](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/SummonerService.java): service · Summoner profile orchestration · `src/main/java/com/your/summoner/api/service/SummonerService.java`
- [Champion Service](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/ChampionService.java): service · Champion data orchestration and mapping · `src/main/java/com/your/summoner/api/service/ChampionService.java`
- [Match Service](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/MatchService.java): service · Match orchestration and normalization · `src/main/java/com/your/summoner/api/service/MatchService.java`
- [Icon Service](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/ProfileIconService.java): service · Profile icon lookup and composition · `src/main/java/com/your/summoner/api/service/ProfileIconService.java`
- [Static Service](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/service/StaticService.java): service · Static Riot data access and helpers · `src/main/java/com/your/summoner/api/service/StaticService.java`

### Outbound Integration

HTTP clients used to call Riot endpoints

- [Summoner Client](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/SummonerClient.java): http client · Outbound Riot calls for summoner data · `src/main/java/com/your/summoner/api/client/SummonerClient.java`
- [Champion Client](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/ChampionClient.java): http client · Outbound Riot calls for champion data · `src/main/java/com/your/summoner/api/client/ChampionClient.java`
- [Match Client](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/MatchClient.java): http client · Outbound Riot calls for match data · `src/main/java/com/your/summoner/api/client/MatchClient.java`
- [REST Client](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/client/RESTClient.java): transport · Shared HTTP transport and request handling · `src/main/java/com/your/summoner/api/client/RESTClient.java`
- **Riot Games API**: external api · Upstream Riot endpoint boundary

### Domain Models

Riot data structures and API contracts

- [Summoner DTOs](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/dto/SummonerProfileDto.java): api dto · Outbound profile and ranking response shapes · `src/main/java/com/your/summoner/api/model/dto/SummonerProfileDto.java`
- [Champion DTOs](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/dto/ChampionDto.java): api dto · Outbound champion and mastery response shapes · `src/main/java/com/your/summoner/api/model/dto/ChampionDto.java`
- [Match Models](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/Match.java): domain model · Match request and nested match payloads · `src/main/java/com/your/summoner/api/model/Match.java`
- [Champion Models](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/champion/Champion.java): domain model · Champion payloads and nested champion structures · `src/main/java/com/your/summoner/api/model/champion/Champion.java`
- [Summoner Models](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/Summoner.java): domain model · Summoner, ranking, status, and icon payloads · `src/main/java/com/your/summoner/api/model/Summoner.java`
- [Error Models](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/model/error/ApiError.java): error contract · Standardized API and upstream error payloads · `src/main/java/com/your/summoner/api/model/error/ApiError.java`

### Support

Configuration, enums, and shared utilities

- [Riot Config](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/RiotgamesConfiguration.java): configuration · Riot base configuration and request settings · `src/main/java/com/your/summoner/api/config/RiotgamesConfiguration.java`
- [Swagger Config](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/SwaggerConfig.java): configuration · API documentation setup · `src/main/java/com/your/summoner/api/config/SwaggerConfig.java`
- [CORS Config](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/config/CorsCofiguration.java): configuration · Browser access policy · `src/main/java/com/your/summoner/api/config/CorsCofiguration.java`
- [Request Enum](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/enumeration/RequestApiEnum.java): enum · Supported request and endpoint types · `src/main/java/com/your/summoner/api/enumeration/RequestApiEnum.java`
- [Utils WS](https://github.com/allanmaslopes/yoursummoner-api/blob/main/src/main/java/com/your/summoner/api/utils/UtilsWS.java): utility · Shared web-service helpers · `src/main/java/com/your/summoner/api/utils/UtilsWS.java`

## Connections

- API App → Summoner API: starts · Bootstraps the summoner API
- API App → Champion API: starts · Bootstraps the champion API
- API App → Match API: starts · Bootstraps the match API
- Summoner API → Summoner Service: uses · Delegates summoner requests
- Champion API → Champion Service: uses · Delegates champion requests
- Match API → Match Service: uses · Delegates match requests
- Summoner Service → Summoner Client: fetches · Retrieves upstream summoner data
- Summoner Service → Icon Service: composes · Adds profile icon data
- Champion Service → Champion Client: fetches · Retrieves upstream champion data
- Champion Service → Static Service: uses · Reads static champion data
- Match Service → Match Client: fetches · Retrieves upstream match data
- Summoner Client → REST Client: built on · Shares HTTP transport
- Champion Client → REST Client: built on · Shares HTTP transport
- Match Client → REST Client: built on · Shares HTTP transport
- REST Client → Riot Games API: calls · Outbound Riot API traffic
- Riot Config → REST Client: configures · Provides Riot HTTP settings
- Swagger Config → API App: documents · Exposes API documentation
- CORS Config → API App: secures · Configures browser access
- Request Enum → Utils WS: supports · Used in request routing helpers
- Utils WS → REST Client: supports · Assists shared transport logic
- Summoner Service → Summoner DTOs: maps to · Transforms domain data to API DTOs
- Summoner Service → Summoner Models: reads · Consumes summoner domain objects
- Champion Service → Champion DTOs: maps to · Transforms champion data to API DTOs
- Champion Service → Champion Models: reads · Consumes champion domain objects
- Match Service → Match Models: reads · Consumes match domain objects
- Match Service → Error Models: handles · Normalizes API failures into error contracts
