# skydoves/themovies architecture

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

- Interactive diagram: https://gitdiagram.com/skydoves/themovies
- Repository: https://github.com/skydoves/themovies

## Overview

TheMovies is an Android app for browsing TMDB movie, TV, and people listings and opening corresponding detail views. Its principal flow is browse in the main UI, request data through a ViewModel and repository, then display results; repositories also use Room-backed data. Movie and TV details include keywords, videos, and reviews. The README documents MVVM, LiveData, Room, and TMDB; sampled source confirms Movie/TV detail-data fetching and caching, but not every ViewModel or repository connection, so those links are omitted where uncertain.

Main entry points: [`app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivity.kt`](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivity.kt) (Browse catalog), [`app/src/main/java/com/skydoves/themovies/repository/MovieRepository.kt`](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/MovieRepository.kt) (Movie data), [`app/src/main/java/com/skydoves/themovies/room/AppDatabase.kt`](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/AppDatabase.kt) (Room database), [`app/src/main/java/com/skydoves/themovies/repository/TvRepository.kt`](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/TvRepository.kt) (TV data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentation"]
  node_browse["Browse catalog<br/>[MainActivity.kt]"]
  node_movie_lists["Movie listings"]
  node_tv_lists["TV listings<br/>[TvListFragment.kt]"]
  node_people_lists["People listings"]
  node_main_vm["Catalog state"]
  node_movie_detail["Movie details"]
  node_movie_vm["Movie detail state"]
  node_tv_detail["TV details"]
  node_tv_vm["TV detail state"]
  node_person_detail["Person details"]
  node_person_vm["Person detail state"]
end

subgraph group_domain["Repositories"]
  node_movie_repo["Movie data<br/>[MovieRepository.kt]"]
  node_tv_repo["TV data<br/>[TvRepository.kt]"]
  node_discover_repo["Discovery data"]
  node_people_repo["People data"]
  node_mappers["Response mapping"]
end

subgraph group_network["TMDB access"]
  node_movie_api["Movie endpoints<br/>[MovieService.kt]"]
  node_tv_api["TV endpoints<br/>[TvService.kt]"]
  node_discover_api["Discovery endpoints"]
  node_people_api["People endpoints<br/>[PeopleService.kt]"]
end

subgraph group_persistence["Local persistence"]
  node_movie_dao["Movie records<br/>[MovieDao.kt]"]
  node_tv_dao["TV records<br/>[TvDao.kt]"]
  node_people_dao["People records<br/>[PeopleDao.kt]"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
end

node_user(("App user"))
node_tmdb{{"TMDB API"}}

node_user -->|"opens"| node_browse
node_browse -->|"shows"| node_movie_lists
node_browse -->|"shows"| node_tv_lists
node_browse -->|"shows"| node_people_lists
node_movie_lists -->|"opens selection"| node_movie_detail
node_tv_lists -->|"opens selection"| node_tv_detail
node_people_lists -->|"opens selection"| node_person_detail
node_movie_detail -->|"observes"| node_movie_vm
node_tv_detail -->|"observes"| node_tv_vm
node_person_detail -->|"observes"| node_person_vm
node_movie_repo -->|"fetches extras"| node_movie_api
node_tv_repo -->|"fetches extras"| node_tv_api
node_movie_api -->|"requests"| node_tmdb
node_tv_api -->|"requests"| node_tmdb
node_discover_api -->|"requests"| node_tmdb
node_people_api -->|"requests"| node_tmdb
node_movie_repo -->|"reads and writes"| node_movie_dao
node_tv_repo -->|"reads and writes"| node_tv_dao
node_database -->|"provides"| node_movie_dao
node_database -->|"provides"| node_tv_dao
node_database -->|"provides"| node_people_dao
node_movie_repo -->|"maps responses"| node_mappers

click node_browse "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivity.kt"
click node_movie_lists "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MovieListFragment.kt"
click node_tv_lists "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/TvListFragment.kt"
click node_people_lists "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/PersonListFragment.kt"
click node_main_vm "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivityViewModel.kt"
click node_movie_detail "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailActivity.kt"
click node_movie_vm "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailViewModel.kt"
click node_tv_detail "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailActivity.kt"
click node_tv_vm "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailViewModel.kt"
click node_person_detail "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailActivity.kt"
click node_person_vm "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailViewModel.kt"
click node_movie_repo "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/MovieRepository.kt"
click node_tv_repo "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/TvRepository.kt"
click node_discover_repo "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/DiscoverRepository.kt"
click node_people_repo "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/PeopleRepository.kt"
click node_movie_api "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/MovieService.kt"
click node_tv_api "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/TvService.kt"
click node_discover_api "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/TheDiscoverService.kt"
click node_people_api "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/PeopleService.kt"
click node_movie_dao "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/MovieDao.kt"
click node_tv_dao "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/TvDao.kt"
click node_people_dao "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/PeopleDao.kt"
click node_database "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/AppDatabase.kt"
click node_mappers "https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/mappers/MovieResponseMapper.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_browse,node_movie_lists,node_tv_lists,node_people_lists,node_main_vm,node_movie_detail,node_movie_vm,node_tv_detail,node_tv_vm,node_person_detail,node_person_vm,node_user toneBlue
class node_movie_repo,node_tv_repo,node_discover_repo,node_people_repo,node_mappers toneAmber
class node_movie_api,node_tv_api,node_discover_api,node_people_api,node_tmdb toneMint
class node_movie_dao,node_tv_dao,node_people_dao,node_database toneRose
```

## Components

### Presentation

- [Browse catalog](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivity.kt): `app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivity.kt`
- [Movie listings](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MovieListFragment.kt): `app/src/main/java/com/skydoves/themovies/view/ui/main/MovieListFragment.kt`
- [TV listings](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/TvListFragment.kt): `app/src/main/java/com/skydoves/themovies/view/ui/main/TvListFragment.kt`
- [People listings](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/PersonListFragment.kt): `app/src/main/java/com/skydoves/themovies/view/ui/main/PersonListFragment.kt`
- [Catalog state](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivityViewModel.kt): `app/src/main/java/com/skydoves/themovies/view/ui/main/MainActivityViewModel.kt`
- [Movie details](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailActivity.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailActivity.kt`
- [Movie detail state](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailViewModel.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/movie/MovieDetailViewModel.kt`
- [TV details](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailActivity.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailActivity.kt`
- [TV detail state](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailViewModel.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/tv/TvDetailViewModel.kt`
- [Person details](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailActivity.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailActivity.kt`
- [Person detail state](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailViewModel.kt): `app/src/main/java/com/skydoves/themovies/view/ui/details/person/PersonDetailViewModel.kt`

### Repositories

- [Movie data](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/MovieRepository.kt): `app/src/main/java/com/skydoves/themovies/repository/MovieRepository.kt`
- [TV data](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/TvRepository.kt): `app/src/main/java/com/skydoves/themovies/repository/TvRepository.kt`
- [Discovery data](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/DiscoverRepository.kt): `app/src/main/java/com/skydoves/themovies/repository/DiscoverRepository.kt`
- [People data](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/repository/PeopleRepository.kt): `app/src/main/java/com/skydoves/themovies/repository/PeopleRepository.kt`
- [Response mapping](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/mappers/MovieResponseMapper.kt): `app/src/main/java/com/skydoves/themovies/mappers/MovieResponseMapper.kt`

### TMDB access

- [Movie endpoints](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/MovieService.kt): `app/src/main/java/com/skydoves/themovies/api/MovieService.kt`
- [TV endpoints](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/TvService.kt): `app/src/main/java/com/skydoves/themovies/api/TvService.kt`
- [Discovery endpoints](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/TheDiscoverService.kt): `app/src/main/java/com/skydoves/themovies/api/TheDiscoverService.kt`
- [People endpoints](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/api/PeopleService.kt): `app/src/main/java/com/skydoves/themovies/api/PeopleService.kt`

### Local persistence

- [Movie records](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/MovieDao.kt): `app/src/main/java/com/skydoves/themovies/room/MovieDao.kt`
- [TV records](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/TvDao.kt): `app/src/main/java/com/skydoves/themovies/room/TvDao.kt`
- [People records](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/PeopleDao.kt): `app/src/main/java/com/skydoves/themovies/room/PeopleDao.kt`
- [Room database](https://github.com/skydoves/themovies/blob/master/app/src/main/java/com/skydoves/themovies/room/AppDatabase.kt): `app/src/main/java/com/skydoves/themovies/room/AppDatabase.kt`

### Other components

- **App user**
- **TMDB API**

## Connections

- App user → Browse catalog: opens
- Browse catalog → Movie listings: shows
- Browse catalog → TV listings: shows
- Browse catalog → People listings: shows
- Movie listings → Movie details: opens selection
- TV listings → TV details: opens selection
- People listings → Person details: opens selection
- Movie details → Movie detail state: observes
- TV details → TV detail state: observes
- Person details → Person detail state: observes
- Movie data → Movie endpoints: fetches extras
- TV data → TV endpoints: fetches extras
- Movie endpoints → TMDB API: requests
- TV endpoints → TMDB API: requests
- Discovery endpoints → TMDB API: requests
- People endpoints → TMDB API: requests
- Movie data → Movie records: reads and writes
- TV data → TV records: reads and writes
- Room database → Movie records: provides
- Room database → TV records: provides
- Room database → People records: provides
- Movie data → Response mapping: maps responses
