# theupperpart/leaguehub-backend architecture

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

- Interactive diagram: https://gitdiagram.com/theupperpart/leaguehub-backend
- Repository: https://github.com/theupperpart/leaguehub-backend

## Overview

LeagueHub is a Spring Boot backend for amateur esports tournaments. Players and organizers authenticate, create or join tournament channels, manage participation and rules, and run matches with bracket, readiness, chat, and result features. The central runtime path is channel creation and enrollment into match play; account, notices, email, and image uploads are supporting capabilities. The README documents Riot-result checks and Redis-backed chat, but the relevant implementation was not sampled, so those links are shown as unverified where needed.

Main entry points: [`src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java`](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java) (Match operations), [`src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java`](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java) (Login and tokens), [`src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java`](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java) (Channel setup and status), [`src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java`](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java) (Bracket and match queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and access"]
  node_auth["Login and tokens"]
  node_members["Member profiles<br/>[MemberService.java]"]
  node_member_store[("Member records")]
  node_jwt["JWT handling<br/>[JwtService.java]"]
  node_email["Email verification<br/>[EmailService.java]"]
end

subgraph group_tournaments["Tournament setup"]
  node_channels["Channel setup and status"]
  node_channel_store[("Channel records<br/>[Channel.java]")]
  node_channel_rules["Channel rules and info"]
  node_participants["Enrollment and roles"]
  node_participant_queries["Participant queries"]
  node_participant_store[("Participant records<br/>[Participant.java]")]
end

subgraph group_competition["Match operations"]
  node_bracket["Bracket and match queries"]
  node_match_ops["Match operations<br/>[MatchService.java]"]
  node_match_store[("Matches and sets<br/>[Match.java]")]
  node_match_players[("Match player records<br/>[MatchPlayer.java]")]
  node_chat["Live match chat"]
end

subgraph group_community["Community services"]
  node_notices["Game and platform notices<br/>[NoticeService.java]"]
end

subgraph group_platform["Platform integrations"]
  node_redis[("Redis tokens and chat<br/>[RedisService.java]")]
  node_uploads["Image uploads"]
end

node_user(("Member or organizer"))
node_kakao["Kakao identity"]
node_riot["Riot game API"]
node_s3["AWS S3"]

node_user -->|"requests login"| node_auth
node_auth -->|"requests identity"| node_kakao
node_auth -->|"finds or saves"| node_members
node_members -->|"reads and writes"| node_member_store
node_auth -->|"creates tokens"| node_jwt
node_jwt -->|"stores refresh token"| node_redis
node_user -->|"creates channel"| node_channels
node_channels -->|"creates and updates"| node_channel_store
node_channels -->|"creates host entry"| node_participant_store
node_channels -->|"creates submatches"| node_match_ops
node_user -->|"joins channel"| node_participants
node_participants -.->|"manages enrollment"| node_participant_store
node_user -->|"views participants"| node_participant_queries
node_participant_queries -->|"queries"| node_participant_store
node_user -->|"views bracket"| node_bracket
node_bracket -->|"loads match data"| node_match_store
node_bracket -->|"loads player data"| node_match_players
node_user -->|"manages match"| node_match_ops
node_match_ops -->|"creates and updates"| node_match_store
node_match_ops -->|"assigns players"| node_match_players
node_user -->|"chats in match"| node_chat
node_chat -.->|"uses for chat"| node_redis
node_match_ops -.->|"checks game results"| node_riot
node_user -->|"views notices"| node_notices
node_user -.->|"verifies email"| node_email
node_user -.->|"uploads images"| node_uploads
node_uploads -.->|"stores images"| node_s3

click node_auth "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java"
click node_members "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberService.java"
click node_member_store "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/repository/MemberRepository.java"
click node_jwt "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/JwtService.java"
click node_redis "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/global/redis/service/RedisService.java"
click node_channels "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java"
click node_channel_store "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/entity/Channel.java"
click node_channel_rules "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelRuleService.java"
click node_participants "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantManagementService.java"
click node_participant_queries "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantQueryService.java"
click node_participant_store "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/entity/Participant.java"
click node_bracket "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java"
click node_match_ops "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java"
click node_match_store "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/entity/Match.java"
click node_match_players "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/entity/MatchPlayer.java"
click node_chat "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/chat/MatchChatService.java"
click node_notices "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/notice/service/NoticeService.java"
click node_email "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/email/service/EmailService.java"
click node_uploads "https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/global/aws/s3/S3FileUploadService.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_auth,node_members,node_member_store,node_jwt,node_email toneBlue
class node_channels,node_channel_store,node_channel_rules,node_participants,node_participant_queries,node_participant_store toneAmber
class node_bracket,node_match_ops,node_match_store,node_match_players,node_chat,node_riot toneMint
class node_notices toneRose
class node_redis,node_uploads,node_user,node_kakao,node_s3 toneIndigo
```

## Components

### Identity and access

- [Login and tokens](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java): `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java`
- [Member profiles](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberService.java): `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberService.java`
- [Member records](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/repository/MemberRepository.java): `src/main/java/leaguehub/leaguehubbackend/domain/member/repository/MemberRepository.java`
- [JWT handling](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/member/service/JwtService.java): `src/main/java/leaguehub/leaguehubbackend/domain/member/service/JwtService.java`
- [Email verification](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/email/service/EmailService.java): `src/main/java/leaguehub/leaguehubbackend/domain/email/service/EmailService.java`

### Tournament setup

- [Channel setup and status](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java): `src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java`
- [Channel records](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/entity/Channel.java): `src/main/java/leaguehub/leaguehubbackend/domain/channel/entity/Channel.java`
- [Channel rules and info](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelRuleService.java): `src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelRuleService.java`
- [Enrollment and roles](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantManagementService.java): `src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantManagementService.java`
- [Participant queries](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantQueryService.java): `src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantQueryService.java`
- [Participant records](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/participant/entity/Participant.java): `src/main/java/leaguehub/leaguehubbackend/domain/participant/entity/Participant.java`

### Match operations

- [Bracket and match queries](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java): `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java`
- [Match operations](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java): `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java`
- [Matches and sets](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/entity/Match.java): `src/main/java/leaguehub/leaguehubbackend/domain/match/entity/Match.java`
- [Match player records](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/entity/MatchPlayer.java): `src/main/java/leaguehub/leaguehubbackend/domain/match/entity/MatchPlayer.java`
- [Live match chat](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/match/service/chat/MatchChatService.java): `src/main/java/leaguehub/leaguehubbackend/domain/match/service/chat/MatchChatService.java`

### Community services

- [Game and platform notices](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/domain/notice/service/NoticeService.java): `src/main/java/leaguehub/leaguehubbackend/domain/notice/service/NoticeService.java`

### Platform integrations

- [Redis tokens and chat](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/global/redis/service/RedisService.java): `src/main/java/leaguehub/leaguehubbackend/global/redis/service/RedisService.java`
- [Image uploads](https://github.com/theupperpart/leaguehub-backend/blob/develop/src/main/java/leaguehub/leaguehubbackend/global/aws/s3/S3FileUploadService.java): `src/main/java/leaguehub/leaguehubbackend/global/aws/s3/S3FileUploadService.java`

### Other components

- **Member or organizer**
- **Kakao identity**
- **Riot game API**
- **AWS S3**

## Connections

- Member or organizer → Login and tokens: requests login
- Login and tokens → Kakao identity: requests identity (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java`)
- Login and tokens → Member profiles: finds or saves (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java`)
- Member profiles → Member records: reads and writes (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberService.java`)
- Login and tokens → JWT handling: creates tokens (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/member/service/MemberAuthService.java`)
- JWT handling → Redis tokens and chat: stores refresh token (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/member/service/JwtService.java`)
- Member or organizer → Channel setup and status: creates channel
- Channel setup and status → Channel records: creates and updates (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java`)
- Channel setup and status → Participant records: creates host entry (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java`)
- Channel setup and status → Match operations: creates submatches (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/channel/service/ChannelService.java`)
- Member or organizer → Enrollment and roles: joins channel
- Enrollment and roles → Participant records: manages enrollment (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantManagementService.java`)
- Member or organizer → Participant queries: views participants
- Participant queries → Participant records: queries (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/participant/service/ParticipantQueryService.java`)
- Member or organizer → Bracket and match queries: views bracket
- Bracket and match queries → Matches and sets: loads match data (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java`)
- Bracket and match queries → Match player records: loads player data (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchQueryService.java`)
- Member or organizer → Match operations: manages match
- Match operations → Matches and sets: creates and updates (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java`)
- Match operations → Match player records: assigns players (evidence: `src/main/java/leaguehub/leaguehubbackend/domain/match/service/MatchService.java`)
- Member or organizer → Live match chat: chats in match
- Live match chat → Redis tokens and chat: uses for chat
- Match operations → Riot game API: checks game results
- Member or organizer → Game and platform notices: views notices
- Member or organizer → Email verification: verifies email
- Member or organizer → Image uploads: uploads images
- Image uploads → AWS S3: stores images
