# nicolinenv/sem_3_drinks_application_portfolio_project architecture

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

- Interactive diagram: https://gitdiagram.com/nicolinenv/sem_3_drinks_application_portfolio_project
- Repository: https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project

## Overview

DrinksAPI is a Java REST backend for cocktail discovery, taste-quiz recommendations, user accounts, and saved favorites. The main user workflow is client request → routed controller → service logic → DAO/database; quiz requests filter candidates by family and optionally spirit, then rank flavor profiles using a distance strategy. Separate branches support authentication/authorization, cocktail and lookup endpoints, favorites, and documented cocktail-data import from TheCocktailDB. The README documents the layered architecture; some service, DAO, and seed implementations were not sampled, so uncertain internal links are omitted.

Main entry points: [`src/main/java/app/routes/Routes.java`](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/routes/Routes.java) (Route Registry), [`src/main/java/app/dao`](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/tree/main/src/main/java/app/dao) (Domain DAOs), [`src/main/java/app/services/CocktailMenuService.java`](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/CocktailMenuService.java) (Favorite Service), [`src/main/java/app/dao/CocktailDAO.java`](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/dao/CocktailDAO.java) (Cocktail Queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_routes["Route Registry<br/>[Routes.java]"]
  node_cocktail_controller["Cocktail API"]
  node_lookup_controller["Lookup API"]
  node_quiz_controller["Quiz API"]
  node_auth_controller["Authentication API"]
  node_favorite_controller["Favorites API"]
end

subgraph group_domain["Cocktail Domain"]
  node_cocktail_service["Cocktail Service"]
  node_lookup_service["Lookup Service<br/>[LookupService.java]"]
  node_quiz_service["Quiz Matcher<br/>[QuizService.java]"]
  node_scoring["Distance Scoring"]
  node_cocktail_model["Cocktail Model<br/>[Cocktail.java]"]
  node_flavor_model["Ingredient Flavors<br/>[FlavorTag.java]"]
end

subgraph group_identity["Identity and Favorites"]
  node_access_handler["Role Gate<br/>[AccessHandler.java]"]
  node_token_security["JWT Security<br/>[TokenSecurity.java]"]
  node_user_service["User Service<br/>[UserService.java]"]
  node_user_model["User Model<br/>[User.java]"]
  node_favorite_service["Favorite Service"]
end

subgraph group_persistence["Persistence"]
  node_cocktail_dao["Cocktail Queries<br/>[CocktailDAO.java]"]
  node_dao_layer["Domain DAOs"]
  node_database[("PostgreSQL")]
  node_favorite_dao["Favorite DAO"]
end

subgraph group_ingest["Data Import"]
  node_importer["Cocktail Importer"]
end

node_client(("API Client"))
node_cocktaildb(("TheCocktailDB"))

node_client -->|"sends requests"| node_routes
node_routes -->|"routes to"| node_cocktail_controller
node_routes -->|"routes to"| node_lookup_controller
node_routes -->|"routes to"| node_quiz_controller
node_routes -->|"routes to"| node_auth_controller
node_routes -->|"routes to"| node_favorite_controller
node_routes -->|"checks access"| node_access_handler
node_access_handler -->|"validates tokens"| node_token_security
node_cocktail_controller -->|"calls"| node_cocktail_service
node_lookup_controller -->|"calls"| node_lookup_service
node_quiz_controller -->|"calls"| node_quiz_service
node_auth_controller -->|"calls"| node_user_service
node_auth_controller -->|"issues tokens"| node_token_security
node_favorite_controller -->|"calls"| node_favorite_service
node_cocktail_service -->|"queries and writes"| node_dao_layer
node_lookup_service -->|"queries"| node_dao_layer
node_quiz_service -->|"loads candidates"| node_cocktail_dao
node_quiz_service -->|"scores candidates"| node_scoring
node_cocktail_dao -->|"loads and profiles"| node_cocktail_model
node_cocktail_dao -->|"reads flavor tags"| node_flavor_model
node_favorite_service -->|"reads and writes"| node_favorite_dao
node_favorite_service -->|"loads cocktails"| node_cocktail_dao
node_favorite_service -->|"resolves users"| node_dao_layer
node_user_service -->|"reads and writes users"| node_dao_layer
node_cocktail_service -->|"checks admin"| node_user_service
node_dao_layer -->|"accesses"| node_database
node_favorite_dao -->|"accesses"| node_database
node_importer -->|"creates records"| node_cocktail_model
node_cocktaildb -->|"supplies recipes"| node_importer

click node_routes "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/routes/Routes.java"
click node_cocktail_controller "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/CocktailController.java"
click node_lookup_controller "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/LookupController.java"
click node_quiz_controller "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/QuizController.java"
click node_auth_controller "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/AuthController.java"
click node_favorite_controller "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/FavoriteController.java"
click node_access_handler "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/security/AccessHandler.java"
click node_token_security "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/security/TokenSecurity.java"
click node_cocktail_service "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/CocktailService.java"
click node_lookup_service "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/LookupService.java"
click node_quiz_service "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/QuizService.java"
click node_scoring "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/strategies/EuclideanDistanceStrategy.java"
click node_cocktail_dao "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/dao/CocktailDAO.java"
click node_dao_layer "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/tree/main/src/main/java/app/dao"
click node_cocktail_model "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/Cocktail.java"
click node_flavor_model "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/FlavorTag.java"
click node_user_service "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/UserService.java"
click node_user_model "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/user/User.java"
click node_favorite_service "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/CocktailMenuService.java"
click node_favorite_dao "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/dao/CocktailMenuDAO.java"
click node_importer "https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/seed/CocktailImporter.java"

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_cocktail_controller,node_lookup_controller,node_quiz_controller,node_auth_controller,node_favorite_controller,node_client toneBlue
class node_cocktail_service,node_lookup_service,node_quiz_service,node_scoring,node_cocktail_model,node_flavor_model toneAmber
class node_access_handler,node_token_security,node_user_service,node_user_model,node_favorite_service toneMint
class node_cocktail_dao,node_dao_layer,node_database,node_favorite_dao toneRose
class node_importer,node_cocktaildb toneIndigo
```

## Components

### HTTP API

- [Route Registry](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/routes/Routes.java): `src/main/java/app/routes/Routes.java`
- [Cocktail API](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/CocktailController.java): `src/main/java/app/controllers/CocktailController.java`
- [Lookup API](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/LookupController.java): `src/main/java/app/controllers/LookupController.java`
- [Quiz API](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/QuizController.java): `src/main/java/app/controllers/QuizController.java`
- [Authentication API](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/AuthController.java): `src/main/java/app/controllers/AuthController.java`
- [Favorites API](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/controllers/FavoriteController.java): `src/main/java/app/controllers/FavoriteController.java`

### Cocktail Domain

- [Cocktail Service](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/CocktailService.java): `src/main/java/app/services/CocktailService.java`
- [Lookup Service](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/LookupService.java): `src/main/java/app/services/LookupService.java`
- [Quiz Matcher](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/QuizService.java): `src/main/java/app/services/QuizService.java`
- [Distance Scoring](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/strategies/EuclideanDistanceStrategy.java): `src/main/java/app/strategies/EuclideanDistanceStrategy.java`
- [Cocktail Model](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/Cocktail.java): `src/main/java/app/entities/Cocktail.java`
- [Ingredient Flavors](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/FlavorTag.java): `src/main/java/app/entities/FlavorTag.java`

### Identity and Favorites

- [Role Gate](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/security/AccessHandler.java): `src/main/java/app/security/AccessHandler.java`
- [JWT Security](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/security/TokenSecurity.java): `src/main/java/app/security/TokenSecurity.java`
- [User Service](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/UserService.java): `src/main/java/app/services/UserService.java`
- [User Model](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/entities/user/User.java): `src/main/java/app/entities/user/User.java`
- [Favorite Service](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/services/CocktailMenuService.java): `src/main/java/app/services/CocktailMenuService.java`

### Persistence

- [Cocktail Queries](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/dao/CocktailDAO.java): `src/main/java/app/dao/CocktailDAO.java`
- [Domain DAOs](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/tree/main/src/main/java/app/dao): `src/main/java/app/dao`
- **PostgreSQL**
- [Favorite DAO](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/dao/CocktailMenuDAO.java): `src/main/java/app/dao/CocktailMenuDAO.java`

### Data Import

- [Cocktail Importer](https://github.com/nicolinenv/sem_3_drinks_application_portfolio_project/blob/main/src/main/java/app/seed/CocktailImporter.java): `src/main/java/app/seed/CocktailImporter.java`

### Other components

- **API Client**
- **TheCocktailDB**

## Connections

- API Client → Route Registry: sends requests
- Route Registry → Cocktail API: routes to (evidence: `src/main/java/app/routes/Routes.java`)
- Route Registry → Lookup API: routes to (evidence: `src/main/java/app/routes/Routes.java`)
- Route Registry → Quiz API: routes to (evidence: `src/main/java/app/routes/Routes.java`)
- Route Registry → Authentication API: routes to (evidence: `src/main/java/app/routes/Routes.java`)
- Route Registry → Favorites API: routes to (evidence: `src/main/java/app/routes/Routes.java`)
- Route Registry → Role Gate: checks access
- Role Gate → JWT Security: validates tokens (evidence: `src/main/java/app/security/AccessHandler.java`)
- Cocktail API → Cocktail Service: calls (evidence: `src/main/java/app/controllers/CocktailController.java`)
- Lookup API → Lookup Service: calls (evidence: `src/main/java/app/controllers/LookupController.java`)
- Quiz API → Quiz Matcher: calls (evidence: `src/main/java/app/controllers/QuizController.java`)
- Authentication API → User Service: calls (evidence: `src/main/java/app/controllers/AuthController.java`)
- Authentication API → JWT Security: issues tokens (evidence: `src/main/java/app/controllers/AuthController.java`)
- Favorites API → Favorite Service: calls (evidence: `src/main/java/app/controllers/FavoriteController.java`)
- Cocktail Service → Domain DAOs: queries and writes (evidence: `src/main/java/app/services/CocktailService.java`)
- Lookup Service → Domain DAOs: queries (evidence: `src/main/java/app/services/LookupService.java`)
- Quiz Matcher → Cocktail Queries: loads candidates (evidence: `src/main/java/app/services/QuizService.java`)
- Quiz Matcher → Distance Scoring: scores candidates (evidence: `src/main/java/app/services/QuizService.java`)
- Cocktail Queries → Cocktail Model: loads and profiles (evidence: `src/main/java/app/dao/CocktailDAO.java`)
- Cocktail Queries → Ingredient Flavors: reads flavor tags (evidence: `src/main/java/app/dao/CocktailDAO.java`)
- Favorite Service → Favorite DAO: reads and writes (evidence: `src/main/java/app/services/CocktailMenuService.java`)
- Favorite Service → Cocktail Queries: loads cocktails (evidence: `src/main/java/app/services/CocktailMenuService.java`)
- Favorite Service → Domain DAOs: resolves users (evidence: `src/main/java/app/services/CocktailMenuService.java`)
- User Service → Domain DAOs: reads and writes users (evidence: `src/main/java/app/services/UserService.java`)
- Cocktail Service → User Service: checks admin (evidence: `src/main/java/app/services/CocktailService.java`)
- Domain DAOs → PostgreSQL: accesses
- Favorite DAO → PostgreSQL: accesses
- Cocktail Importer → Cocktail Model: creates records (evidence: `src/main/java/app/seed/CocktailImporter.java`)
- TheCocktailDB → Cocktail Importer: supplies recipes
