# vahagndol/destinations architecture

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

- Interactive diagram: https://gitdiagram.com/vahagndol/destinations
- Repository: https://github.com/vahagndol/destinations

## Overview

Destinations is a Vue client backed by an ASP.NET application and separate Locations and Places APIs. The main workflow is a user browsing destination information, the client requesting data through the Application endpoints, and those endpoints forwarding requests to the relevant API. The APIs query entity services backed by repositories and contexts. The README also establishes these as HTTP-connected microservices; unsampled view and context-reader implementations limit the detail of some links.

Main entry points: [`src/Application/ClientApp/src/router/index.ts`](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/router/index.ts) (Client router), [`src/Application/Program.cs`](https://github.com/vahagndol/destinations/blob/master/src/Application/Program.cs) (Application host), [`src/Application/ClientApp/src/App.vue`](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/App.vue) (Vue application), [`src/Locations.API/Controllers/LocationController.cs`](https://github.com/vahagndol/destinations/blob/master/src/Locations.API/Controllers/LocationController.cs) (Location endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_spa["Vue application<br/>[App.vue]"]
  node_home["Home view<br/>[HomeView.vue]"]
  node_locationsview["Locations view<br/>[LocationsView.vue]"]
  node_placesview["Places view<br/>[PlacesView.vue]"]
  node_accountview["Account view<br/>[AccountView.vue]"]
  node_router["Client router<br/>[index.ts]"]
  node_jsonclient["JSON client<br/>[useJson.ts]"]
end

subgraph group_gateway["Application gateway"]
  node_apphost["Application host<br/>[Program.cs]"]
  node_locproxy["Locations proxy"]
  node_placeproxy["Places proxy"]
end

subgraph group_services["Destination APIs"]
  node_locapi["Locations API<br/>[Program.cs]"]
  node_loccontroller["Location endpoint"]
  node_placesapi["Places API<br/>[Program.cs]"]
  node_placecontroller["Place endpoint<br/>[PlaceController.cs]"]
  node_placeservice["Place service<br/>[PlaceService.cs]"]
end

subgraph group_core["Shared domain and infrastructure"]
  node_entityservice["Entity service<br/>[EntityService.cs]"]
  node_repository["Repository<br/>[Repository.cs]"]
  node_context[("Application context")]
  node_reader["Context reader<br/>[IContextReader.cs]"]
  node_location["Location entity<br/>[Location.cs]"]
  node_place["Place entity<br/>[Place.cs]"]
end

node_visitor(("Visitor"))

node_visitor -->|"uses"| node_spa
node_spa -->|"routes through"| node_router
node_router -->|"selects view"| node_home
node_router -->|"selects view"| node_locationsview
node_router -->|"selects view"| node_placesview
node_router -->|"selects view"| node_accountview
node_spa -->|"served by"| node_apphost
node_apphost -->|"maps endpoints"| node_locproxy
node_apphost -->|"maps endpoints"| node_placeproxy
node_apphost -.->|"configures HTTP client"| node_locapi
node_apphost -.->|"configures HTTP client"| node_placesapi
node_locproxy -->|"requests locations"| node_locapi
node_placeproxy -->|"requests places"| node_placesapi
node_locapi -->|"maps controllers"| node_loccontroller
node_placesapi -->|"maps controllers"| node_placecontroller
node_loccontroller -->|"queries"| node_entityservice
node_placecontroller -->|"queries"| node_placeservice
node_placeservice -->|"inherits"| node_entityservice
node_entityservice -->|"queries"| node_repository
node_repository -->|"reads entities"| node_context
node_context -->|"loads data"| node_reader
node_loccontroller -->|"returns"| node_location
node_placecontroller -->|"returns"| node_place

click node_spa "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/App.vue"
click node_home "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/HomeView.vue"
click node_locationsview "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/LocationsView.vue"
click node_placesview "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/PlacesView.vue"
click node_accountview "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/AccountView.vue"
click node_router "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/router/index.ts"
click node_jsonclient "https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/composables/useJson.ts"
click node_apphost "https://github.com/vahagndol/destinations/blob/master/src/Application/Program.cs"
click node_locproxy "https://github.com/vahagndol/destinations/blob/master/src/Application/Controllers/LocationsController.cs"
click node_placeproxy "https://github.com/vahagndol/destinations/blob/master/src/Application/Controllers/PlacesController.cs"
click node_locapi "https://github.com/vahagndol/destinations/blob/master/src/Locations.API/Program.cs"
click node_loccontroller "https://github.com/vahagndol/destinations/blob/master/src/Locations.API/Controllers/LocationController.cs"
click node_placesapi "https://github.com/vahagndol/destinations/blob/master/src/Places.API/Program.cs"
click node_placecontroller "https://github.com/vahagndol/destinations/blob/master/src/Places.API/Controllers/PlaceController.cs"
click node_placeservice "https://github.com/vahagndol/destinations/blob/master/src/Places.API/Helper/PlaceService.cs"
click node_entityservice "https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Services/EntityService.cs"
click node_repository "https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Repositories/Repository.cs"
click node_context "https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Context/ApplicationDbContext.cs"
click node_reader "https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Context/IContextReader.cs"
click node_location "https://github.com/vahagndol/destinations/blob/master/src/Domain/Entities/Location.cs"
click node_place "https://github.com/vahagndol/destinations/blob/master/src/Domain/Entities/Place.cs"

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_spa,node_home,node_locationsview,node_placesview,node_accountview,node_router,node_jsonclient toneBlue
class node_apphost,node_locproxy,node_placeproxy toneAmber
class node_locapi,node_loccontroller,node_placesapi,node_placecontroller,node_placeservice toneMint
class node_entityservice,node_repository,node_context,node_reader,node_location,node_place toneRose
class node_visitor toneIndigo
```

## Components

### Web client

- [Vue application](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/App.vue): `src/Application/ClientApp/src/App.vue`
- [Home view](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/HomeView.vue): `src/Application/ClientApp/src/views/HomeView.vue`
- [Locations view](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/LocationsView.vue): `src/Application/ClientApp/src/views/LocationsView.vue`
- [Places view](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/PlacesView.vue): `src/Application/ClientApp/src/views/PlacesView.vue`
- [Account view](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/views/AccountView.vue): `src/Application/ClientApp/src/views/AccountView.vue`
- [Client router](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/router/index.ts): `src/Application/ClientApp/src/router/index.ts`
- [JSON client](https://github.com/vahagndol/destinations/blob/master/src/Application/ClientApp/src/composables/useJson.ts): `src/Application/ClientApp/src/composables/useJson.ts`

### Application gateway

- [Application host](https://github.com/vahagndol/destinations/blob/master/src/Application/Program.cs): `src/Application/Program.cs`
- [Locations proxy](https://github.com/vahagndol/destinations/blob/master/src/Application/Controllers/LocationsController.cs): `src/Application/Controllers/LocationsController.cs`
- [Places proxy](https://github.com/vahagndol/destinations/blob/master/src/Application/Controllers/PlacesController.cs): `src/Application/Controllers/PlacesController.cs`

### Destination APIs

- [Locations API](https://github.com/vahagndol/destinations/blob/master/src/Locations.API/Program.cs): `src/Locations.API/Program.cs`
- [Location endpoint](https://github.com/vahagndol/destinations/blob/master/src/Locations.API/Controllers/LocationController.cs): `src/Locations.API/Controllers/LocationController.cs`
- [Places API](https://github.com/vahagndol/destinations/blob/master/src/Places.API/Program.cs): `src/Places.API/Program.cs`
- [Place endpoint](https://github.com/vahagndol/destinations/blob/master/src/Places.API/Controllers/PlaceController.cs): `src/Places.API/Controllers/PlaceController.cs`
- [Place service](https://github.com/vahagndol/destinations/blob/master/src/Places.API/Helper/PlaceService.cs): `src/Places.API/Helper/PlaceService.cs`

### Shared domain and infrastructure

- [Entity service](https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Services/EntityService.cs): `src/Infrastructure/Services/EntityService.cs`
- [Repository](https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Repositories/Repository.cs): `src/Infrastructure/Repositories/Repository.cs`
- [Application context](https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Context/ApplicationDbContext.cs): `src/Infrastructure/Context/ApplicationDbContext.cs`
- [Context reader](https://github.com/vahagndol/destinations/blob/master/src/Infrastructure/Context/IContextReader.cs): `src/Infrastructure/Context/IContextReader.cs`
- [Location entity](https://github.com/vahagndol/destinations/blob/master/src/Domain/Entities/Location.cs): `src/Domain/Entities/Location.cs`
- [Place entity](https://github.com/vahagndol/destinations/blob/master/src/Domain/Entities/Place.cs): `src/Domain/Entities/Place.cs`

### Other components

- **Visitor**

## Connections

- Visitor → Vue application: uses
- Vue application → Client router: routes through
- Client router → Home view: selects view
- Client router → Locations view: selects view
- Client router → Places view: selects view
- Client router → Account view: selects view
- Vue application → Application host: served by
- Application host → Locations proxy: maps endpoints
- Application host → Places proxy: maps endpoints
- Application host → Locations API: configures HTTP client
- Application host → Places API: configures HTTP client
- Locations proxy → Locations API: requests locations
- Places proxy → Places API: requests places
- Locations API → Location endpoint: maps controllers
- Places API → Place endpoint: maps controllers
- Location endpoint → Entity service: queries
- Place endpoint → Place service: queries
- Place service → Entity service: inherits
- Entity service → Repository: queries
- Repository → Application context: reads entities
- Application context → Context reader: loads data
- Location endpoint → Location entity: returns
- Place endpoint → Place entity: returns
