# yury03/appcocktailbar architecture

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

- Interactive diagram: https://gitdiagram.com/yury03/appcocktailbar
- Repository: https://github.com/yury03/appcocktailbar

## Overview

#### Purpose and runtime

Cocktail Bar is a native Android app for creating, viewing, editing, and deleting locally saved cocktail recipes. Recipes include descriptive fields, ingredients, preparation instructions, and apparently an image. It is a single Gradle Android application module: `app/build.gradle.kts`, launched through `app/src/main/AndroidManifest.xml`.

#### Application entry and navigation

`MainActivity` is the Android UI entry point and hosts the app’s primary screen/navigation container: `app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt`, `app/src/main/res/layout/activity_main.xml`. Fragment destinations and transitions are centrally declared in `app/src/main/res/navigation/nav_graph.xml`, separating the list, add, and detail/edit flows.

#### UI presentation layer

The UI uses Android Fragments backed by screen-specific ViewModels:
- Cocktail collection: `ui/cocktails/CocktailsFragment.kt`, `ui/cocktails/CocktailsViewModel.kt`
- Creation: `ui/add_cocktail/AddCocktailFragment.kt`, `ui/add_cocktail/AddCocktailViewModel.kt`
- Details and modification: `ui/cocktail_details/CocktailDetailsFragment.kt`, `ui/cocktail_details/CocktailDetailsViewModel.kt`

List-oriented displays are delegated to RecyclerView-style adapters for cocktails and ingredients: `ui/cocktails/adapters/CocktailsListAdapter.kt`, `ui/cocktail_details/adapters/IngredientListAdapter.kt`. Fragment layouts define each screen’s Android View-based rendering boundary.

#### Domain contracts and use cases

The domain layer isolates recipe behavior from Android UI and Room persistence. `domain/models/CocktailModel.kt` is the application-level cocktail representation, while `domain/Repository.kt` defines the repository boundary. Explicit use cases express the main commands and query: `domain/usecases/GetAllCocktails.kt`, `domain/usecases/AddCocktail.kt`, `domain/usecases/EditCocktail.kt`, and `domain/usecases/DeleteCocktail.kt`.

Primary control flow is: user interaction in Fragment → ViewModel → use case → repository contract → data implementation → Room. Results return in reverse to refresh displayed state.

#### Persistence and data boundary

Cocktails are stored on-device through Room, not a remote backend. `data/room/CocktailDatabase.kt` owns database construction; `data/room/dao/CocktailsDatabaseDao.kt` defines database operations; and `data/room/entity/CocktailEntity.kt` is the storage schema. `data/room/mappers/CocktailMapper.kt` converts between persistence entities and domain models, preventing Room types from becoming the domain API.

Repository-facing implementations are operation/screen-oriented: `data/AddCocktailsContractImpl.kt`, `data/CocktailsFragmentContractImpl.kt`, and `data/DetailsFragmentContractImpl.kt`. These form the concrete bridge from domain/UI contracts to local storage.

#### Dependency composition

Dependency injection is organized by architectural layer: `di/dataModule.kt` supplies persistence/data bindings, `di/domainModule.kt` supplies use cases, and `di/uiModule.kt` supplies UI-facing dependencies. The app-level bootstrap is `app/App.kt`, likely the Application class responsible for initializing this dependency graph.

#### External boundaries

Material dependencies are Android platform APIs, AndroidX navigation/fragments/view models, Room local database infrastructure, and the Gradle Android build runtime. No source path indicates a network API, cloud service, authentication system, or implemented recipe-sharing integration; README-mentioned sharing is not represented as a visible architectural subsystem. Figma is a design reference, not an application runtime dependency.

Main entry points: [`app/src/main/res/navigation/nav_graph.xml`](https://github.com/yury03/appcocktailbar/blob/main/app/src/main/res/navigation/nav_graph.xml) (Recipe navigation), [`app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt`](https://github.com/yury03/appcocktailbar/blob/main/app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt) (Main activity), [`app/build.gradle.kts`](https://github.com/yury03/appcocktailbar/blob/main/app/build.gradle.kts) (Gradle Android app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Android UI"]
  node_main_activity["Main activity<br/>Android activity<br/>[MainActivity.kt]"]
  node_navigation["Recipe navigation<br/>navigation graph<br/>[nav_graph.xml]"]
  node_cocktails_screen["Cocktail collection<br/>Fragment + ViewModel"]
  node_add_screen["Add cocktail<br/>Fragment + ViewModel"]
  node_details_screen["Cocktail details/edit<br/>Fragment + ViewModel"]
  node_list_adapters["List adapters<br/>RecyclerView adapters"]
end

subgraph group_domain["Domain"]
  node_cocktail_model["Cocktail model<br/>domain model"]
  node_repository["Repository contract<br/>domain boundary"]
  node_use_cases["Recipe use cases<br/>commands and query"]
end

subgraph group_data["Local data"]
  node_repository_impls["Repository implementations<br/>data bridge"]
  node_mapper["Cocktail mapper<br/>entity-domain mapper"]
  node_dao["Cocktail DAO<br/>Room DAO"]
  node_database[("Cocktail database<br/>Room database")]
  node_entity["Cocktail entity<br/>Room schema"]
end

subgraph group_di["Dependency injection"]
  node_app["Application bootstrap"]
  node_data_module["Data bindings<br/>DI module"]
  node_domain_module["Domain bindings<br/>DI module"]
  node_ui_module["UI bindings<br/>DI module"]
end

node_gradle{{"Gradle Android app<br/>build runtime<br/>[build.gradle.kts]"}}

node_gradle -->|"builds"| node_app
node_app -->|"initializes"| node_data_module
node_app -->|"initializes"| node_domain_module
node_app -->|"initializes"| node_ui_module
node_main_activity -->|"hosts"| node_navigation
node_navigation -->|"destination"| node_cocktails_screen
node_navigation -->|"destination"| node_add_screen
node_navigation -->|"destination"| node_details_screen
node_cocktails_screen -->|"renders with"| node_list_adapters
node_cocktails_screen -->|"queries"| node_use_cases
node_add_screen -->|"creates via"| node_use_cases
node_details_screen -->|"edits/deletes via"| node_use_cases
node_use_cases -->|"depends on"| node_repository
node_use_cases -->|"uses"| node_cocktail_model
node_repository_impls -->|"implements"| node_repository
node_repository_impls -->|"maps through"| node_mapper
node_mapper -->|"converts"| node_entity
node_mapper -->|"converts"| node_cocktail_model
node_repository_impls -->|"reads/writes"| node_dao
node_dao -->|"accesses"| node_database
node_database -->|"stores"| node_entity
node_data_module -->|"binds"| node_repository_impls
node_data_module -->|"provides"| node_database
node_domain_module -->|"provides"| node_use_cases
node_ui_module -.->|"provides dependencies"| node_cocktails_screen
node_ui_module -.->|"provides dependencies"| node_add_screen
node_ui_module -.->|"provides dependencies"| node_details_screen

click node_gradle "https://github.com/yury03/appcocktailbar/blob/main/app/build.gradle.kts"
click node_main_activity "https://github.com/yury03/appcocktailbar/blob/main/app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt"
click node_navigation "https://github.com/yury03/appcocktailbar/blob/main/app/src/main/res/navigation/nav_graph.xml"

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_main_activity,node_navigation,node_cocktails_screen,node_add_screen,node_details_screen,node_list_adapters toneBlue
class node_cocktail_model,node_repository,node_use_cases toneAmber
class node_repository_impls,node_mapper,node_dao,node_database,node_entity toneMint
class node_app,node_data_module,node_domain_module,node_ui_module toneRose
class node_gradle toneNeutral
```

## Components

### Android UI

- [Main activity](https://github.com/yury03/appcocktailbar/blob/main/app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt): Android activity · Hosts the primary navigation container. · `app/src/main/java/com/example/appcocktailbar/ui/main_activity/MainActivity.kt`
- [Recipe navigation](https://github.com/yury03/appcocktailbar/blob/main/app/src/main/res/navigation/nav_graph.xml): navigation graph · Connects collection, creation, and detail/edit destinations. · `app/src/main/res/navigation/nav_graph.xml`
- **Cocktail collection**: Fragment + ViewModel
- **Add cocktail**: Fragment + ViewModel
- **Cocktail details/edit**: Fragment + ViewModel
- **List adapters**: RecyclerView adapters · Renders cocktail and ingredient lists.

### Domain

- **Cocktail model**: domain model
- **Repository contract**: domain boundary
- **Recipe use cases**: commands and query · Get, add, edit, and delete cocktails.

### Local data

- **Repository implementations**: data bridge · Operation-oriented implementations of repository-facing contracts.
- **Cocktail mapper**: entity-domain mapper
- **Cocktail DAO**: Room DAO
- **Cocktail database**: Room database · On-device recipe persistence.
- **Cocktail entity**: Room schema

### Dependency injection

- **Application bootstrap**: Application · Initializes dependency composition.
- **Data bindings**: DI module
- **Domain bindings**: DI module
- **UI bindings**: DI module

### Other components

- [Gradle Android app](https://github.com/yury03/appcocktailbar/blob/main/app/build.gradle.kts): build runtime · `app/build.gradle.kts`

## Connections

- Gradle Android app → Application bootstrap: builds
- Application bootstrap → Data bindings: initializes
- Application bootstrap → Domain bindings: initializes
- Application bootstrap → UI bindings: initializes
- Main activity → Recipe navigation: hosts
- Recipe navigation → Cocktail collection: destination
- Recipe navigation → Add cocktail: destination
- Recipe navigation → Cocktail details/edit: destination
- Cocktail collection → List adapters: renders with
- Cocktail collection → Recipe use cases: queries
- Add cocktail → Recipe use cases: creates via
- Cocktail details/edit → Recipe use cases: edits/deletes via
- Recipe use cases → Repository contract: depends on
- Recipe use cases → Cocktail model: uses
- Repository implementations → Repository contract: implements
- Repository implementations → Cocktail mapper: maps through
- Cocktail mapper → Cocktail entity: converts
- Cocktail mapper → Cocktail model: converts
- Repository implementations → Cocktail DAO: reads/writes
- Cocktail DAO → Cocktail database: accesses
- Cocktail database → Cocktail entity: stores
- Data bindings → Repository implementations: binds
- Data bindings → Cocktail database: provides
- Domain bindings → Recipe use cases: provides
- UI bindings → Cocktail collection: provides dependencies
- UI bindings → Add cocktail: provides dependencies
- UI bindings → Cocktail details/edit: provides dependencies
