# bharathwajan/genericecom architecture

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

- Interactive diagram: https://gitdiagram.com/bharathwajan/genericecom
- Repository: https://github.com/bharathwajan/genericecom

## Overview

This repository is an e-commerce backend with a small React Native onboarding screen. The principal workflows are product browsing and management, account registration/login, and merchant product-image URL generation. Product access uses a service and repository; authentication issues JWTs; image endpoints generate S3 presigned URLs. The backend also has a scheduled product recommendation task and a gRPC notification client. The README is empty and sampled source is incomplete, so links for unsampled controller, repository, and configuration behavior are limited to what names, calls, and deployment manifests support.

Main entry points: [`ecom/src/main/java/com/generic/ecom/repo/UserRepo.java`](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/UserRepo.java) (User repository), [`ecom/src/main/java/com/generic/ecom/view/security/SiginAndLoginService.java`](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/SiginAndLoginService.java) (Login service), [`ecom/src/main/java/com/generic/ecom/repo/ProductsRepo.java`](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/ProductsRepo.java) (Product repository), [`ecom/src/main/java/com/generic/ecom/controller/HomepageController.java`](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/HomepageController.java) (Product endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API endpoints"]
  node_app["Spring Boot app"]
  node_homepage["Product endpoints"]
  node_merchant["Image endpoints"]
  node_login["Login endpoints"]
end

subgraph group_domain["Product and users"]
  node_product_service["Product service"]
  node_product_repo["Product repository<br/>[ProductsRepo.java]"]
  node_product_model["Product model<br/>[Products.java]"]
  node_user_repo["User repository<br/>[UserRepo.java]"]
  node_user_model["User model<br/>[Users.java]"]
  node_scheduler["Product notifier"]
end

subgraph group_security["Authentication"]
  node_login_service["Login service"]
  node_user_details["User details loader"]
  node_jwt["JWT service<br/>[JWTService.java]"]
  node_jwt_filter["JWT filter<br/>[JWTFilter.java]"]
end

subgraph group_integrations["External services"]
  node_aws_service["S3 URL service<br/>[AWSService.java]"]
  node_aws[("Amazon S3")]
  node_notify_client["Notification client"]
  node_notification_service["Notification service"]
  node_postgres[("PostgreSQL")]
end

node_customer(("Customer or merchant"))
node_mobile["Onboarding screen<br/>[onboard.tsx]"]

node_customer -->|"requests products"| node_homepage
node_customer -->|"requests image URLs"| node_merchant
node_customer -->|"registers or logs in"| node_login
node_homepage -->|"calls"| node_product_service
node_product_service -->|"reads and writes"| node_product_repo
node_product_repo -.->|"persists products"| node_postgres
node_merchant -->|"requests presigned URLs"| node_aws_service
node_aws_service -->|"presigns S3 access"| node_aws
node_login -->|"calls"| node_login_service
node_login_service -->|"saves users"| node_user_repo
node_login_service -->|"generates token"| node_jwt
node_login_service -.->|"authenticates via Spring"| node_user_details
node_user_details -->|"loads user"| node_user_repo
node_user_repo -.->|"persists users"| node_postgres
node_jwt_filter -->|"validates tokens"| node_jwt
node_scheduler -->|"loads user"| node_user_repo
node_scheduler -->|"loads product"| node_product_repo
node_homepage -->|"sends notification"| node_notify_client
node_notify_client -->|"gRPC request"| node_notification_service
node_product_model -.->|"represented by"| node_product_repo
node_user_model -.->|"represented by"| node_user_repo

click node_app "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/EcomApplication.java"
click node_homepage "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/HomepageController.java"
click node_merchant "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/MerchantController.java"
click node_login "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/LoginAndSignIn.java"
click node_product_service "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/ProductService.java"
click node_product_repo "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/ProductsRepo.java"
click node_product_model "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/model/Products.java"
click node_user_repo "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/UserRepo.java"
click node_user_model "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/model/Users.java"
click node_scheduler "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Schedulers/NewProductNotifierViaEmail.java"
click node_login_service "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/SiginAndLoginService.java"
click node_user_details "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/ecomUserDetailsService.java"
click node_jwt "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/JWTService.java"
click node_jwt_filter "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/customFilters/JWTFilter.java"
click node_aws_service "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/AWSService.java"
click node_notify_client "https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/NotificationServiceGRPCClient.java"
click node_mobile "https://github.com/bharathwajan/genericecom/blob/master/ecomFrontEnd/ecomFrontEnd/app/onboard.tsx"

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_app,node_homepage,node_merchant,node_login,node_mobile toneBlue
class node_product_service,node_product_repo,node_product_model,node_user_repo,node_user_model,node_scheduler toneAmber
class node_login_service,node_user_details,node_jwt,node_jwt_filter toneMint
class node_aws_service,node_aws,node_notify_client,node_notification_service,node_postgres toneRose
class node_customer toneIndigo
```

## Components

### API endpoints

- [Spring Boot app](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/EcomApplication.java): `ecom/src/main/java/com/generic/ecom/EcomApplication.java`
- [Product endpoints](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/HomepageController.java): `ecom/src/main/java/com/generic/ecom/controller/HomepageController.java`
- [Image endpoints](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/MerchantController.java): `ecom/src/main/java/com/generic/ecom/controller/MerchantController.java`
- [Login endpoints](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/controller/LoginAndSignIn.java): `ecom/src/main/java/com/generic/ecom/controller/LoginAndSignIn.java`

### Product and users

- [Product service](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/ProductService.java): `ecom/src/main/java/com/generic/ecom/view/Services/ProductService.java`
- [Product repository](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/ProductsRepo.java): `ecom/src/main/java/com/generic/ecom/repo/ProductsRepo.java`
- [Product model](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/model/Products.java): `ecom/src/main/java/com/generic/ecom/model/Products.java`
- [User repository](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/repo/UserRepo.java): `ecom/src/main/java/com/generic/ecom/repo/UserRepo.java`
- [User model](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/model/Users.java): `ecom/src/main/java/com/generic/ecom/model/Users.java`
- [Product notifier](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Schedulers/NewProductNotifierViaEmail.java): `ecom/src/main/java/com/generic/ecom/view/Schedulers/NewProductNotifierViaEmail.java`

### Authentication

- [Login service](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/SiginAndLoginService.java): `ecom/src/main/java/com/generic/ecom/view/security/SiginAndLoginService.java`
- [User details loader](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/ecomUserDetailsService.java): `ecom/src/main/java/com/generic/ecom/view/security/ecomUserDetailsService.java`
- [JWT service](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/JWTService.java): `ecom/src/main/java/com/generic/ecom/view/security/JWTService.java`
- [JWT filter](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/security/customFilters/JWTFilter.java): `ecom/src/main/java/com/generic/ecom/view/security/customFilters/JWTFilter.java`

### External services

- [S3 URL service](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/AWSService.java): `ecom/src/main/java/com/generic/ecom/view/Services/AWSService.java`
- **Amazon S3**
- [Notification client](https://github.com/bharathwajan/genericecom/blob/master/ecom/src/main/java/com/generic/ecom/view/Services/NotificationServiceGRPCClient.java): `ecom/src/main/java/com/generic/ecom/view/Services/NotificationServiceGRPCClient.java`
- **Notification service**
- **PostgreSQL**

### Other components

- **Customer or merchant**
- [Onboarding screen](https://github.com/bharathwajan/genericecom/blob/master/ecomFrontEnd/ecomFrontEnd/app/onboard.tsx): `ecomFrontEnd/ecomFrontEnd/app/onboard.tsx`

## Connections

- Customer or merchant → Product endpoints: requests products
- Customer or merchant → Image endpoints: requests image URLs
- Customer or merchant → Login endpoints: registers or logs in
- Product endpoints → Product service: calls
- Product service → Product repository: reads and writes
- Product repository → PostgreSQL: persists products
- Image endpoints → S3 URL service: requests presigned URLs
- S3 URL service → Amazon S3: presigns S3 access
- Login endpoints → Login service: calls
- Login service → User repository: saves users
- Login service → JWT service: generates token
- Login service → User details loader: authenticates via Spring
- User details loader → User repository: loads user
- User repository → PostgreSQL: persists users
- JWT filter → JWT service: validates tokens
- Product notifier → User repository: loads user
- Product notifier → Product repository: loads product
- Product endpoints → Notification client: sends notification
- Notification client → Notification service: gRPC request
- Product model → Product repository: represented by
- User model → User repository: represented by
