# ingridmiao/mydramalist architecture

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

- Interactive diagram: https://gitdiagram.com/ingridmiao/mydramalist
- Repository: https://github.com/ingridmiao/mydramalist

## Overview

My Drama List is an Android app backed by a Spring Boot API for recording and browsing dramas. Users sign in, manage a personal list and its tags/categories, explore friends’ and public lists, and can search TMDB for drama suggestions. The README also describes rating analytics and cloud synchronization; the sampled backend implementation was not available, so those capabilities are represented at the documented product boundary rather than with guessed internal flows. Edges reflect sampled Android calls and README statements.

Main entry points: [`app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt) (Drama state and actions), [`app/app/src/main/java/front/app/ui/MainScreen.kt`](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/MainScreen.kt) (App navigation), [`app/app/src/main/java/front/app/network/RetrofitClient.kt`](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/RetrofitClient.kt) (Backend client), [`demo/src/main/java/com/example/demo/service`](https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/service) (Spring services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android app"]
  node_activity["Activity entry<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[MainScreen.kt]"]
  node_login["Login and signup<br/>[LoginScreen.kt]"]
  node_loginvm["Login state<br/>[LoginViewModel.kt]"]
  node_home["Drama library<br/>[HomeScreen.kt]"]
  node_friends["Friend lists<br/>[FriendScreen.kt]"]
  node_profile["Profile settings<br/>[ProfileScreen.kt]"]
  node_add["Add drama<br/>[AddScreen.kt]"]
  node_detail["Drama details<br/>[DetailScreen.kt]"]
  node_drama_vm["Drama state and actions<br/>[DramaViewModel.kt]"]
  node_theme["Theme preferences<br/>[ThemeViewModel.kt]"]
  node_drama_model["Drama records<br/>[Drama.kt]"]
  node_drama_response["Shared drama records<br/>[DramaResponse.kt]"]
  node_tag_model["Tags<br/>[Tag.kt]"]
  node_user_model["User records<br/>[User.kt]"]
  node_drama_repo["Drama requests<br/>[DramaRepository.kt]"]
  node_user_repo["User requests<br/>[UserRepository.kt]"]
  node_category_repo["Category requests"]
  node_tag_repo["Tag requests<br/>[TagRepository.kt]"]
  node_api_service["Backend API routes<br/>[ApiService.kt]"]
  node_retrofit["Backend client<br/>[RetrofitClient.kt]"]
  node_tmdb_search["Search and credits<br/>[TmdbApiService.kt]"]
  node_tmdb_client["TMDB client"]
end

subgraph group_backend["Drama API"]
  node_backend_service["Spring services"]
  node_backend_controller["REST controllers"]
  node_backend_store[("Supabase data store")]
  node_analytics["Rating analytics"]
end

subgraph group_tmdb["TMDB lookup"]
  node_tmdb["TMDB service"]
end

node_user(("App user"))

node_user -->|"opens app"| node_activity
node_activity -->|"shows"| node_navigation
node_navigation -->|"routes to"| node_login
node_login -->|"uses"| node_loginvm
node_loginvm -->|"calls"| node_user_repo
node_navigation -->|"routes to"| node_home
node_navigation -->|"routes to"| node_friends
node_navigation -->|"routes to"| node_profile
node_navigation -->|"routes to"| node_add
node_navigation -->|"routes to"| node_detail
node_navigation -->|"shares"| node_drama_vm
node_home -->|"uses"| node_drama_vm
node_friends -->|"uses"| node_drama_vm
node_add -->|"uses"| node_drama_vm
node_detail -->|"uses"| node_drama_vm
node_profile -->|"uses"| node_theme
node_drama_vm -->|"calls"| node_drama_repo
node_drama_vm -->|"calls"| node_category_repo
node_drama_vm -->|"calls"| node_tag_repo
node_drama_vm -->|"calls"| node_user_repo
node_drama_vm -->|"searches through"| node_tmdb_client
node_drama_repo -->|"uses"| node_retrofit
node_user_repo -->|"uses"| node_retrofit
node_category_repo -->|"uses"| node_retrofit
node_tag_repo -->|"uses"| node_retrofit
node_retrofit -->|"creates client"| node_api_service
node_api_service -.->|"HTTP requests"| node_backend_controller
node_backend_controller -.->|"dispatches"| node_backend_service
node_backend_service -.->|"persists data"| node_backend_store
node_backend_service -.->|"analyzes ratings"| node_analytics
node_tmdb_client -->|"creates client"| node_tmdb_search
node_tmdb_search -->|"queries"| node_tmdb

click node_activity "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/MainActivity.kt"
click node_navigation "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/MainScreen.kt"
click node_login "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/login/LoginScreen.kt"
click node_loginvm "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/viewmodel/LoginViewModel.kt"
click node_home "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/home/HomeScreen.kt"
click node_friends "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/friend/FriendScreen.kt"
click node_profile "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/profile/ProfileScreen.kt"
click node_add "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/add/AddScreen.kt"
click node_detail "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/detail/DetailScreen.kt"
click node_drama_vm "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt"
click node_theme "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/theme/ThemeViewModel.kt"
click node_drama_model "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/Drama.kt"
click node_drama_response "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/DramaResponse.kt"
click node_tag_model "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/Tag.kt"
click node_user_model "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/User.kt"
click node_drama_repo "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/DramaRepository.kt"
click node_user_repo "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/UserRepository.kt"
click node_category_repo "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/CategoryRepository.kt"
click node_tag_repo "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/TagRepository.kt"
click node_api_service "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/ApiService.kt"
click node_retrofit "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/RetrofitClient.kt"
click node_backend_service "https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/service"
click node_backend_controller "https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/controller"
click node_backend_store "https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/repository"
click node_analytics "https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/service"
click node_tmdb_search "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/TmdbApiService.kt"
click node_tmdb_client "https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/TmdbRetrofitClient.kt"

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_activity,node_navigation,node_login,node_loginvm,node_home,node_friends,node_profile,node_add,node_detail,node_drama_vm,node_theme,node_drama_model,node_drama_response,node_tag_model,node_user_model,node_drama_repo,node_user_repo,node_category_repo,node_tag_repo,node_api_service,node_retrofit,node_tmdb_search,node_tmdb_client,node_user toneBlue
class node_backend_service,node_backend_controller,node_backend_store,node_analytics toneAmber
class node_tmdb toneMint
```

## Components

### Android app

- [Activity entry](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/MainActivity.kt): `app/app/src/main/java/front/app/MainActivity.kt`
- [App navigation](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/MainScreen.kt): `app/app/src/main/java/front/app/ui/MainScreen.kt`
- [Login and signup](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/login/LoginScreen.kt): `app/app/src/main/java/front/app/ui/login/LoginScreen.kt`
- [Login state](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/viewmodel/LoginViewModel.kt): `app/app/src/main/java/front/app/viewmodel/LoginViewModel.kt`
- [Drama library](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/home/HomeScreen.kt): `app/app/src/main/java/front/app/ui/home/HomeScreen.kt`
- [Friend lists](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/friend/FriendScreen.kt): `app/app/src/main/java/front/app/ui/friend/FriendScreen.kt`
- [Profile settings](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/profile/ProfileScreen.kt): `app/app/src/main/java/front/app/ui/profile/ProfileScreen.kt`
- [Add drama](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/add/AddScreen.kt): `app/app/src/main/java/front/app/ui/add/AddScreen.kt`
- [Drama details](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/detail/DetailScreen.kt): `app/app/src/main/java/front/app/ui/detail/DetailScreen.kt`
- [Drama state and actions](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt): `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`
- [Theme preferences](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/ui/theme/ThemeViewModel.kt): `app/app/src/main/java/front/app/ui/theme/ThemeViewModel.kt`
- [Drama records](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/Drama.kt): `app/app/src/main/java/front/app/model/Drama.kt`
- [Shared drama records](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/DramaResponse.kt): `app/app/src/main/java/front/app/model/DramaResponse.kt`
- [Tags](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/Tag.kt): `app/app/src/main/java/front/app/model/Tag.kt`
- [User records](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/model/User.kt): `app/app/src/main/java/front/app/model/User.kt`
- [Drama requests](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/DramaRepository.kt): `app/app/src/main/java/front/app/repository/DramaRepository.kt`
- [User requests](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/UserRepository.kt): `app/app/src/main/java/front/app/repository/UserRepository.kt`
- [Category requests](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/CategoryRepository.kt): `app/app/src/main/java/front/app/repository/CategoryRepository.kt`
- [Tag requests](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/repository/TagRepository.kt): `app/app/src/main/java/front/app/repository/TagRepository.kt`
- [Backend API routes](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/ApiService.kt): `app/app/src/main/java/front/app/network/ApiService.kt`
- [Backend client](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/RetrofitClient.kt): `app/app/src/main/java/front/app/network/RetrofitClient.kt`
- [Search and credits](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/TmdbApiService.kt): `app/app/src/main/java/front/app/network/TmdbApiService.kt`
- [TMDB client](https://github.com/ingridmiao/mydramalist/blob/main/app/app/src/main/java/front/app/network/TmdbRetrofitClient.kt): `app/app/src/main/java/front/app/network/TmdbRetrofitClient.kt`

### Drama API

- [Spring services](https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/service): `demo/src/main/java/com/example/demo/service`
- [REST controllers](https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/controller): `demo/src/main/java/com/example/demo/controller`
- [Supabase data store](https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/repository): `demo/src/main/java/com/example/demo/repository`
- [Rating analytics](https://github.com/ingridmiao/mydramalist/tree/main/demo/src/main/java/com/example/demo/service): `demo/src/main/java/com/example/demo/service`

### TMDB lookup

- **TMDB service**

### Other components

- **App user**

## Connections

- App user → Activity entry: opens app (evidence: `app/app/src/main/java/front/app/MainActivity.kt`)
- Activity entry → App navigation: shows (evidence: `app/app/src/main/java/front/app/MainActivity.kt`)
- App navigation → Login and signup: routes to (evidence: `app/app/src/main/java/front/app/MainActivity.kt`)
- Login and signup → Login state: uses (evidence: `app/app/src/main/java/front/app/ui/login/LoginScreen.kt`)
- Login state → User requests: calls (evidence: `app/app/src/main/java/front/app/viewmodel/LoginViewModel.kt`)
- App navigation → Drama library: routes to (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- App navigation → Friend lists: routes to (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- App navigation → Profile settings: routes to (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- App navigation → Add drama: routes to (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- App navigation → Drama details: routes to (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- App navigation → Drama state and actions: shares (evidence: `app/app/src/main/java/front/app/ui/MainScreen.kt`)
- Drama library → Drama state and actions: uses (evidence: `app/app/src/main/java/front/app/ui/home/HomeScreen.kt`)
- Friend lists → Drama state and actions: uses (evidence: `app/app/src/main/java/front/app/ui/friend/FriendScreen.kt`)
- Add drama → Drama state and actions: uses (evidence: `app/app/src/main/java/front/app/ui/add/AddScreen.kt`)
- Drama details → Drama state and actions: uses (evidence: `app/app/src/main/java/front/app/ui/detail/DetailScreen.kt`)
- Profile settings → Theme preferences: uses (evidence: `app/app/src/main/java/front/app/ui/profile/ProfileScreen.kt`)
- Drama state and actions → Drama requests: calls (evidence: `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`)
- Drama state and actions → Category requests: calls (evidence: `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`)
- Drama state and actions → Tag requests: calls (evidence: `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`)
- Drama state and actions → User requests: calls (evidence: `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`)
- Drama state and actions → TMDB client: searches through (evidence: `app/app/src/main/java/front/app/viewmodel/DramaViewModel.kt`)
- Drama requests → Backend client: uses (evidence: `app/app/src/main/java/front/app/repository/DramaRepository.kt`)
- User requests → Backend client: uses (evidence: `app/app/src/main/java/front/app/repository/UserRepository.kt`)
- Category requests → Backend client: uses (evidence: `app/app/src/main/java/front/app/repository/CategoryRepository.kt`)
- Tag requests → Backend client: uses (evidence: `app/app/src/main/java/front/app/repository/TagRepository.kt`)
- Backend client → Backend API routes: creates client (evidence: `app/app/src/main/java/front/app/network/RetrofitClient.kt`)
- Backend API routes → REST controllers: HTTP requests (evidence: `app/app/src/main/java/front/app/network/ApiService.kt`)
- REST controllers → Spring services: dispatches
- Spring services → Supabase data store: persists data (evidence: `README.md`)
- Spring services → Rating analytics: analyzes ratings (evidence: `README.md`)
- TMDB client → Search and credits: creates client (evidence: `app/app/src/main/java/front/app/network/TmdbRetrofitClient.kt`)
- Search and credits → TMDB service: queries (evidence: `app/app/src/main/java/front/app/network/TmdbApiService.kt`)
