# cuong28022003/engcomic_backend architecture

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

- Interactive diagram: https://gitdiagram.com/cuong28022003/engcomic_backend
- Repository: https://github.com/cuong28022003/engcomic_backend

## Overview

EngComic is a Spring Boot backend for learning English through comics, with reading, vocabulary tools, and game-like progression. The main user journey is to browse comics and chapters, record reading activity, and build learning progress through character usage and XP; users can also collect characters, cards, and decks. The graph preserves the README’s other major feature areas. Source excerpts directly support some controller/service calls; broader feature links follow the documented API and project structure, so uncertain internal wiring is not expanded.

Main entry points: [`src/main/java/mobile/repository`](https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/repository) (Data repositories), [`src/main/java/mobile/Service/ComicService.java`](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/ComicService.java) (Comic management), [`src/main/java/mobile/Service/CharacterUsageService.java`](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/CharacterUsageService.java) (Vocabulary usage), [`src/main/java/mobile/controller/AuthentiactionController.java`](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/AuthentiactionController.java) (Authentication API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Comic content"]
  node_comic_api["Comic APIs"]
  node_comic_service["Comic management<br/>[ComicService.java]"]
  node_chapters["Chapters and seasons"]
  node_social["Ratings and comments"]
end

subgraph group_learning["Learning"]
  node_reading_api["Reading progress"]
  node_reading_service["Reading tracking"]
  node_vocabulary["Vocabulary usage"]
  node_translator["Translation and OCR"]
  node_srs["Spaced repetition<br/>[SrsAlgorithm.java]"]
end

subgraph group_game["Gamification"]
  node_gacha["Gacha and packs"]
  node_collection["Cards and decks"]
  node_character["Character collection"]
  node_progress["XP and ranking"]
  node_monetization["Topup and premium"]
end

subgraph group_identity["Identity and access"]
  node_auth_api["Authentication API"]
  node_user_service["User management<br/>[UserService.java]"]
  node_security["JWT security"]
end

subgraph group_platform["Platform services"]
  node_repositories["Data repositories"]
  node_mongo[("MongoDB")]
  node_cloudinary["Image storage"]
  node_cloud_service[("Cloudinary")]
  node_email_service["Email notifications"]
  node_mail(("Mail provider"))
end

node_reader(("Reader"))

node_reader -->|"requests"| node_comic_api
node_comic_api -->|"calls"| node_comic_service
node_reader -->|"requests"| node_chapters
node_reader -->|"starts or completes"| node_reading_api
node_reading_api -->|"calls"| node_reading_service
node_reader -->|"practises"| node_vocabulary
node_reader -->|"requests lookup"| node_translator
node_vocabulary -->|"uses algorithm"| node_srs
node_reader -->|"rates or comments"| node_social
node_reader -->|"pulls or opens"| node_gacha
node_reader -->|"manages cards"| node_collection
node_reader -->|"collects"| node_character
node_reader -->|"tracks progress"| node_progress
node_reader -->|"tops up"| node_monetization
node_reader -->|"authenticates"| node_auth_api
node_auth_api -->|"calls"| node_user_service
node_security -->|"loads user details"| node_user_service
node_comic_service -->|"reads and writes"| node_repositories
node_chapters -->|"reads and writes"| node_repositories
node_reading_service -->|"reads and writes"| node_repositories
node_vocabulary -->|"reads and writes"| node_repositories
node_gacha -->|"reads and writes"| node_repositories
node_collection -->|"reads and writes"| node_repositories
node_character -->|"reads and writes"| node_repositories
node_progress -->|"reads and writes"| node_repositories
node_monetization -->|"reads and writes"| node_repositories
node_user_service -->|"reads and writes"| node_repositories
node_repositories -->|"persists data"| node_mongo
node_comic_service -->|"uploads images"| node_cloudinary
node_cloudinary -->|"stores images"| node_cloud_service
node_auth_api -->|"sends account mail"| node_email_service
node_email_service -->|"sends email"| node_mail

click node_comic_api "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/ComicController.java"
click node_comic_service "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/ComicService.java"
click node_chapters "https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/Service"
click node_social "https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/controller"
click node_reading_api "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/ReadingController.java"
click node_reading_service "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/ReadingService.java"
click node_vocabulary "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/CharacterUsageService.java"
click node_translator "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/TranslatorController.java"
click node_srs "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/config/SrsAlgorithm.java"
click node_gacha "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/GachaController.java"
click node_collection "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/CardController.java"
click node_character "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/CharacterService.java"
click node_progress "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/UserStatsController.java"
click node_monetization "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/TopupController.java"
click node_auth_api "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/AuthentiactionController.java"
click node_user_service "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/UserService.java"
click node_security "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/security/config/AppSecurityConfig.java"
click node_repositories "https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/repository"
click node_cloudinary "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/Impl/CloudinaryServiceImpl.java"
click node_email_service "https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/Impl/EmailServiceImpl.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_comic_api,node_comic_service,node_chapters,node_social toneBlue
class node_reading_api,node_reading_service,node_vocabulary,node_translator,node_srs toneAmber
class node_gacha,node_collection,node_character,node_progress,node_monetization toneMint
class node_auth_api,node_user_service,node_security toneRose
class node_repositories,node_mongo,node_cloudinary,node_cloud_service,node_email_service,node_mail,node_reader toneIndigo
```

## Components

### Comic content

- [Comic APIs](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/ComicController.java): `src/main/java/mobile/controller/ComicController.java`
- [Comic management](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/ComicService.java): `src/main/java/mobile/Service/ComicService.java`
- [Chapters and seasons](https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/Service): `src/main/java/mobile/Service`
- [Ratings and comments](https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/controller): `src/main/java/mobile/controller`

### Learning

- [Reading progress](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/ReadingController.java): `src/main/java/mobile/controller/ReadingController.java`
- [Reading tracking](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/ReadingService.java): `src/main/java/mobile/Service/ReadingService.java`
- [Vocabulary usage](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/CharacterUsageService.java): `src/main/java/mobile/Service/CharacterUsageService.java`
- [Translation and OCR](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/TranslatorController.java): `src/main/java/mobile/controller/TranslatorController.java`
- [Spaced repetition](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/config/SrsAlgorithm.java): `src/main/java/mobile/config/SrsAlgorithm.java`

### Gamification

- [Gacha and packs](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/GachaController.java): `src/main/java/mobile/controller/GachaController.java`
- [Cards and decks](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/CardController.java): `src/main/java/mobile/controller/CardController.java`
- [Character collection](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/CharacterService.java): `src/main/java/mobile/Service/CharacterService.java`
- [XP and ranking](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/UserStatsController.java): `src/main/java/mobile/controller/UserStatsController.java`
- [Topup and premium](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/TopupController.java): `src/main/java/mobile/controller/TopupController.java`

### Identity and access

- [Authentication API](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/controller/AuthentiactionController.java): `src/main/java/mobile/controller/AuthentiactionController.java`
- [User management](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/UserService.java): `src/main/java/mobile/Service/UserService.java`
- [JWT security](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/security/config/AppSecurityConfig.java): `src/main/java/mobile/security/config/AppSecurityConfig.java`

### Platform services

- [Data repositories](https://github.com/cuong28022003/engcomic_backend/tree/main/src/main/java/mobile/repository): `src/main/java/mobile/repository`
- **MongoDB**
- [Image storage](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/Impl/CloudinaryServiceImpl.java): `src/main/java/mobile/Service/Impl/CloudinaryServiceImpl.java`
- **Cloudinary**
- [Email notifications](https://github.com/cuong28022003/engcomic_backend/blob/main/src/main/java/mobile/Service/Impl/EmailServiceImpl.java): `src/main/java/mobile/Service/Impl/EmailServiceImpl.java`
- **Mail provider**

### Other components

- **Reader**

## Connections

- Reader → Comic APIs: requests
- Comic APIs → Comic management: calls
- Reader → Chapters and seasons: requests
- Reader → Reading progress: starts or completes
- Reading progress → Reading tracking: calls
- Reader → Vocabulary usage: practises
- Reader → Translation and OCR: requests lookup
- Vocabulary usage → Spaced repetition: uses algorithm
- Reader → Ratings and comments: rates or comments
- Reader → Gacha and packs: pulls or opens
- Reader → Cards and decks: manages cards
- Reader → Character collection: collects
- Reader → XP and ranking: tracks progress
- Reader → Topup and premium: tops up
- Reader → Authentication API: authenticates
- Authentication API → User management: calls
- JWT security → User management: loads user details
- Comic management → Data repositories: reads and writes
- Chapters and seasons → Data repositories: reads and writes
- Reading tracking → Data repositories: reads and writes
- Vocabulary usage → Data repositories: reads and writes
- Gacha and packs → Data repositories: reads and writes
- Cards and decks → Data repositories: reads and writes
- Character collection → Data repositories: reads and writes
- XP and ranking → Data repositories: reads and writes
- Topup and premium → Data repositories: reads and writes
- User management → Data repositories: reads and writes
- Data repositories → MongoDB: persists data
- Comic management → Image storage: uploads images
- Image storage → Cloudinary: stores images
- Authentication API → Email notifications: sends account mail
- Email notifications → Mail provider: sends email
