# skorpionreser/gtamapquant architecture

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

- Interactive diagram: https://gitdiagram.com/skorpionreser/gtamapquant
- Repository: https://github.com/skorpionreser/gtamapquant

## Overview

GTAMapQuant is a web app for viewing and managing GTA map markers and polygonal areas. The browser map workflow loads marker and area data through feature hooks and API clients, then presents it in the map UI; create and marker-edit actions travel through API controllers and MediatR handlers to SQLite. The backend also validates requests and supports marker lookup and deletion. Frontend wiring beyond the sampled files is inferred from the feature layout, so uncertain links are omitted.

Main entry points: [`backend/GTAMapQuant.Api/Controllers/MapMarkers/MapMarkersController.cs`](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapMarkers/MapMarkersController.cs) (Marker endpoints), [`backend/GTAMapQuant.DAL/Data/GtaMapDbContext.cs`](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.DAL/Data/GtaMapDbContext.cs) (Map database), [`frontend/src/features/map/MapPage.tsx`](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/MapPage.tsx) (Map page), [`backend/GTAMapQuant.Api/Controllers/MapAreas/MapAreasController.cs`](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapAreas/MapAreasController.cs) (Areas endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Map frontend"]
  node_map_page["Map page<br/>[MapPage.tsx]"]
  node_map_view["GTA map<br/>[GtaMap.tsx]"]
  node_area_hook["Area hook<br/>[useMapAreas.ts]"]
  node_marker_hook["Marker hook<br/>[useMapMarkers.ts]"]
  node_area_client["Area API client<br/>[mapAreasApi.ts]"]
  node_marker_client["Marker API client<br/>[mapMarkersApi.ts]"]
end

subgraph group_api["HTTP API"]
  node_areas_controller["Areas endpoints"]
  node_markers_controller["Marker endpoints"]
end

subgraph group_application["Application logic"]
  node_validation["Request validation"]
  node_area_create["Create area"]
  node_area_read["List areas"]
  node_marker_create["Create marker"]
  node_marker_read["Read markers"]
  node_marker_lookup["Find marker"]
  node_marker_update["Update marker"]
  node_marker_delete["Delete marker"]
end

subgraph group_data["Persistence"]
  node_database[("Map database<br/>[GtaMapDbContext.cs]")]
end

node_browser(("Map user"))

node_browser -->|"uses"| node_map_page
node_map_page -->|"renders"| node_map_view
node_map_page -->|"loads areas"| node_area_hook
node_map_page -->|"loads markers"| node_marker_hook
node_area_hook -->|"requests areas"| node_area_client
node_marker_hook -->|"requests markers"| node_marker_client
node_area_client -->|"HTTP requests"| node_areas_controller
node_marker_client -->|"HTTP requests"| node_markers_controller
node_areas_controller -->|"dispatches query"| node_area_read
node_areas_controller -->|"dispatches command"| node_area_create
node_markers_controller -->|"dispatches query"| node_marker_read
node_markers_controller -->|"dispatches query"| node_marker_lookup
node_markers_controller -->|"dispatches command"| node_marker_create
node_markers_controller -->|"dispatches command"| node_marker_update
node_markers_controller -->|"dispatches command"| node_marker_delete
node_area_create -->|"writes area"| node_database
node_area_read -->|"reads areas"| node_database
node_marker_create -->|"writes marker"| node_database
node_marker_read -->|"reads markers"| node_database
node_marker_lookup -->|"reads marker"| node_database
node_marker_update -->|"updates marker"| node_database
node_marker_delete -->|"deletes marker"| node_database

click node_map_page "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/MapPage.tsx"
click node_map_view "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/components/GtaMap/GtaMap.tsx"
click node_area_hook "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/hooks/useMapAreas.ts"
click node_marker_hook "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/hooks/useMapMarkers.ts"
click node_area_client "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/api/mapAreasApi.ts"
click node_marker_client "https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/api/mapMarkersApi.ts"
click node_areas_controller "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapAreas/MapAreasController.cs"
click node_markers_controller "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapMarkers/MapMarkersController.cs"
click node_validation "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/Behaviors/ValidationBehavior.cs"
click node_area_create "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapAreas/CreateMapArea/CreateMapAreaHandler.cs"
click node_area_read "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapAreas/GetAllMapAreas/GetAllMapAreasHandler.cs"
click node_marker_create "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/CreateMapMarker/CreateMapMarkerHandler.cs"
click node_marker_read "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetAllMapMarkers/GetAllMapMarkersHandler.cs"
click node_marker_lookup "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetMapMarkerById/GetMapMarkerByIdHandler.cs"
click node_marker_update "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/UpdateMapMarker/UpdateMapMarkerHandler.cs"
click node_marker_delete "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/DeleteMapMarker/DeleteMapMarkerHandler.cs"
click node_database "https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.DAL/Data/GtaMapDbContext.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_map_page,node_map_view,node_area_hook,node_marker_hook,node_area_client,node_marker_client,node_browser toneBlue
class node_areas_controller,node_markers_controller toneAmber
class node_validation,node_area_create,node_area_read,node_marker_create,node_marker_read,node_marker_lookup,node_marker_update,node_marker_delete toneMint
class node_database toneRose
```

## Components

### Map frontend

- [Map page](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/MapPage.tsx): `frontend/src/features/map/MapPage.tsx`
- [GTA map](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/components/GtaMap/GtaMap.tsx): `frontend/src/features/map/components/GtaMap/GtaMap.tsx`
- [Area hook](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/hooks/useMapAreas.ts): `frontend/src/features/map/hooks/useMapAreas.ts`
- [Marker hook](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/hooks/useMapMarkers.ts): `frontend/src/features/map/hooks/useMapMarkers.ts`
- [Area API client](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/api/mapAreasApi.ts): `frontend/src/features/map/api/mapAreasApi.ts`
- [Marker API client](https://github.com/skorpionreser/gtamapquant/blob/dev/frontend/src/features/map/api/mapMarkersApi.ts): `frontend/src/features/map/api/mapMarkersApi.ts`

### HTTP API

- [Areas endpoints](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapAreas/MapAreasController.cs): `backend/GTAMapQuant.Api/Controllers/MapAreas/MapAreasController.cs`
- [Marker endpoints](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.Api/Controllers/MapMarkers/MapMarkersController.cs): `backend/GTAMapQuant.Api/Controllers/MapMarkers/MapMarkersController.cs`

### Application logic

- [Request validation](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/Behaviors/ValidationBehavior.cs): `backend/GTAMapQuant.BLL/MediatR/Behaviors/ValidationBehavior.cs`
- [Create area](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapAreas/CreateMapArea/CreateMapAreaHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapAreas/CreateMapArea/CreateMapAreaHandler.cs`
- [List areas](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapAreas/GetAllMapAreas/GetAllMapAreasHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapAreas/GetAllMapAreas/GetAllMapAreasHandler.cs`
- [Create marker](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/CreateMapMarker/CreateMapMarkerHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapMarkers/CreateMapMarker/CreateMapMarkerHandler.cs`
- [Read markers](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetAllMapMarkers/GetAllMapMarkersHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetAllMapMarkers/GetAllMapMarkersHandler.cs`
- [Find marker](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetMapMarkerById/GetMapMarkerByIdHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapMarkers/GetMapMarkerById/GetMapMarkerByIdHandler.cs`
- [Update marker](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/UpdateMapMarker/UpdateMapMarkerHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapMarkers/UpdateMapMarker/UpdateMapMarkerHandler.cs`
- [Delete marker](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.BLL/MediatR/MapMarkers/DeleteMapMarker/DeleteMapMarkerHandler.cs): `backend/GTAMapQuant.BLL/MediatR/MapMarkers/DeleteMapMarker/DeleteMapMarkerHandler.cs`

### Persistence

- [Map database](https://github.com/skorpionreser/gtamapquant/blob/dev/backend/GTAMapQuant.DAL/Data/GtaMapDbContext.cs): `backend/GTAMapQuant.DAL/Data/GtaMapDbContext.cs`

### Other components

- **Map user**

## Connections

- Map user → Map page: uses
- Map page → GTA map: renders
- Map page → Area hook: loads areas
- Map page → Marker hook: loads markers
- Area hook → Area API client: requests areas
- Marker hook → Marker API client: requests markers
- Area API client → Areas endpoints: HTTP requests
- Marker API client → Marker endpoints: HTTP requests
- Areas endpoints → List areas: dispatches query
- Areas endpoints → Create area: dispatches command
- Marker endpoints → Read markers: dispatches query
- Marker endpoints → Find marker: dispatches query
- Marker endpoints → Create marker: dispatches command
- Marker endpoints → Update marker: dispatches command
- Marker endpoints → Delete marker: dispatches command
- Create area → Map database: writes area
- List areas → Map database: reads areas
- Create marker → Map database: writes marker
- Read markers → Map database: reads markers
- Find marker → Map database: reads marker
- Update marker → Map database: updates marker
- Delete marker → Map database: deletes marker
