# beqa-eqseulidze/storeapi architecture

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

- Interactive diagram: https://gitdiagram.com/beqa-eqseulidze/storeapi
- Repository: https://github.com/beqa-eqseulidze/storeapi

## Overview

This appears to be a commerce-style API despite the README’s generic “TaskManager” title: clients can manage products, categories, product images, orders, and authentication. The visible workflow routes HTTP requests through controllers to MediatR commands or queries, which use repositories via a unit of work; persistence is backed by EF Core. The graph preserves the major API and domain areas shown in the tree. Some handlers and wiring were not sampled, so their connections are omitted rather than inferred.

Main entry points: [`Persistance/Common/BaseRepository.cs`](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Common/BaseRepository.cs) (Base repository), [`Domain/Interfaces/IUnitOfWork.cs`](https://github.com/beqa-eqseulidze/storeapi/blob/main/Domain/Interfaces/IUnitOfWork.cs) (Unit of work), [`Application/Mediart`](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart) (Category workflows), [`Persistance/AppDbContext.cs`](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/AppDbContext.cs) (EF Core context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_category_api["Category API"]
  node_product_api["Product API"]
  node_image_api["Product image API"]
  node_order_api["Order API<br/>[OrderController.cs]"]
  node_auth_api["Authentication API<br/>[AuthController.cs]"]
  node_exception_handler["Exception handling"]
end

subgraph group_application["Application workflows"]
  node_category_workflows["Category workflows"]
  node_product_workflows["Product workflows"]
  node_image_workflows["Image workflows"]
  node_order_workflows["Order workflows"]
  node_auth_workflows["Auth workflows"]
  node_validation["Request validation"]
end

subgraph group_domain["Commerce domain"]
  node_unit_of_work["Unit of work<br/>[IUnitOfWork.cs]"]
  node_repository_contracts["Repository contracts"]
  node_commerce_entities["Commerce entities"]
  node_audit_entity["Audit and soft-delete fields"]
end

subgraph group_persistence["Persistence and auth"]
  node_ef_context[("EF Core context<br/>[AppDbContext.cs]")]
  node_base_repository["Base repository<br/>[BaseRepository.cs]"]
  node_category_repository["Category repository"]
  node_product_repository["Product repository"]
  node_image_repository["Image repository"]
  node_order_repository["Order repository<br/>[OrderRepository.cs]"]
  node_user_repository["User repository<br/>[UserRepository.cs]"]
  node_jwt["JWT token generator"]
end

node_client(("API client"))

node_client -.->|"sends requests"| node_category_api
node_client -.->|"sends requests"| node_product_api
node_client -.->|"sends requests"| node_image_api
node_client -.->|"sends requests"| node_order_api
node_client -.->|"sends requests"| node_auth_api
node_category_api -->|"dispatches commands and queries"| node_category_workflows
node_product_api -->|"dispatches commands and queries"| node_product_workflows
node_image_api -->|"dispatches commands and queries"| node_image_workflows
node_order_api -->|"dispatches commands"| node_order_workflows
node_auth_api -->|"dispatches commands"| node_auth_workflows
node_category_workflows -->|"uses repositories"| node_unit_of_work
node_product_workflows -->|"uses repositories"| node_unit_of_work
node_order_workflows -->|"uses repositories"| node_unit_of_work
node_image_workflows -->|"uses repositories"| node_unit_of_work
node_unit_of_work -->|"exposes repositories"| node_repository_contracts
node_category_workflows -->|"queries categories"| node_category_repository
node_product_workflows -->|"queries products"| node_product_repository
node_image_workflows -->|"queries images"| node_image_repository
node_order_workflows -->|"queries orders"| node_order_repository
node_category_repository -->|"inherits repository behavior"| node_base_repository
node_product_repository -->|"inherits repository behavior"| node_base_repository
node_image_repository -->|"inherits repository behavior"| node_base_repository
node_order_repository -->|"inherits repository behavior"| node_base_repository
node_user_repository -->|"inherits repository behavior"| node_base_repository
node_base_repository -->|"uses EF context"| node_ef_context
node_ef_context -->|"applies audit behavior"| node_audit_entity
node_ef_context -.->|"maps domain entities"| node_commerce_entities
node_auth_workflows -.->|"generates tokens"| node_jwt
node_exception_handler -.->|"handles request errors"| node_category_api

click node_category_api "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/CategoryController.cs"
click node_product_api "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/ProductController.cs"
click node_image_api "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/ProductImageController.cs"
click node_order_api "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/OrderController.cs"
click node_auth_api "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/AuthController.cs"
click node_exception_handler "https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Middleware/GlobalExceptionHandler.cs"
click node_category_workflows "https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart"
click node_product_workflows "https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart"
click node_image_workflows "https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart"
click node_order_workflows "https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart"
click node_auth_workflows "https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart/Commands/Auth"
click node_validation "https://github.com/beqa-eqseulidze/storeapi/blob/main/Application/Common/Behaviors/ValidationBehavior.cs"
click node_unit_of_work "https://github.com/beqa-eqseulidze/storeapi/blob/main/Domain/Interfaces/IUnitOfWork.cs"
click node_repository_contracts "https://github.com/beqa-eqseulidze/storeapi/tree/main/Domain/Interfaces"
click node_commerce_entities "https://github.com/beqa-eqseulidze/storeapi/tree/main/Domain/Entities"
click node_audit_entity "https://github.com/beqa-eqseulidze/storeapi/blob/main/Domain/Common/BaseAuditabelEntity.cs"
click node_ef_context "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/AppDbContext.cs"
click node_base_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Common/BaseRepository.cs"
click node_category_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/CategoryRepository.cs"
click node_product_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/ProductRepository.cs"
click node_image_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/ProductImageRepository.cs"
click node_order_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/OrderRepository.cs"
click node_user_repository "https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/UserRepository.cs"
click node_jwt "https://github.com/beqa-eqseulidze/storeapi/blob/main/Infrastructure/Authentication/JwtTokenGenerator.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_category_api,node_product_api,node_image_api,node_order_api,node_auth_api,node_exception_handler,node_client toneBlue
class node_category_workflows,node_product_workflows,node_image_workflows,node_order_workflows,node_auth_workflows,node_validation toneAmber
class node_unit_of_work,node_repository_contracts,node_commerce_entities,node_audit_entity toneMint
class node_ef_context,node_base_repository,node_category_repository,node_product_repository,node_image_repository,node_order_repository,node_user_repository,node_jwt toneRose
```

## Components

### HTTP API

- [Category API](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/CategoryController.cs): `Web.API/Controllers/CategoryController.cs`
- [Product API](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/ProductController.cs): `Web.API/Controllers/ProductController.cs`
- [Product image API](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/ProductImageController.cs): `Web.API/Controllers/ProductImageController.cs`
- [Order API](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/OrderController.cs): `Web.API/Controllers/OrderController.cs`
- [Authentication API](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Controllers/AuthController.cs): `Web.API/Controllers/AuthController.cs`
- [Exception handling](https://github.com/beqa-eqseulidze/storeapi/blob/main/Web.API/Middleware/GlobalExceptionHandler.cs): `Web.API/Middleware/GlobalExceptionHandler.cs`

### Application workflows

- [Category workflows](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart): `Application/Mediart`
- [Product workflows](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart): `Application/Mediart`
- [Image workflows](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart): `Application/Mediart`
- [Order workflows](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart): `Application/Mediart`
- [Auth workflows](https://github.com/beqa-eqseulidze/storeapi/tree/main/Application/Mediart/Commands/Auth): `Application/Mediart/Commands/Auth`
- [Request validation](https://github.com/beqa-eqseulidze/storeapi/blob/main/Application/Common/Behaviors/ValidationBehavior.cs): `Application/Common/Behaviors/ValidationBehavior.cs`

### Commerce domain

- [Unit of work](https://github.com/beqa-eqseulidze/storeapi/blob/main/Domain/Interfaces/IUnitOfWork.cs): `Domain/Interfaces/IUnitOfWork.cs`
- [Repository contracts](https://github.com/beqa-eqseulidze/storeapi/tree/main/Domain/Interfaces): `Domain/Interfaces`
- [Commerce entities](https://github.com/beqa-eqseulidze/storeapi/tree/main/Domain/Entities): `Domain/Entities`
- [Audit and soft-delete fields](https://github.com/beqa-eqseulidze/storeapi/blob/main/Domain/Common/BaseAuditabelEntity.cs): `Domain/Common/BaseAuditabelEntity.cs`

### Persistence and auth

- [EF Core context](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/AppDbContext.cs): `Persistance/AppDbContext.cs`
- [Base repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Common/BaseRepository.cs): `Persistance/Common/BaseRepository.cs`
- [Category repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/CategoryRepository.cs): `Persistance/Repositories/CategoryRepository.cs`
- [Product repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/ProductRepository.cs): `Persistance/Repositories/ProductRepository.cs`
- [Image repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/ProductImageRepository.cs): `Persistance/Repositories/ProductImageRepository.cs`
- [Order repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/OrderRepository.cs): `Persistance/Repositories/OrderRepository.cs`
- [User repository](https://github.com/beqa-eqseulidze/storeapi/blob/main/Persistance/Repositories/UserRepository.cs): `Persistance/Repositories/UserRepository.cs`
- [JWT token generator](https://github.com/beqa-eqseulidze/storeapi/blob/main/Infrastructure/Authentication/JwtTokenGenerator.cs): `Infrastructure/Authentication/JwtTokenGenerator.cs`

### Other components

- **API client**

## Connections

- API client → Category API: sends requests
- API client → Product API: sends requests
- API client → Product image API: sends requests
- API client → Order API: sends requests
- API client → Authentication API: sends requests
- Category API → Category workflows: dispatches commands and queries (evidence: `Web.API/Controllers/CategoryController.cs`)
- Product API → Product workflows: dispatches commands and queries (evidence: `Web.API/Controllers/ProductController.cs`)
- Product image API → Image workflows: dispatches commands and queries (evidence: `Web.API/Controllers/ProductImageController.cs`)
- Order API → Order workflows: dispatches commands (evidence: `Web.API/Controllers/OrderController.cs`)
- Authentication API → Auth workflows: dispatches commands
- Category workflows → Unit of work: uses repositories (evidence: `Application/Mediart/Queries/Category/GetAllCategoriesQuery.cs`)
- Product workflows → Unit of work: uses repositories (evidence: `Application/Mediart/Queries/Product/GetFilteredProductQuery.cs`)
- Order workflows → Unit of work: uses repositories (evidence: `Application/Mediart/Queries/Order/GetFilteredOrderQuery.cs`)
- Image workflows → Unit of work: uses repositories (evidence: `Application/Mediart/Queries/ProductImage/GetProductImagesByProductIdQuery.cs`)
- Unit of work → Repository contracts: exposes repositories (evidence: `Domain/Interfaces/IUnitOfWork.cs`)
- Category workflows → Category repository: queries categories (evidence: `Application/Mediart/Queries/Category/GetAllCategoriesQuery.cs`)
- Product workflows → Product repository: queries products (evidence: `Application/Mediart/Queries/Product/GetFilteredProductQuery.cs`)
- Image workflows → Image repository: queries images (evidence: `Application/Mediart/Queries/ProductImage/GetProductImagesByProductIdQuery.cs`)
- Order workflows → Order repository: queries orders (evidence: `Application/Mediart/Queries/Order/GetFilteredOrderQuery.cs`)
- Category repository → Base repository: inherits repository behavior
- Product repository → Base repository: inherits repository behavior
- Image repository → Base repository: inherits repository behavior (evidence: `Persistance/Repositories/ProductImageRepository.cs`)
- Order repository → Base repository: inherits repository behavior (evidence: `Persistance/Repositories/OrderRepository.cs`)
- User repository → Base repository: inherits repository behavior (evidence: `Persistance/Repositories/UserRepository.cs`)
- Base repository → EF Core context: uses EF context (evidence: `Persistance/Common/BaseRepository.cs`)
- EF Core context → Audit and soft-delete fields: applies audit behavior (evidence: `Persistance/AppDbContext.cs`)
- EF Core context → Commerce entities: maps domain entities
- Auth workflows → JWT token generator: generates tokens
- Exception handling → Category API: handles request errors
