# obvxindustry/obvx-backend architecture

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

- Interactive diagram: https://gitdiagram.com/obvxindustry/obvx-backend
- Repository: https://github.com/obvxindustry/obvx-backend

## Overview

OBVX is a Spring Boot e-commerce REST API for authentication, user and admin management, product and category catalogs, product images, and customer carts. The main workflow is a client request entering a controller, passing through a domain service, and reading or changing PostgreSQL-backed data; product image operations additionally use Supabase Storage. The README documents these capabilities, while sampled source and the SOURCE INDEX support the shown service, repository, JWT, and storage relationships. Some configuration and unsampled controller details are represented only where the README provides evidence.

Main entry points: [`src/main/java/obvx/com/backend/service/ProductsService.java`](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/ProductsService.java) (Product Management), [`src/main/java/obvx/com/backend/service/AuthService.java`](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/AuthService.java) (Authentication), [`src/main/java/obvx/com/backend/service/CategoryService.java`](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CategoryService.java) (Category Management), [`src/main/java/obvx/com/backend/service/CartService.java`](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CartService.java) (Cart Management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_auth_ctrl["Auth API"]
  node_admin_ctrl["Admin API"]
  node_user_ctrl["User API"]
  node_category_ctrl["Category API"]
  node_products_ctrl["Products API"]
  node_cart_ctrl["Cart API"]
  node_dto["API DTOs"]
end

subgraph group_domain["Commerce Services"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
  node_admin_service["Admin Management<br/>[AdminService.java]"]
  node_user_service["User Profiles<br/>[UserService.java]"]
  node_category_service["Category Management"]
  node_products_service["Product Management"]
  node_cart_service["Cart Management<br/>[CartService.java]"]
  node_storage_service["Image Storage"]
end

subgraph group_data["Persistence Model"]
  node_entities["Domain Entities"]
  node_user_repo["User Repository"]
  node_product_repo["Product Repository"]
  node_category_repo["Category Repository"]
  node_cart_repos["Cart Repositories"]
end

subgraph group_security["Identity Security"]
  node_jwt_filter["JWT Filter"]
  node_jwt_service["JWT Service<br/>[JwtService.java]"]
  node_security_config["Security Rules"]
end

subgraph group_integrations["External Integrations"]
  node_postgres[("Supabase PostgreSQL")]
  node_supabase_storage[("Supabase Storage")]
end

node_client(("API Client"))

node_client -->|"registers / logs in"| node_auth_ctrl
node_client -->|"admin requests"| node_admin_ctrl
node_client -->|"profile requests"| node_user_ctrl
node_client -->|"catalog requests"| node_category_ctrl
node_client -->|"product requests"| node_products_ctrl
node_client -->|"cart requests"| node_cart_ctrl
node_auth_ctrl -->|"delegates"| node_auth_service
node_admin_ctrl -->|"delegates"| node_admin_service
node_user_ctrl -->|"delegates"| node_user_service
node_category_ctrl -->|"delegates"| node_category_service
node_products_ctrl -->|"delegates"| node_products_service
node_cart_ctrl -->|"delegates"| node_cart_service
node_auth_service -->|"reads / saves"| node_user_repo
node_auth_service -->|"generates token"| node_jwt_service
node_admin_service -->|"reads / saves"| node_user_repo
node_user_service -->|"reads / saves"| node_user_repo
node_category_service -->|"reads / saves"| node_category_repo
node_category_service -->|"counts products"| node_product_repo
node_products_service -->|"loads category"| node_category_repo
node_products_service -->|"reads / saves"| node_product_repo
node_products_service -->|"uploads / deletes"| node_storage_service
node_cart_service -->|"reads / saves"| node_cart_repos
node_cart_service -->|"loads product"| node_product_repo
node_jwt_filter -->|"validates token"| node_jwt_service
node_jwt_filter -->|"loads user"| node_user_repo
node_security_config -.->|"installs filter"| node_jwt_filter
node_auth_service -.->|"persists accounts"| node_postgres
node_admin_service -.->|"persists roles"| node_postgres
node_category_service -.->|"persists categories"| node_postgres
node_products_service -.->|"persists products"| node_postgres
node_cart_service -.->|"persists carts"| node_postgres
node_storage_service -->|"uploads / deletes"| node_supabase_storage

click node_auth_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/AuthController.java"
click node_admin_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/AdminController.java"
click node_user_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/UserController.java"
click node_category_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/CategoryController.java"
click node_products_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/ProductsController.java"
click node_cart_ctrl "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/CartController.java"
click node_auth_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/AuthService.java"
click node_admin_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/AdminService.java"
click node_user_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/UserService.java"
click node_category_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CategoryService.java"
click node_products_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/ProductsService.java"
click node_cart_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CartService.java"
click node_storage_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/SupabaseStorageService.java"
click node_dto "https://github.com/obvxindustry/obvx-backend/tree/main/src/main/java/obvx/com/backend/dto"
click node_entities "https://github.com/obvxindustry/obvx-backend/tree/main/src/main/java/obvx/com/backend/entity"
click node_user_repo "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/UserRepository.java"
click node_product_repo "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/ProductRepository.java"
click node_category_repo "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/CategoryRepository.java"
click node_cart_repos "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/CartRepository.java"
click node_jwt_filter "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/config/JwtAuthenticationFilter.java"
click node_jwt_service "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/JwtService.java"
click node_security_config "https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/config/SecurityConfig.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_auth_ctrl,node_admin_ctrl,node_user_ctrl,node_category_ctrl,node_products_ctrl,node_cart_ctrl,node_dto,node_client toneBlue
class node_auth_service,node_admin_service,node_user_service,node_category_service,node_products_service,node_cart_service,node_storage_service toneAmber
class node_entities,node_user_repo,node_product_repo,node_category_repo,node_cart_repos toneMint
class node_jwt_filter,node_jwt_service,node_security_config toneRose
class node_postgres,node_supabase_storage toneIndigo
```

## Components

### REST API

- [Auth API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/AuthController.java): `src/main/java/obvx/com/backend/controller/AuthController.java`
- [Admin API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/AdminController.java): `src/main/java/obvx/com/backend/controller/AdminController.java`
- [User API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/UserController.java): `src/main/java/obvx/com/backend/controller/UserController.java`
- [Category API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/CategoryController.java): `src/main/java/obvx/com/backend/controller/CategoryController.java`
- [Products API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/ProductsController.java): `src/main/java/obvx/com/backend/controller/ProductsController.java`
- [Cart API](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/controller/CartController.java): `src/main/java/obvx/com/backend/controller/CartController.java`
- [API DTOs](https://github.com/obvxindustry/obvx-backend/tree/main/src/main/java/obvx/com/backend/dto): `src/main/java/obvx/com/backend/dto`

### Commerce Services

- [Authentication](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/AuthService.java): `src/main/java/obvx/com/backend/service/AuthService.java`
- [Admin Management](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/AdminService.java): `src/main/java/obvx/com/backend/service/AdminService.java`
- [User Profiles](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/UserService.java): `src/main/java/obvx/com/backend/service/UserService.java`
- [Category Management](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CategoryService.java): `src/main/java/obvx/com/backend/service/CategoryService.java`
- [Product Management](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/ProductsService.java): `src/main/java/obvx/com/backend/service/ProductsService.java`
- [Cart Management](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/CartService.java): `src/main/java/obvx/com/backend/service/CartService.java`
- [Image Storage](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/SupabaseStorageService.java): `src/main/java/obvx/com/backend/service/SupabaseStorageService.java`

### Persistence Model

- [Domain Entities](https://github.com/obvxindustry/obvx-backend/tree/main/src/main/java/obvx/com/backend/entity): `src/main/java/obvx/com/backend/entity`
- [User Repository](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/UserRepository.java): `src/main/java/obvx/com/backend/repository/UserRepository.java`
- [Product Repository](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/ProductRepository.java): `src/main/java/obvx/com/backend/repository/ProductRepository.java`
- [Category Repository](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/CategoryRepository.java): `src/main/java/obvx/com/backend/repository/CategoryRepository.java`
- [Cart Repositories](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/repository/CartRepository.java): `src/main/java/obvx/com/backend/repository/CartRepository.java`

### Identity Security

- [JWT Filter](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/config/JwtAuthenticationFilter.java): `src/main/java/obvx/com/backend/config/JwtAuthenticationFilter.java`
- [JWT Service](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/service/JwtService.java): `src/main/java/obvx/com/backend/service/JwtService.java`
- [Security Rules](https://github.com/obvxindustry/obvx-backend/blob/main/src/main/java/obvx/com/backend/config/SecurityConfig.java): `src/main/java/obvx/com/backend/config/SecurityConfig.java`

### External Integrations

- **Supabase PostgreSQL**
- **Supabase Storage**

### Other components

- **API Client**

## Connections

- API Client → Auth API: registers / logs in
- API Client → Admin API: admin requests
- API Client → User API: profile requests
- API Client → Category API: catalog requests
- API Client → Products API: product requests
- API Client → Cart API: cart requests
- Auth API → Authentication: delegates (evidence: `src/main/java/obvx/com/backend/controller/AuthController.java`)
- Admin API → Admin Management: delegates (evidence: `src/main/java/obvx/com/backend/controller/AdminController.java`)
- User API → User Profiles: delegates (evidence: `src/main/java/obvx/com/backend/controller/UserController.java`)
- Category API → Category Management: delegates (evidence: `src/main/java/obvx/com/backend/controller/CategoryController.java`)
- Products API → Product Management: delegates (evidence: `src/main/java/obvx/com/backend/controller/ProductsController.java`)
- Cart API → Cart Management: delegates (evidence: `src/main/java/obvx/com/backend/controller/CartController.java`)
- Authentication → User Repository: reads / saves (evidence: `src/main/java/obvx/com/backend/service/AuthService.java`)
- Authentication → JWT Service: generates token (evidence: `src/main/java/obvx/com/backend/service/AuthService.java`)
- Admin Management → User Repository: reads / saves (evidence: `src/main/java/obvx/com/backend/service/AdminService.java`)
- User Profiles → User Repository: reads / saves (evidence: `src/main/java/obvx/com/backend/service/UserService.java`)
- Category Management → Category Repository: reads / saves (evidence: `src/main/java/obvx/com/backend/service/CategoryService.java`)
- Category Management → Product Repository: counts products (evidence: `src/main/java/obvx/com/backend/service/CategoryService.java`)
- Product Management → Category Repository: loads category (evidence: `src/main/java/obvx/com/backend/service/ProductsService.java`)
- Product Management → Product Repository: reads / saves (evidence: `src/main/java/obvx/com/backend/service/ProductsService.java`)
- Product Management → Image Storage: uploads / deletes (evidence: `src/main/java/obvx/com/backend/service/ProductsService.java`)
- Cart Management → Cart Repositories: reads / saves (evidence: `src/main/java/obvx/com/backend/service/CartService.java`)
- Cart Management → Product Repository: loads product (evidence: `src/main/java/obvx/com/backend/service/CartService.java`)
- JWT Filter → JWT Service: validates token (evidence: `src/main/java/obvx/com/backend/config/JwtAuthenticationFilter.java`)
- JWT Filter → User Repository: loads user (evidence: `src/main/java/obvx/com/backend/config/JwtAuthenticationFilter.java`)
- Security Rules → JWT Filter: installs filter
- Authentication → Supabase PostgreSQL: persists accounts
- Admin Management → Supabase PostgreSQL: persists roles
- Category Management → Supabase PostgreSQL: persists categories
- Product Management → Supabase PostgreSQL: persists products
- Cart Management → Supabase PostgreSQL: persists carts
- Image Storage → Supabase Storage: uploads / deletes (evidence: `src/main/java/obvx/com/backend/service/SupabaseStorageService.java`)
