# swent-epfl/public architecture

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

## Overview

This repository is an EPFL software-engineering course repository, not a single deployed product. Its Android exercises include a Rick and Morty character-list app in MVVM, persistence, and dependency-injection variants. The sampled repository code shows the data workflow: request characters from the API, cache successful results locally, and read the cache after network I/O failure. UI-to-data wiring and database construction vary across exercise versions and were not established by the sampled source, so those connections are omitted.

Main entry points: [`exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/repository/CharacterRepository.kt`](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/repository/CharacterRepository.kt) (Character repository), [`exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/RickAndMortyApiService.kt`](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/RickAndMortyApiService.kt) (Character API service), [`exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterDao.kt`](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterDao.kt) (Character DAO), [`exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/data/Character.kt`](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/data/Character.kt) (Character model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data_access["Character data access"]
  node_repo["Character repository"]
  node_character["Character model<br/>[Character.kt]"]
end

subgraph group_remote["Remote API"]
  node_api_response["API response models"]
  node_api_service["Character API service"]
end

subgraph group_local["Local cache"]
  node_dao["Character DAO<br/>[CharacterDao.kt]"]
  node_entity["Character entity<br/>[CharacterEntity.kt]"]
  node_database[("Characters database")]
end

node_rick_morty{{"Rick and Morty API"}}

node_repo -->|"requests characters"| node_api_service
node_api_service -->|"GET characters"| node_rick_morty
node_api_service -->|"decodes response"| node_api_response
node_repo -->|"caches and reads"| node_dao
node_repo -->|"maps characters"| node_character
node_repo -->|"maps cache rows"| node_entity
node_dao -->|"queries and inserts"| node_database

click node_repo "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/repository/CharacterRepository.kt"
click node_character "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/data/Character.kt"
click node_api_response "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/CharactersResponse.kt"
click node_api_service "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/RickAndMortyApiService.kt"
click node_dao "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterDao.kt"
click node_entity "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterEntity.kt"
click node_database "https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharactersDatabase.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_repo,node_character toneBlue
class node_api_response,node_api_service toneAmber
class node_dao,node_entity,node_database,node_rick_morty toneMint
```

## Components

### Character data access

- [Character repository](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/repository/CharacterRepository.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/repository/CharacterRepository.kt`
- [Character model](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/data/Character.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/data/Character.kt`

### Remote API

- [API response models](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/CharactersResponse.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/CharactersResponse.kt`
- [Character API service](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/RickAndMortyApiService.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/api/RickAndMortyApiService.kt`

### Local cache

- [Character DAO](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterDao.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterDao.kt`
- [Character entity](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterEntity.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharacterEntity.kt`
- [Characters database](https://github.com/swent-epfl/public/blob/main/exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharactersDatabase.kt): `exercises/Testing-II/DI/app/src/main/java/com/swent/mvvm/model/persistence/CharactersDatabase.kt`

### Other components

- **Rick and Morty API**

## Connections

- Character repository → Character API service: requests characters
- Character API service → Rick and Morty API: GET characters
- Character API service → API response models: decodes response
- Character repository → Character DAO: caches and reads
- Character repository → Character model: maps characters
- Character repository → Character entity: maps cache rows
- Character DAO → Characters database: queries and inserts
