# majnun917/buy-01 architecture

> Architecture diagram of the GitHub repository majnun917/buy-01, 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/majnun917/buy-01
- Repository: https://github.com/majnun917/buy-01

## Overview

Buy-01 is an Angular storefront backed by independently deployable Spring Boot services. The main journey is browsing product listings and details, with seller workflows for authentication, product management, and image upload. User authentication and profile management, product catalog operations, and media storage are distinct backend stages; the product service verifies media ownership through its media client. The README describes JWT, role-based access, uploads, and independent deployment. Some frontend API wiring and gateway routing were not shown, so those links are marked unverified.

Main entry points: [`backend/gateway/src/main/java/buy_01/gateway`](https://github.com/majnun917/buy-01/tree/main/backend/gateway/src/main/java/buy_01/gateway) (API Gateway), [`frontend/src/app/app.routes.ts`](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/app.routes.ts) (App Routes), [`frontend/src/app/core/auth/auth.service.ts`](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/auth/auth.service.ts) (Auth Client), [`frontend/src/app/seller-dashboard`](https://github.com/majnun917/buy-01/tree/main/frontend/src/app/seller-dashboard) (Seller Dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Storefront"]
  node_routes["App Routes<br/>[app.routes.ts]"]
  node_authui["Login / Register"]
  node_storefront["Product Browsing"]
  node_sellerui["Seller Dashboard"]
  node_profileui["Profile"]
  node_authclient["Auth Client<br/>[auth.service.ts]"]
  node_tokenstore["Token Storage"]
  node_mediaui["Media Client<br/>[media.service.ts]"]
end

subgraph group_identity["Identity"]
  node_authcontroller["Auth API"]
  node_usercontroller["Profile API"]
  node_authservice["Account Logic<br/>[AuthService.java]"]
  node_userstore[("User Store")]
end

subgraph group_catalog["Product Catalog"]
  node_productcontroller["Product API"]
  node_productservice["Catalog Logic"]
  node_productstore[("Product Store")]
  node_mediaclient["Media Client<br/>[MediaClient.java]"]
end

subgraph group_media["Media Handling"]
  node_mediacontroller["Media API"]
  node_mediaservice["Media Logic<br/>[MediaService.java]"]
  node_mediastore[("Media Metadata")]
  node_filestore[("Image Files<br/>[MediaService.java]")]
end

subgraph group_platform["Service Platform"]
  node_gateway["API Gateway"]
  node_discovery["Service Discovery"]
end

node_shopper(("Shopper / Seller"))

node_shopper -->|"navigates"| node_routes
node_routes -->|"routes to"| node_authui
node_routes -->|"routes to"| node_storefront
node_routes -->|"guards route"| node_profileui
node_routes -->|"guards route"| node_sellerui
node_authui -.->|"uses"| node_authclient
node_profileui -.->|"uses"| node_authclient
node_sellerui -.->|"uploads images"| node_mediaui
node_authclient -->|"stores token"| node_tokenstore
node_authclient -.->|"calls API"| node_gateway
node_storefront -.->|"requests catalog"| node_gateway
node_sellerui -.->|"manages products"| node_gateway
node_mediaui -.->|"calls API"| node_gateway
node_gateway -.->|"routes requests"| node_authcontroller
node_gateway -.->|"routes requests"| node_productcontroller
node_gateway -.->|"routes requests"| node_mediacontroller
node_authcontroller -->|"delegates"| node_authservice
node_usercontroller -->|"delegates"| node_authservice
node_authservice -->|"reads and writes"| node_userstore
node_productcontroller -->|"delegates"| node_productservice
node_productservice -->|"reads and writes"| node_productstore
node_productservice -->|"checks media"| node_mediaclient
node_mediaclient -.->|"checks ownership"| node_mediacontroller
node_mediacontroller -->|"delegates"| node_mediaservice
node_mediaservice -->|"reads and writes"| node_mediastore
node_mediaservice -->|"stores files"| node_filestore
node_discovery -.->|"service discovery"| node_gateway

click node_routes "https://github.com/majnun917/buy-01/blob/main/frontend/src/app/app.routes.ts"
click node_authui "https://github.com/majnun917/buy-01/tree/main/frontend/src/app/features/auth"
click node_storefront "https://github.com/majnun917/buy-01/tree/main/frontend/src/app/home"
click node_sellerui "https://github.com/majnun917/buy-01/tree/main/frontend/src/app/seller-dashboard"
click node_profileui "https://github.com/majnun917/buy-01/blob/main/frontend/src/app/profile/profile.component.ts"
click node_authclient "https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/auth/auth.service.ts"
click node_tokenstore "https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/auth/auth-storage.service.ts"
click node_mediaui "https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/media.service.ts"
click node_gateway "https://github.com/majnun917/buy-01/tree/main/backend/gateway/src/main/java/buy_01/gateway"
click node_discovery "https://github.com/majnun917/buy-01/blob/main/backend/discovery-server/src/main/java/buy_01/discovery_server/DiscoveryServerApplication.java"
click node_authcontroller "https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/controller/AuthController.java"
click node_usercontroller "https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/controller/UserController.java"
click node_authservice "https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/service/AuthService.java"
click node_userstore "https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/repository/UserRepository.java"
click node_productcontroller "https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/controller/ProductController.java"
click node_productservice "https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/service/ProductService.java"
click node_productstore "https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/repository/ProductRepository.java"
click node_mediaclient "https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/client/MediaClient.java"
click node_mediacontroller "https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/controller/MediaController.java"
click node_mediaservice "https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java"
click node_mediastore "https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/repository/MediaRepository.java"
click node_filestore "https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/service/MediaService.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_routes,node_authui,node_storefront,node_sellerui,node_profileui,node_authclient,node_tokenstore,node_mediaui toneBlue
class node_authcontroller,node_usercontroller,node_authservice,node_userstore toneAmber
class node_productcontroller,node_productservice,node_productstore,node_mediaclient toneMint
class node_mediacontroller,node_mediaservice,node_mediastore,node_filestore toneRose
class node_gateway,node_discovery,node_shopper toneIndigo
```

## Components

### Storefront

- [App Routes](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/app.routes.ts): `frontend/src/app/app.routes.ts`
- [Login / Register](https://github.com/majnun917/buy-01/tree/main/frontend/src/app/features/auth): `frontend/src/app/features/auth`
- [Product Browsing](https://github.com/majnun917/buy-01/tree/main/frontend/src/app/home): `frontend/src/app/home`
- [Seller Dashboard](https://github.com/majnun917/buy-01/tree/main/frontend/src/app/seller-dashboard): `frontend/src/app/seller-dashboard`
- [Profile](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/profile/profile.component.ts): `frontend/src/app/profile/profile.component.ts`
- [Auth Client](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/auth/auth.service.ts): `frontend/src/app/core/auth/auth.service.ts`
- [Token Storage](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/auth/auth-storage.service.ts): `frontend/src/app/core/auth/auth-storage.service.ts`
- [Media Client](https://github.com/majnun917/buy-01/blob/main/frontend/src/app/core/media.service.ts): `frontend/src/app/core/media.service.ts`

### Identity

- [Auth API](https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/controller/AuthController.java): `backend/user-service/src/main/java/buy_01/user_service/controller/AuthController.java`
- [Profile API](https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/controller/UserController.java): `backend/user-service/src/main/java/buy_01/user_service/controller/UserController.java`
- [Account Logic](https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/service/AuthService.java): `backend/user-service/src/main/java/buy_01/user_service/service/AuthService.java`
- [User Store](https://github.com/majnun917/buy-01/blob/main/backend/user-service/src/main/java/buy_01/user_service/repository/UserRepository.java): `backend/user-service/src/main/java/buy_01/user_service/repository/UserRepository.java`

### Product Catalog

- [Product API](https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/controller/ProductController.java): `backend/product-service/src/main/java/buy_01/product_service/controller/ProductController.java`
- [Catalog Logic](https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/service/ProductService.java): `backend/product-service/src/main/java/buy_01/product_service/service/ProductService.java`
- [Product Store](https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/repository/ProductRepository.java): `backend/product-service/src/main/java/buy_01/product_service/repository/ProductRepository.java`
- [Media Client](https://github.com/majnun917/buy-01/blob/main/backend/product-service/src/main/java/buy_01/product_service/client/MediaClient.java): `backend/product-service/src/main/java/buy_01/product_service/client/MediaClient.java`

### Media Handling

- [Media API](https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/controller/MediaController.java): `backend/media-service/src/main/java/buy_01/media_service/controller/MediaController.java`
- [Media Logic](https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java): `backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java`
- [Media Metadata](https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/repository/MediaRepository.java): `backend/media-service/src/main/java/buy_01/media_service/repository/MediaRepository.java`
- [Image Files](https://github.com/majnun917/buy-01/blob/main/backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java): `backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java`

### Service Platform

- [API Gateway](https://github.com/majnun917/buy-01/tree/main/backend/gateway/src/main/java/buy_01/gateway): `backend/gateway/src/main/java/buy_01/gateway`
- [Service Discovery](https://github.com/majnun917/buy-01/blob/main/backend/discovery-server/src/main/java/buy_01/discovery_server/DiscoveryServerApplication.java): `backend/discovery-server/src/main/java/buy_01/discovery_server/DiscoveryServerApplication.java`

### Other components

- **Shopper / Seller**

## Connections

- Shopper / Seller → App Routes: navigates (evidence: `frontend/src/app/app.routes.ts`)
- App Routes → Login / Register: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App Routes → Product Browsing: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App Routes → Profile: guards route (evidence: `frontend/src/app/app.routes.ts`)
- App Routes → Seller Dashboard: guards route (evidence: `frontend/src/app/app.routes.ts`)
- Login / Register → Auth Client: uses
- Profile → Auth Client: uses
- Seller Dashboard → Media Client: uploads images
- Auth Client → Token Storage: stores token (evidence: `frontend/src/app/core/auth/auth.service.ts`)
- Auth Client → API Gateway: calls API
- Product Browsing → API Gateway: requests catalog
- Seller Dashboard → API Gateway: manages products
- Media Client → API Gateway: calls API
- API Gateway → Auth API: routes requests
- API Gateway → Product API: routes requests
- API Gateway → Media API: routes requests
- Auth API → Account Logic: delegates (evidence: `backend/user-service/src/main/java/buy_01/user_service/controller/AuthController.java`)
- Profile API → Account Logic: delegates (evidence: `backend/user-service/src/main/java/buy_01/user_service/controller/UserController.java`)
- Account Logic → User Store: reads and writes (evidence: `backend/user-service/src/main/java/buy_01/user_service/service/AuthService.java`)
- Product API → Catalog Logic: delegates (evidence: `backend/product-service/src/main/java/buy_01/product_service/controller/ProductController.java`)
- Catalog Logic → Product Store: reads and writes (evidence: `backend/product-service/src/main/java/buy_01/product_service/service/ProductService.java`)
- Catalog Logic → Media Client: checks media (evidence: `backend/product-service/src/main/java/buy_01/product_service/service/ProductService.java`)
- Media Client → Media API: checks ownership
- Media API → Media Logic: delegates (evidence: `backend/media-service/src/main/java/buy_01/media_service/controller/MediaController.java`)
- Media Logic → Media Metadata: reads and writes (evidence: `backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java`)
- Media Logic → Image Files: stores files (evidence: `backend/media-service/src/main/java/buy_01/media_service/service/MediaService.java`)
- Service Discovery → API Gateway: service discovery
