# dlopezs98/stockitapi architecture

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

- Interactive diagram: https://gitdiagram.com/dlopezs98/stockitapi
- Repository: https://github.com/dlopezs98/stockitapi

## Overview

StockitApi is an inventory and invoicing backend with user authentication, role-based permissions, and operational analytics/observability endpoints. Its main workflow is an authorized client request through an API controller to a domain service, which uses repository-backed persistence for business records. Authentication and role administration form a separate access-control branch; usage metrics and analytics are additional capabilities. The source index supports the shown controller/service and service/persistence calls; analytics and observability internals were not sampled, so their links are omitted.

Main entry points: [`StockitApi/Data/Repositories/UnitOfWork.cs`](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/Repositories/UnitOfWork.cs) (Unit of work), [`StockitApi/Services/AuthenticationService.cs`](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/AuthenticationService.cs) (Authentication), [`StockitApi/Middlewares/UsageMetricsMiddleware.cs`](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Middlewares/UsageMetricsMiddleware.cs) (Usage metrics), [`StockitApi/Controllers/AuthController.cs`](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/AuthController.cs) (Auth API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API boundary"]
  node_auth_api["Auth API<br/>[AuthController.cs]"]
  node_product_api["Product API"]
  node_invoice_api["Invoice API"]
  node_users_api["Users API<br/>[UsersController.cs]"]
  node_roles_api["Roles API<br/>[RolesController.cs]"]
end

subgraph group_identity["Identity and access"]
  node_auth_service["Authentication"]
  node_token_service["Token service<br/>[TokenService.cs]"]
  node_access_policy["Permission authorization"]
  node_permission_rules["Permission rules<br/>[Permissions.cs]"]
  node_role_service["Role management<br/>[RoleService.cs]"]
  node_user_service["User management<br/>[UserService.cs]"]
end

subgraph group_commerce["Inventory and invoicing"]
  node_product_service["Product management<br/>[ProductService.cs]"]
  node_invoice_service["Invoice processing<br/>[InvoiceService.cs]"]
  node_catalog_inventory["Catalog and stock<br/>[Product.cs]"]
  node_invoice_records["Invoice records<br/>[Invoice.cs]"]
end

subgraph group_operations["Insights and operations"]
  node_analytics_api["Analytics API"]
  node_analytics_service["Analytics"]
  node_observability_api["Observability API"]
  node_observability_service["Observability"]
  node_usage_metrics["Usage metrics"]
  node_usage_logs["Usage logs<br/>[ApiUsageLog.cs]"]
end

subgraph group_persistence["Persistence"]
  node_uow["Unit of work<br/>[UnitOfWork.cs]"]
  node_ef_repository["EF repositories<br/>[EfRepository.cs]"]
  node_database[("Application database<br/>[StockitContext.cs]")]
end

node_client(("API client"))

node_client -->|"requests"| node_auth_api
node_client -->|"requests"| node_product_api
node_client -->|"requests"| node_invoice_api
node_client -->|"requests"| node_users_api
node_client -->|"requests"| node_roles_api
node_client -.->|"requests"| node_analytics_api
node_client -.->|"requests"| node_observability_api
node_auth_api -->|"delegates to"| node_auth_service
node_product_api -->|"delegates to"| node_product_service
node_invoice_api -->|"delegates to"| node_invoice_service
node_users_api -->|"delegates to"| node_user_service
node_roles_api -->|"delegates to"| node_role_service
node_auth_service -->|"uses repositories"| node_uow
node_auth_service -->|"issues tokens"| node_token_service
node_product_service -->|"uses repositories"| node_uow
node_invoice_service -->|"uses repositories"| node_uow
node_role_service -->|"uses repositories"| node_uow
node_user_service -.->|"uses repositories"| node_uow
node_access_policy -->|"checks permissions"| node_permission_rules
node_uow -->|"provides repositories"| node_ef_repository
node_ef_repository -->|"queries and saves"| node_database
node_usage_metrics -->|"records usage"| node_uow
node_usage_metrics -->|"writes logs"| node_usage_logs
node_analytics_api -.->|"delegates to"| node_analytics_service
node_observability_api -.->|"delegates to"| node_observability_service

click node_auth_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/AuthController.cs"
click node_product_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/ProductsController.cs"
click node_invoice_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/InvoicesController.cs"
click node_users_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/UsersController.cs"
click node_roles_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/RolesController.cs"
click node_auth_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/AuthenticationService.cs"
click node_token_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/TokenService.cs"
click node_access_policy "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Authorization/PermissionAuthorizationHandler.cs"
click node_permission_rules "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Models/Permissions.cs"
click node_role_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/RoleService.cs"
click node_user_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/UserService.cs"
click node_product_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/ProductService.cs"
click node_invoice_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/InvoiceService.cs"
click node_catalog_inventory "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/Product.cs"
click node_invoice_records "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/Invoice.cs"
click node_analytics_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/AnalyticsController.cs"
click node_analytics_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/AnalyticsService.cs"
click node_observability_api "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/ObservabilityController.cs"
click node_observability_service "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/ObservabilityService.cs"
click node_usage_metrics "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Middlewares/UsageMetricsMiddleware.cs"
click node_usage_logs "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/ApiUsageLog.cs"
click node_uow "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/Repositories/UnitOfWork.cs"
click node_ef_repository "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/Repositories/EfRepository.cs"
click node_database "https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/StockitContext.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_auth_api,node_product_api,node_invoice_api,node_users_api,node_roles_api,node_client toneBlue
class node_auth_service,node_token_service,node_access_policy,node_permission_rules,node_role_service,node_user_service toneAmber
class node_product_service,node_invoice_service,node_catalog_inventory,node_invoice_records toneMint
class node_analytics_api,node_analytics_service,node_observability_api,node_observability_service,node_usage_metrics,node_usage_logs toneRose
class node_uow,node_ef_repository,node_database toneIndigo
```

## Components

### API boundary

- [Auth API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/AuthController.cs): `StockitApi/Controllers/AuthController.cs`
- [Product API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/ProductsController.cs): `StockitApi/Controllers/ProductsController.cs`
- [Invoice API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/InvoicesController.cs): `StockitApi/Controllers/InvoicesController.cs`
- [Users API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/UsersController.cs): `StockitApi/Controllers/UsersController.cs`
- [Roles API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/RolesController.cs): `StockitApi/Controllers/RolesController.cs`

### Identity and access

- [Authentication](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/AuthenticationService.cs): `StockitApi/Services/AuthenticationService.cs`
- [Token service](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/TokenService.cs): `StockitApi/Services/TokenService.cs`
- [Permission authorization](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Authorization/PermissionAuthorizationHandler.cs): `StockitApi/Authorization/PermissionAuthorizationHandler.cs`
- [Permission rules](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Models/Permissions.cs): `StockitApi/Models/Permissions.cs`
- [Role management](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/RoleService.cs): `StockitApi/Services/RoleService.cs`
- [User management](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/UserService.cs): `StockitApi/Services/UserService.cs`

### Inventory and invoicing

- [Product management](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/ProductService.cs): `StockitApi/Services/ProductService.cs`
- [Invoice processing](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/InvoiceService.cs): `StockitApi/Services/InvoiceService.cs`
- [Catalog and stock](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/Product.cs): `StockitApi/Entities/Product.cs`
- [Invoice records](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/Invoice.cs): `StockitApi/Entities/Invoice.cs`

### Insights and operations

- [Analytics API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/AnalyticsController.cs): `StockitApi/Controllers/AnalyticsController.cs`
- [Analytics](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/AnalyticsService.cs): `StockitApi/Services/AnalyticsService.cs`
- [Observability API](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Controllers/ObservabilityController.cs): `StockitApi/Controllers/ObservabilityController.cs`
- [Observability](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Services/ObservabilityService.cs): `StockitApi/Services/ObservabilityService.cs`
- [Usage metrics](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Middlewares/UsageMetricsMiddleware.cs): `StockitApi/Middlewares/UsageMetricsMiddleware.cs`
- [Usage logs](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Entities/ApiUsageLog.cs): `StockitApi/Entities/ApiUsageLog.cs`

### Persistence

- [Unit of work](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/Repositories/UnitOfWork.cs): `StockitApi/Data/Repositories/UnitOfWork.cs`
- [EF repositories](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/Repositories/EfRepository.cs): `StockitApi/Data/Repositories/EfRepository.cs`
- [Application database](https://github.com/dlopezs98/stockitapi/blob/master/StockitApi/Data/StockitContext.cs): `StockitApi/Data/StockitContext.cs`

### Other components

- **API client**

## Connections

- API client → Auth API: requests (evidence: `StockitApi/Controllers/AuthController.cs`)
- API client → Product API: requests (evidence: `StockitApi/Controllers/ProductsController.cs`)
- API client → Invoice API: requests (evidence: `StockitApi/Controllers/InvoicesController.cs`)
- API client → Users API: requests (evidence: `StockitApi/Controllers/UsersController.cs`)
- API client → Roles API: requests (evidence: `StockitApi/Controllers/RolesController.cs`)
- API client → Analytics API: requests
- API client → Observability API: requests
- Auth API → Authentication: delegates to (evidence: `StockitApi/Controllers/AuthController.cs`)
- Product API → Product management: delegates to (evidence: `StockitApi/Controllers/ProductsController.cs`)
- Invoice API → Invoice processing: delegates to (evidence: `StockitApi/Controllers/InvoicesController.cs`)
- Users API → User management: delegates to (evidence: `StockitApi/Controllers/UsersController.cs`)
- Roles API → Role management: delegates to (evidence: `StockitApi/Controllers/RolesController.cs`)
- Authentication → Unit of work: uses repositories (evidence: `StockitApi/Services/AuthenticationService.cs`)
- Authentication → Token service: issues tokens (evidence: `StockitApi/Services/AuthenticationService.cs`)
- Product management → Unit of work: uses repositories (evidence: `StockitApi/Services/ProductService.cs`)
- Invoice processing → Unit of work: uses repositories (evidence: `StockitApi/Services/InvoiceService.cs`)
- Role management → Unit of work: uses repositories (evidence: `StockitApi/Services/RoleService.cs`)
- User management → Unit of work: uses repositories
- Permission authorization → Permission rules: checks permissions
- Unit of work → EF repositories: provides repositories (evidence: `StockitApi/Data/Repositories/EfRepository.cs`)
- EF repositories → Application database: queries and saves (evidence: `StockitApi/Data/Repositories/EfRepository.cs`)
- Usage metrics → Unit of work: records usage (evidence: `StockitApi/Middlewares/UsageMetricsMiddleware.cs`)
- Usage metrics → Usage logs: writes logs (evidence: `StockitApi/Middlewares/UsageMetricsMiddleware.cs`)
- Analytics API → Analytics: delegates to
- Observability API → Observability: delegates to
