# antarezaghifary/rickandmortyapp architecture

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

- Interactive diagram: https://gitdiagram.com/antarezaghifary/rickandmortyapp
- Repository: https://github.com/antarezaghifary/rickandmortyapp

## Overview

This is a Compose-based Rick and Morty character browser with character search/filtering, detail views, and locally persisted favorites. The evidenced workflow runs from app launch through navigation and character presentation, into view models and use cases, then through a repository that fetches API data or accesses Room favorites. The tree also declares location, episode, and favorites destinations, but their navigation entries are commented out in the sampled NavGraph. Source excerpts are limited, so links among unsampled view models and use cases are indicative of their module boundaries, not verified calls.

Main entry points: [`app/src/main/java/com/samrez/rickandmortyapp/navigation/NavGraph.kt`](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/navigation/NavGraph.kt) (Navigation host), [`app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/repository/CharacterRepositoryImpl.kt`](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/repository/CharacterRepositoryImpl.kt) (Repository implementation), [`app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersScreen.kt`](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersScreen.kt) (Character list), [`app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailScreen.kt`](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailScreen.kt) (Character detail)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and navigation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_app_root["App root<br/>[RickMortyApp.kt]"]
  node_nav["Navigation host<br/>[NavGraph.kt]"]
  node_nav_routes["Screen routes<br/>[Screen.kt]"]
end

subgraph group_character_ui["Character experience"]
  node_characters_ui["Character list"]
  node_list_vm["List view model"]
  node_detail_ui["Character detail"]
  node_detail_vm["Detail view model"]
end

subgraph group_character_data["Character data"]
  node_usecases["Character use cases"]
  node_repo_contract["Repository contract"]
  node_repo_impl["Repository implementation"]
  node_character_api["Character API<br/>[CharacterApi.kt]"]
  node_mapping["DTO mapping<br/>[CharacterMapper.kt]"]
end

subgraph group_platform["Platform services"]
  node_favorites_dao["Character favorites DAO<br/>[CharacterDao.kt]"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_favorite_entity["Favorite entity"]
  node_http["HTTP client"]
  node_design["Shared UI components"]
end

node_user(("App user"))
node_api_service{{"Rick and Morty API"}}

node_user -->|"launches"| node_activity
node_activity -->|"sets content"| node_app_root
node_app_root -->|"hosts"| node_nav
node_nav -->|"selects routes"| node_nav_routes
node_nav -->|"renders"| node_characters_ui
node_nav -->|"renders"| node_detail_ui
node_characters_ui -->|"dispatches actions"| node_list_vm
node_detail_ui -->|"dispatches actions"| node_detail_vm
node_list_vm -->|"requests character data"| node_usecases
node_detail_vm -->|"requests character data"| node_usecases
node_usecases -->|"invokes"| node_repo_contract
node_repo_impl -->|"fetches characters"| node_character_api
node_repo_impl -->|"reads and writes favorites"| node_favorites_dao
node_repo_impl -->|"maps records"| node_mapping
node_character_api -->|"uses client"| node_http
node_http -->|"sends requests"| node_api_service
node_database -->|"provides DAO"| node_favorites_dao
node_favorites_dao -->|"stores"| node_favorite_entity
node_characters_ui -->|"uses components"| node_design
node_detail_ui -->|"uses components"| node_design

click node_activity "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/MainActivity.kt"
click node_app_root "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/RickMortyApp.kt"
click node_nav "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/navigation/NavGraph.kt"
click node_nav_routes "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/navigation/Screen.kt"
click node_characters_ui "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersScreen.kt"
click node_list_vm "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersViewModel.kt"
click node_detail_ui "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailScreen.kt"
click node_detail_vm "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailViewModel.kt"
click node_usecases "https://github.com/antarezaghifary/rickandmortyapp/tree/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/usecase"
click node_repo_contract "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/repository/CharacterRepository.kt"
click node_repo_impl "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/repository/CharacterRepositoryImpl.kt"
click node_character_api "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/remote/CharacterApi.kt"
click node_mapping "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/mapper/CharacterMapper.kt"
click node_favorites_dao "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/dao/CharacterDao.kt"
click node_database "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/AppDatabase.kt"
click node_favorite_entity "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/entity/CharacterFavoriteEntity.kt"
click node_http "https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/network/HttpClientFactory.kt"
click node_design "https://github.com/antarezaghifary/rickandmortyapp/tree/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/designsystem/components"

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_app_root,node_nav,node_nav_routes,node_user toneBlue
class node_characters_ui,node_list_vm,node_detail_ui,node_detail_vm toneAmber
class node_usecases,node_repo_contract,node_repo_impl,node_character_api,node_mapping,node_api_service toneMint
class node_favorites_dao,node_database,node_favorite_entity,node_http,node_design toneRose
```

## Components

### App and navigation

- [Main activity](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/MainActivity.kt): `app/src/main/java/com/samrez/rickandmortyapp/MainActivity.kt`
- [App root](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/RickMortyApp.kt): `app/src/main/java/com/samrez/rickandmortyapp/RickMortyApp.kt`
- [Navigation host](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/navigation/NavGraph.kt): `app/src/main/java/com/samrez/rickandmortyapp/navigation/NavGraph.kt`
- [Screen routes](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/navigation/Screen.kt): `app/src/main/java/com/samrez/rickandmortyapp/navigation/Screen.kt`

### Character experience

- [Character list](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersScreen.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersScreen.kt`
- [List view model](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersViewModel.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/list/CharactersViewModel.kt`
- [Character detail](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailScreen.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailScreen.kt`
- [Detail view model](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailViewModel.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/presentation/detail/CharacterDetailViewModel.kt`

### Character data

- [Character use cases](https://github.com/antarezaghifary/rickandmortyapp/tree/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/usecase): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/usecase`
- [Repository contract](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/repository/CharacterRepository.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/domain/repository/CharacterRepository.kt`
- [Repository implementation](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/repository/CharacterRepositoryImpl.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/repository/CharacterRepositoryImpl.kt`
- [Character API](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/remote/CharacterApi.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/remote/CharacterApi.kt`
- [DTO mapping](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/mapper/CharacterMapper.kt): `app/src/main/java/com/samrez/rickandmortyapp/features/characters/data/mapper/CharacterMapper.kt`

### Platform services

- [Character favorites DAO](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/dao/CharacterDao.kt): `app/src/main/java/com/samrez/rickandmortyapp/core/database/dao/CharacterDao.kt`
- [Room database](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/AppDatabase.kt): `app/src/main/java/com/samrez/rickandmortyapp/core/database/AppDatabase.kt`
- [Favorite entity](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/database/entity/CharacterFavoriteEntity.kt): `app/src/main/java/com/samrez/rickandmortyapp/core/database/entity/CharacterFavoriteEntity.kt`
- [HTTP client](https://github.com/antarezaghifary/rickandmortyapp/blob/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/network/HttpClientFactory.kt): `app/src/main/java/com/samrez/rickandmortyapp/core/network/HttpClientFactory.kt`
- [Shared UI components](https://github.com/antarezaghifary/rickandmortyapp/tree/feat/phase1/app/src/main/java/com/samrez/rickandmortyapp/core/designsystem/components): `app/src/main/java/com/samrez/rickandmortyapp/core/designsystem/components`

### Other components

- **App user**
- **Rick and Morty API**

## Connections

- App user → Main activity: launches
- Main activity → App root: sets content
- App root → Navigation host: hosts
- Navigation host → Screen routes: selects routes
- Navigation host → Character list: renders
- Navigation host → Character detail: renders
- Character list → List view model: dispatches actions
- Character detail → Detail view model: dispatches actions
- List view model → Character use cases: requests character data
- Detail view model → Character use cases: requests character data
- Character use cases → Repository contract: invokes
- Repository implementation → Character API: fetches characters
- Repository implementation → Character favorites DAO: reads and writes favorites
- Repository implementation → DTO mapping: maps records
- Character API → HTTP client: uses client
- HTTP client → Rick and Morty API: sends requests
- Room database → Character favorites DAO: provides DAO
- Character favorites DAO → Favorite entity: stores
- Character list → Shared UI components: uses components
- Character detail → Shared UI components: uses components
