# bhaskarsunchu/productservice architecture

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

- Interactive diagram: https://gitdiagram.com/bhaskarsunchu/productservice
- Repository: https://github.com/bhaskarsunchu/productservice

## Overview

This is a Spring-based product catalog API. A client sends product, category, or pagination requests to the controller, which delegates catalog operations to the primary self-managed service and returns product data or response DTOs. That service reads and writes product and category repositories backed by JPA entities. A separate FakeStore adapter provides an external API implementation, while controller advice maps known exceptions to error responses. The README is empty; edges are limited to relationships shown in excerpts or the source index.

Main entry points: [`src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java`](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java) (Product repository), [`src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java`](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java) (Self product service), [`src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java`](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java) (FakeStore adapter), [`src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java`](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java) (Product controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API layer"]
  node_controller["Product controller"]
  node_dto["Request and response DTOs"]
  node_advice["Exception advice"]
  node_exceptions["Catalog exceptions"]
end

subgraph group_services["Catalog services"]
  node_service_contract["Product service contract"]
  node_self_service["Self product service"]
  node_fake_service["FakeStore adapter"]
end

subgraph group_persistence["Domain and persistence"]
  node_products_repo["Product repository"]
  node_categories_repo["Category repository"]
  node_product["Product entity<br/>[Product.java]"]
  node_category["Category entity<br/>[Category.java]"]
  node_base_model["Base model<br/>[BaseModel.java]"]
  node_projection["Product title projection"]
end

subgraph group_support["Integration and errors"]
end

node_client(("API client"))
node_database[("JPA database")]
node_fake_api(("FakeStore API"))

node_client -->|"sends requests"| node_controller
node_controller -->|"delegates catalog operations"| node_service_contract
node_controller -->|"accepts and builds"| node_dto
node_self_service -->|"implements"| node_service_contract
node_fake_service -->|"implements"| node_service_contract
node_self_service -->|"queries and saves"| node_products_repo
node_self_service -->|"queries and saves"| node_categories_repo
node_products_repo -->|"persists and queries"| node_product
node_categories_repo -->|"persists and queries"| node_category
node_products_repo -.->|"accesses"| node_database
node_categories_repo -.->|"accesses"| node_database
node_product -->|"references category"| node_category
node_product -->|"extends"| node_base_model
node_category -->|"extends"| node_base_model
node_products_repo -->|"returns projection"| node_projection
node_fake_service -->|"sends HTTP requests"| node_fake_api
node_fake_service -->|"uses request and API DTOs"| node_dto
node_advice -->|"handles exceptions"| node_exceptions
node_advice -->|"builds error response"| node_dto

click node_controller "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java"
click node_dto "https://github.com/bhaskarsunchu/productservice/tree/main/src/main/java/com/scaler/ecommerceprojectjune24/dto"
click node_advice "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/advice/ControllerAdvice.java"
click node_exceptions "https://github.com/bhaskarsunchu/productservice/tree/main/src/main/java/com/scaler/ecommerceprojectjune24/exception"
click node_service_contract "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/ProductService.java"
click node_self_service "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java"
click node_fake_service "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java"
click node_products_repo "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java"
click node_categories_repo "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/CategoryRepository.java"
click node_product "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/Product.java"
click node_category "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/Category.java"
click node_base_model "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/BaseModel.java"
click node_projection "https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/projection/ProductWithTitleAndId.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_controller,node_dto,node_advice,node_exceptions,node_client toneBlue
class node_service_contract,node_self_service,node_fake_service,node_database toneAmber
class node_products_repo,node_categories_repo,node_product,node_category,node_base_model,node_projection,node_fake_api toneMint
```

## Components

### API layer

- [Product controller](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java): `src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java`
- [Request and response DTOs](https://github.com/bhaskarsunchu/productservice/tree/main/src/main/java/com/scaler/ecommerceprojectjune24/dto): `src/main/java/com/scaler/ecommerceprojectjune24/dto`
- [Exception advice](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/advice/ControllerAdvice.java): `src/main/java/com/scaler/ecommerceprojectjune24/advice/ControllerAdvice.java`
- [Catalog exceptions](https://github.com/bhaskarsunchu/productservice/tree/main/src/main/java/com/scaler/ecommerceprojectjune24/exception): `src/main/java/com/scaler/ecommerceprojectjune24/exception`

### Catalog services

- [Product service contract](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/ProductService.java): `src/main/java/com/scaler/ecommerceprojectjune24/service/ProductService.java`
- [Self product service](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java): `src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java`
- [FakeStore adapter](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java): `src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java`

### Domain and persistence

- [Product repository](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java): `src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java`
- [Category repository](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/CategoryRepository.java): `src/main/java/com/scaler/ecommerceprojectjune24/repository/CategoryRepository.java`
- [Product entity](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/Product.java): `src/main/java/com/scaler/ecommerceprojectjune24/model/Product.java`
- [Category entity](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/Category.java): `src/main/java/com/scaler/ecommerceprojectjune24/model/Category.java`
- [Base model](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/model/BaseModel.java): `src/main/java/com/scaler/ecommerceprojectjune24/model/BaseModel.java`
- [Product title projection](https://github.com/bhaskarsunchu/productservice/blob/main/src/main/java/com/scaler/ecommerceprojectjune24/repository/projection/ProductWithTitleAndId.java): `src/main/java/com/scaler/ecommerceprojectjune24/repository/projection/ProductWithTitleAndId.java`

### Other components

- **API client**
- **JPA database**
- **FakeStore API**

## Connections

- API client → Product controller: sends requests (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java`)
- Product controller → Product service contract: delegates catalog operations (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java`)
- Product controller → Request and response DTOs: accepts and builds (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/controller/ProductController.java`)
- Self product service → Product service contract: implements (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java`)
- FakeStore adapter → Product service contract: implements (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java`)
- Self product service → Product repository: queries and saves (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java`)
- Self product service → Category repository: queries and saves (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/SelfProductService.java`)
- Product repository → Product entity: persists and queries (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java`)
- Category repository → Category entity: persists and queries (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/repository/CategoryRepository.java`)
- Product repository → JPA database: accesses
- Category repository → JPA database: accesses
- Product entity → Category entity: references category (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/model/Product.java`)
- Product entity → Base model: extends (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/model/Product.java`)
- Category entity → Base model: extends (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/model/Category.java`)
- Product repository → Product title projection: returns projection (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/repository/ProductRepository.java`)
- FakeStore adapter → FakeStore API: sends HTTP requests (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java`)
- FakeStore adapter → Request and response DTOs: uses request and API DTOs (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/service/FakeStoreService.java`)
- Exception advice → Catalog exceptions: handles exceptions (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/advice/ControllerAdvice.java`)
- Exception advice → Request and response DTOs: builds error response (evidence: `src/main/java/com/scaler/ecommerceprojectjune24/advice/ControllerAdvice.java`)
