# euiseok00/game-market architecture

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

## Overview

Game Market is a virtual game storefront: users browse and filter games, sign in, add games to a cart, make a simulated purchase, and view their library. On game details, they can inspect source reviews and request a cached Gemini summary with browser TTS playback. The React client calls the Spring Boot API; the backend owns sessions, catalog, cart, order, review, and summary logic. The README documents PostgreSQL and Gemini integrations. Some subsystem links rely on README statements or SOURCE INDEX references; unsampled implementations are not inferred beyond those relationships.

Main entry points: [`frontend/src/api.ts`](https://github.com/euiseok00/game-market/blob/main/frontend/src/api.ts) (API client), [`frontend/src/App.tsx`](https://github.com/euiseok00/game-market/blob/main/frontend/src/App.tsx) (React app), [`backend/src/main/java/com/gamemarket/summary/SummaryService.java`](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryService.java) (Summary generation), [`backend/src/main/java/com/gamemarket/order/OrderService.java`](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderService.java) (Order service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["React app<br/>[App.tsx]"]
  node_api["API client<br/>[api.ts]"]
  node_authui["Auth context<br/>[auth.tsx]"]
  node_storepages["Store pages<br/>[Home.tsx]"]
  node_detail["Game detail<br/>[GameDetail.tsx]"]
  node_cartpage["Cart page<br/>[Cart.tsx]"]
  node_librarypage["Library page<br/>[Library.tsx]"]
  node_reviewlist["Review list<br/>[ReviewList.tsx]"]
  node_summarypanel["Summary panel<br/>[SummaryPanel.tsx]"]
  node_tts["Browser TTS<br/>[useTts.ts]"]
end

subgraph group_identity["Identity"]
  node_authcontroller["Session auth"]
  node_users[("User records")]
end

subgraph group_store["Store and commerce"]
  node_gamecontroller["Game catalog"]
  node_gamerepo[("Game records")]
  node_cartcontroller["Cart operations"]
  node_cartrepo[("Cart records")]
  node_ordercontroller["Checkout"]
  node_orderservice["Order service<br/>[OrderService.java]"]
  node_librarycontroller["Game library"]
  node_orderrepo[("Orders and ownership")]
end

subgraph group_reviews["Reviews and summaries"]
  node_reviewcontroller["Review endpoint"]
  node_reviewsources["Review sources"]
  node_summarycontroller["Summary endpoint"]
  node_summaryservice["Summary generation"]
end

subgraph group_platform["Persistence and AI"]
  node_summaryrepo[("Summary cache")]
  node_summarylogs[("Timing logs")]
end

node_visitor(("Browser user"))
node_gemini{{"Gemini API"}}
node_postgres[("PostgreSQL")]

node_visitor -->|"uses"| node_app
node_app -->|"requests through"| node_api
node_app -->|"provides auth"| node_authui
node_app -->|"routes to"| node_storepages
node_app -->|"routes to"| node_detail
node_app -->|"routes to"| node_cartpage
node_app -->|"routes to"| node_librarypage
node_authui -->|"calls auth"| node_api
node_storepages -->|"loads catalog"| node_api
node_detail -->|"loads game"| node_api
node_detail -->|"renders"| node_reviewlist
node_detail -->|"renders"| node_summarypanel
node_reviewlist -->|"fetches reviews"| node_api
node_summarypanel -->|"fetches summary"| node_api
node_summarypanel -->|"speaks summary"| node_tts
node_cartpage -->|"updates cart"| node_api
node_librarypage -->|"loads library"| node_api
node_api -->|"calls API"| node_authcontroller
node_api -->|"calls API"| node_gamecontroller
node_api -->|"calls API"| node_cartcontroller
node_api -->|"calls API"| node_ordercontroller
node_api -->|"calls API"| node_librarycontroller
node_api -->|"calls API"| node_reviewcontroller
node_api -->|"calls API"| node_summarycontroller
node_authcontroller -->|"reads and writes"| node_users
node_gamecontroller -->|"queries catalog"| node_gamerepo
node_cartcontroller -->|"finds games"| node_gamerepo
node_cartcontroller -->|"manages cart"| node_cartrepo
node_cartcontroller -->|"checks ownership"| node_orderservice
node_ordercontroller -->|"checks out"| node_orderservice
node_librarycontroller -->|"loads library"| node_orderservice
node_orderservice -->|"reads and clears"| node_cartrepo
node_orderservice -->|"saves orders"| node_orderrepo
node_reviewcontroller -->|"finds game"| node_gamerepo
node_reviewcontroller -->|"fetches reviews"| node_reviewsources
node_summarycontroller -->|"requests summary"| node_summaryservice
node_summaryservice -->|"loads game"| node_gamerepo
node_summaryservice -->|"fetches reviews"| node_reviewsources
node_summaryservice -->|"reads and caches"| node_summaryrepo
node_summaryservice -->|"records timings"| node_summarylogs
node_summaryservice -->|"requests summary"| node_gemini
node_gamecontroller -->|"persists catalog"| node_postgres
node_cartcontroller -->|"persists cart"| node_postgres
node_orderservice -->|"persists purchases"| node_postgres
node_summaryservice -->|"persists cache and logs"| node_postgres

click node_app "https://github.com/euiseok00/game-market/blob/main/frontend/src/App.tsx"
click node_api "https://github.com/euiseok00/game-market/blob/main/frontend/src/api.ts"
click node_authui "https://github.com/euiseok00/game-market/blob/main/frontend/src/auth.tsx"
click node_storepages "https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Home.tsx"
click node_detail "https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/GameDetail.tsx"
click node_cartpage "https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Cart.tsx"
click node_librarypage "https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Library.tsx"
click node_reviewlist "https://github.com/euiseok00/game-market/blob/main/frontend/src/components/ReviewList.tsx"
click node_summarypanel "https://github.com/euiseok00/game-market/blob/main/frontend/src/components/SummaryPanel.tsx"
click node_tts "https://github.com/euiseok00/game-market/blob/main/frontend/src/hooks/useTts.ts"
click node_authcontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/auth/AuthController.java"
click node_users "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/auth/UserRepository.java"
click node_gamecontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/game/GameController.java"
click node_gamerepo "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/game/GameRepository.java"
click node_cartcontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/cart/CartController.java"
click node_cartrepo "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/cart/CartRepository.java"
click node_ordercontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderController.java"
click node_orderservice "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderService.java"
click node_librarycontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/LibraryController.java"
click node_orderrepo "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderRepository.java"
click node_reviewcontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/review/ReviewController.java"
click node_reviewsources "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/review/FallbackReviewSource.java"
click node_summarycontroller "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryController.java"
click node_summaryservice "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryService.java"
click node_summaryrepo "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryRepository.java"
click node_summarylogs "https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryLogRepository.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_app,node_api,node_authui,node_storepages,node_detail,node_cartpage,node_librarypage,node_reviewlist,node_summarypanel,node_tts,node_visitor toneBlue
class node_authcontroller,node_users,node_postgres toneAmber
class node_gamecontroller,node_gamerepo,node_cartcontroller,node_cartrepo,node_ordercontroller,node_orderservice,node_librarycontroller,node_orderrepo,node_gemini toneMint
class node_reviewcontroller,node_reviewsources,node_summarycontroller,node_summaryservice toneRose
class node_summaryrepo,node_summarylogs toneIndigo
```

## Components

### Web client

- [React app](https://github.com/euiseok00/game-market/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [API client](https://github.com/euiseok00/game-market/blob/main/frontend/src/api.ts): `frontend/src/api.ts`
- [Auth context](https://github.com/euiseok00/game-market/blob/main/frontend/src/auth.tsx): `frontend/src/auth.tsx`
- [Store pages](https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Home.tsx): `frontend/src/pages/Home.tsx`
- [Game detail](https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/GameDetail.tsx): `frontend/src/pages/GameDetail.tsx`
- [Cart page](https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Cart.tsx): `frontend/src/pages/Cart.tsx`
- [Library page](https://github.com/euiseok00/game-market/blob/main/frontend/src/pages/Library.tsx): `frontend/src/pages/Library.tsx`
- [Review list](https://github.com/euiseok00/game-market/blob/main/frontend/src/components/ReviewList.tsx): `frontend/src/components/ReviewList.tsx`
- [Summary panel](https://github.com/euiseok00/game-market/blob/main/frontend/src/components/SummaryPanel.tsx): `frontend/src/components/SummaryPanel.tsx`
- [Browser TTS](https://github.com/euiseok00/game-market/blob/main/frontend/src/hooks/useTts.ts): `frontend/src/hooks/useTts.ts`

### Identity

- [Session auth](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/auth/AuthController.java): `backend/src/main/java/com/gamemarket/auth/AuthController.java`
- [User records](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/auth/UserRepository.java): `backend/src/main/java/com/gamemarket/auth/UserRepository.java`

### Store and commerce

- [Game catalog](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/game/GameController.java): `backend/src/main/java/com/gamemarket/game/GameController.java`
- [Game records](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/game/GameRepository.java): `backend/src/main/java/com/gamemarket/game/GameRepository.java`
- [Cart operations](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/cart/CartController.java): `backend/src/main/java/com/gamemarket/cart/CartController.java`
- [Cart records](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/cart/CartRepository.java): `backend/src/main/java/com/gamemarket/cart/CartRepository.java`
- [Checkout](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderController.java): `backend/src/main/java/com/gamemarket/order/OrderController.java`
- [Order service](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderService.java): `backend/src/main/java/com/gamemarket/order/OrderService.java`
- [Game library](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/LibraryController.java): `backend/src/main/java/com/gamemarket/order/LibraryController.java`
- [Orders and ownership](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/order/OrderRepository.java): `backend/src/main/java/com/gamemarket/order/OrderRepository.java`

### Reviews and summaries

- [Review endpoint](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/review/ReviewController.java): `backend/src/main/java/com/gamemarket/review/ReviewController.java`
- [Review sources](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/review/FallbackReviewSource.java): `backend/src/main/java/com/gamemarket/review/FallbackReviewSource.java`
- [Summary endpoint](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryController.java): `backend/src/main/java/com/gamemarket/summary/SummaryController.java`
- [Summary generation](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryService.java): `backend/src/main/java/com/gamemarket/summary/SummaryService.java`

### Persistence and AI

- [Summary cache](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryRepository.java): `backend/src/main/java/com/gamemarket/summary/SummaryRepository.java`
- [Timing logs](https://github.com/euiseok00/game-market/blob/main/backend/src/main/java/com/gamemarket/summary/SummaryLogRepository.java): `backend/src/main/java/com/gamemarket/summary/SummaryLogRepository.java`

### Other components

- **Browser user**
- **Gemini API**
- **PostgreSQL**

## Connections

- Browser user → React app: uses (evidence: `README.md`)
- React app → API client: requests through (evidence: `frontend/src/api.ts`)
- React app → Auth context: provides auth (evidence: `frontend/src/App.tsx`)
- React app → Store pages: routes to (evidence: `frontend/src/App.tsx`)
- React app → Game detail: routes to (evidence: `frontend/src/App.tsx`)
- React app → Cart page: routes to (evidence: `frontend/src/App.tsx`)
- React app → Library page: routes to (evidence: `frontend/src/App.tsx`)
- Auth context → API client: calls auth (evidence: `frontend/src/auth.tsx`)
- Store pages → API client: loads catalog (evidence: `frontend/src/pages/Home.tsx`)
- Game detail → API client: loads game (evidence: `frontend/src/pages/GameDetail.tsx`)
- Game detail → Review list: renders (evidence: `frontend/src/pages/GameDetail.tsx`)
- Game detail → Summary panel: renders (evidence: `frontend/src/pages/GameDetail.tsx`)
- Review list → API client: fetches reviews (evidence: `frontend/src/components/ReviewList.tsx`)
- Summary panel → API client: fetches summary (evidence: `frontend/src/components/SummaryPanel.tsx`)
- Summary panel → Browser TTS: speaks summary (evidence: `frontend/src/components/SummaryPanel.tsx`)
- Cart page → API client: updates cart (evidence: `frontend/src/pages/Cart.tsx`)
- Library page → API client: loads library (evidence: `frontend/src/api.ts`)
- API client → Session auth: calls API (evidence: `README.md`)
- API client → Game catalog: calls API (evidence: `README.md`)
- API client → Cart operations: calls API (evidence: `README.md`)
- API client → Checkout: calls API (evidence: `README.md`)
- API client → Game library: calls API (evidence: `README.md`)
- API client → Review endpoint: calls API (evidence: `README.md`)
- API client → Summary endpoint: calls API (evidence: `README.md`)
- Session auth → User records: reads and writes (evidence: `backend/src/main/java/com/gamemarket/auth/AuthController.java`)
- Game catalog → Game records: queries catalog (evidence: `backend/src/main/java/com/gamemarket/game/GameController.java`)
- Cart operations → Game records: finds games (evidence: `backend/src/main/java/com/gamemarket/cart/CartController.java`)
- Cart operations → Cart records: manages cart (evidence: `backend/src/main/java/com/gamemarket/cart/CartController.java`)
- Cart operations → Order service: checks ownership (evidence: `backend/src/main/java/com/gamemarket/cart/CartController.java`)
- Checkout → Order service: checks out (evidence: `backend/src/main/java/com/gamemarket/order/OrderController.java`)
- Game library → Order service: loads library (evidence: `backend/src/main/java/com/gamemarket/order/LibraryController.java`)
- Order service → Cart records: reads and clears (evidence: `backend/src/main/java/com/gamemarket/order/OrderService.java`)
- Order service → Orders and ownership: saves orders (evidence: `backend/src/main/java/com/gamemarket/order/OrderService.java`)
- Review endpoint → Game records: finds game (evidence: `backend/src/main/java/com/gamemarket/review/ReviewController.java`)
- Review endpoint → Review sources: fetches reviews (evidence: `backend/src/main/java/com/gamemarket/review/ReviewController.java`)
- Summary endpoint → Summary generation: requests summary (evidence: `backend/src/main/java/com/gamemarket/summary/SummaryController.java`)
- Summary generation → Game records: loads game (evidence: `backend/src/main/java/com/gamemarket/summary/SummaryService.java`)
- Summary generation → Review sources: fetches reviews (evidence: `backend/src/main/java/com/gamemarket/summary/SummaryService.java`)
- Summary generation → Summary cache: reads and caches (evidence: `backend/src/main/java/com/gamemarket/summary/SummaryService.java`)
- Summary generation → Timing logs: records timings (evidence: `backend/src/main/java/com/gamemarket/summary/SummaryService.java`)
- Summary generation → Gemini API: requests summary (evidence: `README.md`)
- Game catalog → PostgreSQL: persists catalog (evidence: `README.md`)
- Cart operations → PostgreSQL: persists cart (evidence: `README.md`)
- Order service → PostgreSQL: persists purchases (evidence: `README.md`)
- Summary generation → PostgreSQL: persists cache and logs (evidence: `README.md`)
