# jonathan1429/review architecture

> Architecture diagram of the GitHub repository jonathan1429/review, 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/jonathan1429/review
- Repository: https://github.com/jonathan1429/review

## Overview

Review is an offline Android study-guide app: users organize folders and guides, create questions with formatted text and images, then preview and study them. The README describes a Presentation → Domain ← Data Clean Architecture; the tree shows routes, ViewModels, use cases, repositories, and local JSON/XML and preference persistence. The sampled code confirms storage initialization/migration, image handling, path resolution, and DataStore-backed guide context. Detailed UI-to-use-case wiring and most serialization flows were not sampled, so those links are shown only at the documented layer boundaries.

Main entry points: [`app/src/main/java/com/jonathanev/review/presentation/viewmodel/PreviewViewModel.kt`](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/presentation/viewmodel/PreviewViewModel.kt) (ViewModels), [`app/src/main/java/com/jonathanev/review/data/filesystem/GuiaRepositoryImpl.kt`](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/GuiaRepositoryImpl.kt) (Guide repository), [`app/src/main/java/com/jonathanev/review/data/repository/ImagesRepositoryImpl.kt`](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/ImagesRepositoryImpl.kt) (Image repository), [`app/src/main/java/com/jonathanev/review/domain/SetContentUseCase.kt`](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/SetContentUseCase.kt) (Guide editing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["App experience"]
  node_routes["App routes<br/>[AppRoutes.kt]"]
  node_screens["Study screens"]
  node_viewmodels["ViewModels"]
end

subgraph group_domain["Study workflows"]
  node_folders["Folder management"]
  node_guideediting["Guide editing"]
  node_reviewflow["Study navigation"]
  node_preview["Question preview"]
  node_initialize["Storage initialization"]
end

subgraph group_data["Local persistence"]
  node_folderrepo["Folder repository"]
  node_guiderepo["Guide repository"]
  node_imagerepo["Image repository"]
  node_metadata["Guide context"]
  node_preferences["User preferences"]
end

subgraph group_storage["Storage services"]
  node_filepaths["Path resolution"]
  node_directory["Directory operations"]
  node_json["JSON storage<br/>[JsonManager.kt]"]
  node_xml["XML guide format"]
  node_datastore["Preferences store"]
end

node_user(("Learner"))
node_device["Device files"]

node_user -->|"chooses screen"| node_routes
node_routes -->|"navigates to"| node_screens
node_screens -->|"sends actions"| node_viewmodels
node_viewmodels -->|"requests folder actions"| node_folders
node_viewmodels -->|"requests editing"| node_guideediting
node_viewmodels -->|"requests navigation"| node_reviewflow
node_viewmodels -->|"requests preview"| node_preview
node_folders -->|"uses repository"| node_folderrepo
node_guideediting -->|"uses repository"| node_guiderepo
node_guideediting -->|"manages images"| node_imagerepo
node_preview -->|"loads guide data"| node_guiderepo
node_reviewflow -->|"tracks guide context"| node_metadata
node_initialize -->|"creates directories"| node_directory
node_initialize -->|"moves unassigned images"| node_imagerepo
node_guiderepo -->|"maps XML data"| node_xml
node_guiderepo -.->|"uses JSON storage"| node_json
node_directory -->|"resolves paths"| node_filepaths
node_imagerepo -->|"resolves image paths"| node_filepaths
node_directory -->|"creates and moves files"| node_device
node_imagerepo -->|"reads and writes images"| node_device
node_metadata -->|"persists context"| node_datastore
node_preferences -->|"persists settings"| node_datastore

click node_routes "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/ui/navegation/AppRoutes.kt"
click node_screens "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/ui/screens/StudyGuideScreen.kt"
click node_viewmodels "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/presentation/viewmodel/PreviewViewModel.kt"
click node_folders "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/CreateFolderUseCase.kt"
click node_guideediting "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/SetContentUseCase.kt"
click node_reviewflow "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/NextNavigationUseCase.kt"
click node_preview "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/GetPreviewQuestionsUseCase.kt"
click node_initialize "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/InitializeGuideStorageUseCase.kt"
click node_folderrepo "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/FolderRepositoryImpl.kt"
click node_guiderepo "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/GuiaRepositoryImpl.kt"
click node_imagerepo "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/ImagesRepositoryImpl.kt"
click node_metadata "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/GuideContextRepositoryImpl.kt"
click node_preferences "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/UserPreferencesRepositoryImpl.kt"
click node_filepaths "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/service/FilePathResolverService.kt"
click node_directory "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/DirectoryManagerImpl.kt"
click node_json "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/JsonManager.kt"
click node_xml "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/mapper/xml/XmlToDomainMapper.kt"
click node_datastore "https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/datastore/preferences/UserPreferencesDataStore.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_routes,node_screens,node_viewmodels toneBlue
class node_folders,node_guideediting,node_reviewflow,node_preview,node_initialize toneAmber
class node_folderrepo,node_guiderepo,node_imagerepo,node_metadata,node_preferences toneMint
class node_filepaths,node_directory,node_json,node_xml,node_datastore toneRose
class node_user,node_device toneIndigo
```

## Components

### App experience

- [App routes](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/ui/navegation/AppRoutes.kt): `app/src/main/java/com/jonathanev/review/ui/navegation/AppRoutes.kt`
- [Study screens](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/ui/screens/StudyGuideScreen.kt): `app/src/main/java/com/jonathanev/review/ui/screens/StudyGuideScreen.kt`
- [ViewModels](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/presentation/viewmodel/PreviewViewModel.kt): `app/src/main/java/com/jonathanev/review/presentation/viewmodel/PreviewViewModel.kt`

### Study workflows

- [Folder management](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/CreateFolderUseCase.kt): `app/src/main/java/com/jonathanev/review/domain/CreateFolderUseCase.kt`
- [Guide editing](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/SetContentUseCase.kt): `app/src/main/java/com/jonathanev/review/domain/SetContentUseCase.kt`
- [Study navigation](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/NextNavigationUseCase.kt): `app/src/main/java/com/jonathanev/review/domain/NextNavigationUseCase.kt`
- [Question preview](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/GetPreviewQuestionsUseCase.kt): `app/src/main/java/com/jonathanev/review/domain/GetPreviewQuestionsUseCase.kt`
- [Storage initialization](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/InitializeGuideStorageUseCase.kt): `app/src/main/java/com/jonathanev/review/domain/InitializeGuideStorageUseCase.kt`

### Local persistence

- [Folder repository](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/FolderRepositoryImpl.kt): `app/src/main/java/com/jonathanev/review/data/repository/FolderRepositoryImpl.kt`
- [Guide repository](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/GuiaRepositoryImpl.kt): `app/src/main/java/com/jonathanev/review/data/filesystem/GuiaRepositoryImpl.kt`
- [Image repository](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/ImagesRepositoryImpl.kt): `app/src/main/java/com/jonathanev/review/data/repository/ImagesRepositoryImpl.kt`
- [Guide context](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/GuideContextRepositoryImpl.kt): `app/src/main/java/com/jonathanev/review/data/filesystem/GuideContextRepositoryImpl.kt`
- [User preferences](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/repository/UserPreferencesRepositoryImpl.kt): `app/src/main/java/com/jonathanev/review/data/repository/UserPreferencesRepositoryImpl.kt`

### Storage services

- [Path resolution](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/domain/service/FilePathResolverService.kt): `app/src/main/java/com/jonathanev/review/domain/service/FilePathResolverService.kt`
- [Directory operations](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/filesystem/DirectoryManagerImpl.kt): `app/src/main/java/com/jonathanev/review/data/filesystem/DirectoryManagerImpl.kt`
- [JSON storage](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/JsonManager.kt): `app/src/main/java/com/jonathanev/review/data/JsonManager.kt`
- [XML guide format](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/mapper/xml/XmlToDomainMapper.kt): `app/src/main/java/com/jonathanev/review/data/mapper/xml/XmlToDomainMapper.kt`
- [Preferences store](https://github.com/jonathan1429/review/blob/master/app/src/main/java/com/jonathanev/review/data/datastore/preferences/UserPreferencesDataStore.kt): `app/src/main/java/com/jonathanev/review/data/datastore/preferences/UserPreferencesDataStore.kt`

### Other components

- **Learner**
- **Device files**

## Connections

- Learner → App routes: chooses screen
- App routes → Study screens: navigates to
- Study screens → ViewModels: sends actions
- ViewModels → Folder management: requests folder actions
- ViewModels → Guide editing: requests editing
- ViewModels → Study navigation: requests navigation
- ViewModels → Question preview: requests preview
- Folder management → Folder repository: uses repository
- Guide editing → Guide repository: uses repository
- Guide editing → Image repository: manages images
- Question preview → Guide repository: loads guide data
- Study navigation → Guide context: tracks guide context
- Storage initialization → Directory operations: creates directories
- Storage initialization → Image repository: moves unassigned images
- Guide repository → XML guide format: maps XML data
- Guide repository → JSON storage: uses JSON storage
- Directory operations → Path resolution: resolves paths
- Image repository → Path resolution: resolves image paths
- Directory operations → Device files: creates and moves files
- Image repository → Device files: reads and writes images
- Guide context → Preferences store: persists context
- User preferences → Preferences store: persists settings
