# aniket0713/marketgrowapp architecture

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

## Overview

MarketGrow is a Spring Boot REST API for US and Indian stock quotes. A client requests a market-specific quote or the dashboard; the controller delegates to the matching market service, which fetches and maps provider data into quote models. Dashboard requests gather both watchlists and skip failed symbols. Global exception advice translates service errors into HTTP responses. The strategy interface separates market providers. Provider and controller calls are shown from excerpts; other Spring wiring is not inferred.

Main entry points: [`market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java) (Stock Controller), [`market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java) (US Service), [`market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java) (Indian Service), [`market-grow/src/main/java/com/aniket/marketgrow/model/StockQuote.java`](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/model/StockQuote.java) (Stock Quote)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_controller["Stock Controller"]
end

subgraph group_services["Market Services"]
  node_usservice["US Service"]
  node_inservice["Indian Service"]
  node_strategy["Service Interface<br/>[StockService.java]"]
  node_alpha["Alpha Vantage"]
  node_yahoo["Yahoo Finance"]
end

subgraph group_models["Response Models"]
  node_quote["Stock Quote<br/>[StockQuote.java]"]
  node_dashboard["Dashboard Response"]
end

subgraph group_errors["Error Handling"]
  node_handler["Exception Advice"]
  node_notfound["Not Found Error"]
  node_ratelimit["Rate Limit Error"]
end

subgraph group_runtime["Runtime Support"]
  node_application["Spring Boot Entry"]
  node_restconfig["HTTP Client Config"]
end

node_client(("API Client"))

node_client -->|"requests quotes"| node_controller
node_controller -->|"gets US quotes"| node_usservice
node_controller -->|"gets Indian quotes"| node_inservice
node_controller -->|"returns dashboard"| node_dashboard
node_controller -->|"returns quotes"| node_quote
node_usservice -->|"fetches quote"| node_alpha
node_inservice -->|"fetches quote"| node_yahoo
node_usservice -->|"maps provider data"| node_quote
node_inservice -->|"maps provider data"| node_quote
node_dashboard -->|"contains quotes"| node_quote
node_usservice -->|"throws"| node_notfound
node_usservice -->|"throws"| node_ratelimit
node_inservice -->|"throws"| node_notfound
node_handler -->|"handles"| node_notfound
node_handler -->|"handles"| node_ratelimit
node_controller -->|"injects interface"| node_strategy
node_usservice -->|"implements"| node_strategy
node_inservice -->|"implements"| node_strategy

click node_controller "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java"
click node_usservice "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java"
click node_inservice "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java"
click node_strategy "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/StockService.java"
click node_quote "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/model/StockQuote.java"
click node_dashboard "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/model/DashboardResponse.java"
click node_handler "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/GlobalExceptionHandler.java"
click node_notfound "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/StockNotFoundException.java"
click node_ratelimit "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/RateLimitException.java"
click node_application "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/MarketGrowApplication.java"
click node_restconfig "https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/config/RestTemplateConfig.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_client toneBlue
class node_usservice,node_inservice,node_strategy,node_alpha,node_yahoo toneAmber
class node_quote,node_dashboard toneMint
class node_handler,node_notfound,node_ratelimit toneRose
class node_application,node_restconfig toneIndigo
```

## Components

### REST API

- [Stock Controller](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java): `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`

### Market Services

- [US Service](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java): `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`
- [Indian Service](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java): `market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`
- [Service Interface](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/service/StockService.java): `market-grow/src/main/java/com/aniket/marketgrow/service/StockService.java`
- **Alpha Vantage**
- **Yahoo Finance**

### Response Models

- [Stock Quote](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/model/StockQuote.java): `market-grow/src/main/java/com/aniket/marketgrow/model/StockQuote.java`
- [Dashboard Response](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/model/DashboardResponse.java): `market-grow/src/main/java/com/aniket/marketgrow/model/DashboardResponse.java`

### Error Handling

- [Exception Advice](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/GlobalExceptionHandler.java): `market-grow/src/main/java/com/aniket/marketgrow/exception/GlobalExceptionHandler.java`
- [Not Found Error](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/StockNotFoundException.java): `market-grow/src/main/java/com/aniket/marketgrow/exception/StockNotFoundException.java`
- [Rate Limit Error](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/exception/RateLimitException.java): `market-grow/src/main/java/com/aniket/marketgrow/exception/RateLimitException.java`

### Runtime Support

- [Spring Boot Entry](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/MarketGrowApplication.java): `market-grow/src/main/java/com/aniket/marketgrow/MarketGrowApplication.java`
- [HTTP Client Config](https://github.com/aniket0713/marketgrowapp/blob/main/market-grow/src/main/java/com/aniket/marketgrow/config/RestTemplateConfig.java): `market-grow/src/main/java/com/aniket/marketgrow/config/RestTemplateConfig.java`

### Other components

- **API Client**

## Connections

- API Client → Stock Controller: requests quotes (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- Stock Controller → US Service: gets US quotes (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- Stock Controller → Indian Service: gets Indian quotes (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- Stock Controller → Dashboard Response: returns dashboard (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- Stock Controller → Stock Quote: returns quotes (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- US Service → Alpha Vantage: fetches quote (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`)
- Indian Service → Yahoo Finance: fetches quote (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`)
- US Service → Stock Quote: maps provider data (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`)
- Indian Service → Stock Quote: maps provider data (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`)
- Dashboard Response → Stock Quote: contains quotes (evidence: `market-grow/src/main/java/com/aniket/marketgrow/model/DashboardResponse.java`)
- US Service → Not Found Error: throws (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`)
- US Service → Rate Limit Error: throws (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`)
- Indian Service → Not Found Error: throws (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`)
- Exception Advice → Not Found Error: handles (evidence: `market-grow/src/main/java/com/aniket/marketgrow/exception/GlobalExceptionHandler.java`)
- Exception Advice → Rate Limit Error: handles (evidence: `market-grow/src/main/java/com/aniket/marketgrow/exception/GlobalExceptionHandler.java`)
- Stock Controller → Service Interface: injects interface (evidence: `market-grow/src/main/java/com/aniket/marketgrow/controller/StockController.java`)
- US Service → Service Interface: implements (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/UsStockServiceImpl.java`)
- Indian Service → Service Interface: implements (evidence: `market-grow/src/main/java/com/aniket/marketgrow/service/IndianStockServiceImpl.java`)
