# seri0720/shop architecture

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

- Interactive diagram: https://gitdiagram.com/seri0720/shop
- Repository: https://github.com/seri0720/shop

## Overview

This is a web application with a React client and NestJS API for account registration/login, refresh-token sessions, a protected account area, and an admin-only area. The main flow is browser routes and forms → client auth state/API calls → auth controller/service → user and refresh-token persistence; guarded user/admin endpoints provide protected results. README content is absent, so capabilities and links are based on the tree and shown excerpts; unsampled page, guard, and JWT behavior is represented conservatively.

Main entry points: [`frontend/src/router.tsx`](https://github.com/seri0720/shop/blob/main/frontend/src/router.tsx) (App routes), [`backend/src/auth/auth.controller.ts`](https://github.com/seri0720/shop/blob/main/backend/src/auth/auth.controller.ts) (Auth endpoints), [`frontend/src/lib/api.ts`](https://github.com/seri0720/shop/blob/main/frontend/src/lib/api.ts) (API client), [`backend/src/app.module.ts`](https://github.com/seri0720/shop/blob/main/backend/src/app.module.ts) (Nest app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Client bootstrap<br/>[main.tsx]"]
  node_routes["App routes<br/>[router.tsx]"]
  node_auth_ui["Auth screens<br/>[login-page.tsx]"]
  node_auth_state["Auth context<br/>[auth-context.ts]"]
  node_api_client["API client<br/>[api.ts]"]
  node_account["Account page<br/>[account-page.tsx]"]
  node_admin_ui["Admin dashboard<br/>[dashboard-page.tsx]"]
end

subgraph group_api["Backend API"]
  node_api_entry["Nest app<br/>[app.module.ts]"]
  node_user_controller["User endpoints<br/>[user.controller.ts]"]
  node_admin_controller["Admin endpoint"]
end

subgraph group_identity["Identity and access"]
  node_auth_controller["Auth endpoints<br/>[auth.controller.ts]"]
  node_auth_service["Auth workflows<br/>[auth.service.ts]"]
  node_jwt["JWT strategy<br/>[jwt.strategy.ts]"]
  node_access_guards["Access control<br/>[roles.guard.ts]"]
  node_refresh_service["Refresh tokens"]
end

subgraph group_persistence["Persistence"]
  node_user_service["User operations<br/>[user.service.ts]"]
  node_prisma["Prisma service<br/>[prisma.service.ts]"]
  node_database[("PostgreSQL")]
end

node_visitor(("Browser user"))

node_visitor -->|"uses"| node_app
node_app -->|"mounts"| node_routes
node_routes -->|"routes to"| node_auth_ui
node_routes -->|"protects route"| node_account
node_routes -->|"routes to"| node_admin_ui
node_auth_ui -.->|"uses"| node_auth_state
node_auth_state -.->|"requests"| node_api_client
node_api_client -.->|"HTTP calls"| node_auth_controller
node_account -.->|"requests"| node_api_client
node_admin_ui -.->|"requests"| node_api_client
node_api_entry -->|"registers"| node_auth_controller
node_api_entry -->|"registers"| node_user_controller
node_api_entry -->|"registers"| node_admin_controller
node_auth_controller -->|"delegates"| node_auth_service
node_auth_service -->|"checks and creates users"| node_user_service
node_auth_service -->|"issues and revokes"| node_refresh_service
node_auth_controller -.->|"returns session/user data"| node_user_controller
node_user_controller -->|"loads current user"| node_user_service
node_admin_controller -->|"applies guards"| node_access_guards
node_access_guards -.->|"validates token"| node_jwt
node_user_service -->|"queries users"| node_prisma
node_refresh_service -->|"stores token hashes"| node_prisma
node_prisma -.->|"reads and writes"| node_database

click node_app "https://github.com/seri0720/shop/blob/main/frontend/src/main.tsx"
click node_routes "https://github.com/seri0720/shop/blob/main/frontend/src/router.tsx"
click node_auth_ui "https://github.com/seri0720/shop/blob/main/frontend/src/pages/login-page.tsx"
click node_auth_state "https://github.com/seri0720/shop/blob/main/frontend/src/features/auth/auth-context.ts"
click node_api_client "https://github.com/seri0720/shop/blob/main/frontend/src/lib/api.ts"
click node_account "https://github.com/seri0720/shop/blob/main/frontend/src/pages/account-page.tsx"
click node_admin_ui "https://github.com/seri0720/shop/blob/main/frontend/src/pages/admin/dashboard-page.tsx"
click node_api_entry "https://github.com/seri0720/shop/blob/main/backend/src/app.module.ts"
click node_auth_controller "https://github.com/seri0720/shop/blob/main/backend/src/auth/auth.controller.ts"
click node_auth_service "https://github.com/seri0720/shop/blob/main/backend/src/auth/auth.service.ts"
click node_jwt "https://github.com/seri0720/shop/blob/main/backend/src/auth/jwt.strategy.ts"
click node_access_guards "https://github.com/seri0720/shop/blob/main/backend/src/common/auth/roles.guard.ts"
click node_user_controller "https://github.com/seri0720/shop/blob/main/backend/src/user/user.controller.ts"
click node_admin_controller "https://github.com/seri0720/shop/blob/main/backend/src/admin/admin.controller.ts"
click node_user_service "https://github.com/seri0720/shop/blob/main/backend/src/user/user.service.ts"
click node_refresh_service "https://github.com/seri0720/shop/blob/main/backend/src/auth/refresh-token.service.ts"
click node_prisma "https://github.com/seri0720/shop/blob/main/backend/src/prisma/prisma.service.ts"

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_routes,node_auth_ui,node_auth_state,node_api_client,node_account,node_admin_ui,node_visitor toneBlue
class node_api_entry,node_user_controller,node_admin_controller toneAmber
class node_auth_controller,node_auth_service,node_jwt,node_access_guards,node_refresh_service toneMint
class node_user_service,node_prisma,node_database toneRose
```

## Components

### Web client

- [Client bootstrap](https://github.com/seri0720/shop/blob/main/frontend/src/main.tsx): `frontend/src/main.tsx`
- [App routes](https://github.com/seri0720/shop/blob/main/frontend/src/router.tsx): `frontend/src/router.tsx`
- [Auth screens](https://github.com/seri0720/shop/blob/main/frontend/src/pages/login-page.tsx): `frontend/src/pages/login-page.tsx`
- [Auth context](https://github.com/seri0720/shop/blob/main/frontend/src/features/auth/auth-context.ts): `frontend/src/features/auth/auth-context.ts`
- [API client](https://github.com/seri0720/shop/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`
- [Account page](https://github.com/seri0720/shop/blob/main/frontend/src/pages/account-page.tsx): `frontend/src/pages/account-page.tsx`
- [Admin dashboard](https://github.com/seri0720/shop/blob/main/frontend/src/pages/admin/dashboard-page.tsx): `frontend/src/pages/admin/dashboard-page.tsx`

### Backend API

- [Nest app](https://github.com/seri0720/shop/blob/main/backend/src/app.module.ts): `backend/src/app.module.ts`
- [User endpoints](https://github.com/seri0720/shop/blob/main/backend/src/user/user.controller.ts): `backend/src/user/user.controller.ts`
- [Admin endpoint](https://github.com/seri0720/shop/blob/main/backend/src/admin/admin.controller.ts): `backend/src/admin/admin.controller.ts`

### Identity and access

- [Auth endpoints](https://github.com/seri0720/shop/blob/main/backend/src/auth/auth.controller.ts): `backend/src/auth/auth.controller.ts`
- [Auth workflows](https://github.com/seri0720/shop/blob/main/backend/src/auth/auth.service.ts): `backend/src/auth/auth.service.ts`
- [JWT strategy](https://github.com/seri0720/shop/blob/main/backend/src/auth/jwt.strategy.ts): `backend/src/auth/jwt.strategy.ts`
- [Access control](https://github.com/seri0720/shop/blob/main/backend/src/common/auth/roles.guard.ts): `backend/src/common/auth/roles.guard.ts`
- [Refresh tokens](https://github.com/seri0720/shop/blob/main/backend/src/auth/refresh-token.service.ts): `backend/src/auth/refresh-token.service.ts`

### Persistence

- [User operations](https://github.com/seri0720/shop/blob/main/backend/src/user/user.service.ts): `backend/src/user/user.service.ts`
- [Prisma service](https://github.com/seri0720/shop/blob/main/backend/src/prisma/prisma.service.ts): `backend/src/prisma/prisma.service.ts`
- **PostgreSQL**

### Other components

- **Browser user**

## Connections

- Browser user → Client bootstrap: uses
- Client bootstrap → App routes: mounts (evidence: `frontend/src/main.tsx`)
- App routes → Auth screens: routes to (evidence: `frontend/src/router.tsx`)
- App routes → Account page: protects route (evidence: `frontend/src/router.tsx`)
- App routes → Admin dashboard: routes to (evidence: `frontend/src/router.tsx`)
- Auth screens → Auth context: uses
- Auth context → API client: requests
- API client → Auth endpoints: HTTP calls
- Account page → API client: requests
- Admin dashboard → API client: requests
- Nest app → Auth endpoints: registers (evidence: `backend/src/app.module.ts`)
- Nest app → User endpoints: registers (evidence: `backend/src/app.module.ts`)
- Nest app → Admin endpoint: registers (evidence: `backend/src/app.module.ts`)
- Auth endpoints → Auth workflows: delegates (evidence: `backend/src/auth/auth.controller.ts`)
- Auth workflows → User operations: checks and creates users (evidence: `backend/src/auth/auth.service.ts`)
- Auth workflows → Refresh tokens: issues and revokes (evidence: `backend/src/auth/auth.service.ts`)
- Auth endpoints → User endpoints: returns session/user data
- User endpoints → User operations: loads current user (evidence: `backend/src/user/user.controller.ts`)
- Admin endpoint → Access control: applies guards (evidence: `backend/src/admin/admin.controller.ts`)
- Access control → JWT strategy: validates token
- User operations → Prisma service: queries users (evidence: `backend/src/user/user.service.ts`)
- Refresh tokens → Prisma service: stores token hashes (evidence: `backend/src/auth/refresh-token.service.ts`)
- Prisma service → PostgreSQL: reads and writes
