# seal88241712-creator/backend architecture

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

- Interactive diagram: https://gitdiagram.com/seal88241712-creator/backend
- Repository: https://github.com/seal88241712-creator/backend

## Overview

1. **Overall shape**
   - This is a single Spring Boot backend monolith for a campus second-hand trading platform.
   - The application is organized in a classic layered architecture: controller → service → mapper → database, with DTO/VO objects separating API contracts from persistence models.

2. **Primary business domains**
   - The codebase centers on nine functional areas: users, goods, categories, orders, chat, AI chat, evaluations, favorites, and announcements.
   - Admin-oriented flows are present alongside student/user flows, especially for user audit, goods audit, and platform management.

3. **API layer**
   - `controller/` contains REST endpoints for each domain, such as `UserController`, `GoodsController`, `OrderController`, `ChatController`, `AiChatController`, and `AdminController`.
   - Controllers accept DTOs, delegate to services, and return unified response wrappers rather than exposing entities directly.

4. **Business logic layer**
   - `service/` defines domain services and `service/impl/` contains the implementations.
   - This is where workflow rules live: publishing goods, approving audits, creating orders, recording evaluations, managing favorites, and assembling dashboard/statistics views.

5. **Persistence boundary**
   - `mapper/` holds MyBatis-Plus mappers for the main entities: `User`, `Goods`, `Category`, `Order`, `ChatRecord`, `Evaluation`, `Favorite`, `Announcement`, and AI chat history.
   - `entity/` models map to relational tables in MySQL, while `vo/` models are used to shape responses for lists, details, stats, and dashboards.

6. **Data flow and object boundaries**
   - Request payloads use `dto/` types such as login/register, goods publish/query, order create/pay/query, audit actions, and chat messages.
   - Responses use `vo/` types such as `UserVO`, `GoodsVO`, `OrderVO`, `ChatMessageVO`, `DashboardVO`, and statistics VOs, which indicates a deliberate separation between storage schema and API output.

7. **Security and identity**
   - Security is built with Spring Security plus JWT.
   - The request path likely flows through `JwtAuthenticationFilter`, which authenticates incoming requests, with `UserDetailsServiceImpl` and `CustomUserDetails` backing user lookup and authorization.
   - Roles and status are modeled explicitly in enums like `UserRole`, `UserStatus`, and `GoodsStatus`, supporting role-based access control for student/admin behavior.

8. **Real-time communication**
   - Chat is not purely REST-based; it includes WebSocket support configured through `WebSocketConfig`, `WebSocketHandshakeInterceptor`, and `ChatWebSocketHandler`.
   - This implies two parallel chat paths: persistent chat history in MySQL via `ChatRecord`, and real-time message exchange over WebSocket/STOMP.

9. **External services and infrastructure**
   - Redis is configured as a secondary data store/cache, probably for session/token-related data, verification, or short-lived platform state.
   - `DashScopeConfig` suggests integration with an external AI service for `AiChatController`/`AiChatService`, likely for AI conversation or recommendation features.
   - File uploads are handled separately and stored under the local `uploads/` directory, with image upload support exposed via `FileUploadController`.

10. **Cross-cutting framework support**
   - `common/` provides the standard API envelope (`Result`, `PageResult`) and centralized error handling via `BusinessException` and `GlobalExceptionHandler`.
   - `config/` contains CORS, Redis, WebSocket, MyBatis-Plus, file upload, and Knife4j/Swagger documentation setup.
   - This indicates the backend is designed to be consumed by a separate frontend application and documented through generated API docs.

11. **Domain-specific workflows**
   - Goods lifecycle: publish → audit/approval → browse/search/filter → favorite/chat/order.
   - Order lifecycle: create → pay/mock payment → status tracking → evaluation.
   - User lifecycle: register/login → JWT-authenticated access → audit/approval for role/status changes.
   - Announcement and statistics flows support administrative oversight and platform-wide messaging.

12. **Operational and schema concerns**
   - The repository includes Flyway-style SQL migrations under `src/main/resources/db/migration`, showing that schema evolution is part of the runtime model.
   - Logging is configured via `logback-spring.xml`, and the build uses Maven with Spring Boot packaging.
   - The presence of `target/` and generated artifacts indicates a standard Java deployment model: build a runnable JAR, then run it with environment-specific YAML profiles.

13. **What to show in an architecture diagram**
   - Draw one backend service boundary containing API controllers, service layer, persistence layer, security, and WebSocket handling.
   - Show MySQL as the primary system of record, Redis as the auxiliary cache/state store, local file storage for uploads, and an external AI service connected to the AI chat module.
   - Highlight the request entry points: REST endpoints, JWT-filtered HTTP traffic, and WebSocket connections for chat.

Main entry points: [`src/main/java/com/campus/trading/CampusTradingApplication.java`](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/CampusTradingApplication.java) (CampusTrading), [`src/main/java/com/campus/trading/security/SecurityConfig.java`](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/security/SecurityConfig.java) (Security), [`src/main/java/com/campus/trading/controller/UserController.java`](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/UserController.java) (Users), [`src/main/java/com/campus/trading/mapper/UserMapper.java`](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/mapper/UserMapper.java) (Core mappers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Spring Boot app"]
  node_app_main(("CampusTrading<br/>boot app"))
end

subgraph group_api["API layer"]
  node_ctrl_user["Users<br/>controller"]
  node_ctrl_goods["Goods<br/>controller"]
  node_ctrl_order["Orders<br/>controller"]
  node_ctrl_chat["Chat<br/>controller"]
  node_ctrl_ai["AI chat<br/>controller"]
  node_ctrl_admin["Admin<br/>controller"]
end

subgraph group_domain["Business layer"]
  node_svc_user["User service"]
  node_svc_goods["Goods service"]
  node_svc_order["Order service"]
  node_svc_chat["Chat service"]
  node_svc_ai["AI service"]
  node_svc_misc["Support services"]
end

subgraph group_data["Persistence layer"]
  node_db[("MySQL<br/>system of record")]
  node_ent_core["Core entities<br/>entity models<br/>[User.java]"]
  node_ent_social["Interaction entities<br/>entity models<br/>[ChatRecord.java]"]
  node_map_core["Core mappers<br/>mybatis mapper<br/>[UserMapper.java]"]
  node_map_social["Interaction mappers<br/>mybatis mapper"]
end

subgraph group_infra["Infrastructure"]
  node_sec["Security"]
  node_ws["WebSocket chat<br/>realtime"]
  node_redis[("Redis<br/>cache/state<br/>[RedisConfig.java]")]
  node_ai_ext(("DashScope<br/>external ai"))
  node_files[("Uploads<br/>local storage")]
end

node_app_main -->|"HTTP security"| node_sec
node_app_main -->|"routes"| node_ctrl_user
node_app_main -->|"routes"| node_ctrl_goods
node_app_main -->|"routes"| node_ctrl_order
node_app_main -->|"routes"| node_ctrl_chat
node_app_main -->|"routes"| node_ctrl_ai
node_app_main -->|"routes"| node_ctrl_admin
node_ctrl_user -->|"delegates"| node_svc_user
node_ctrl_goods -->|"delegates"| node_svc_goods
node_ctrl_order -->|"delegates"| node_svc_order
node_ctrl_chat -->|"delegates"| node_svc_chat
node_ctrl_ai -->|"delegates"| node_svc_ai
node_ctrl_admin -->|"delegates"| node_svc_misc
node_svc_user -->|"persists"| node_map_core
node_svc_goods -->|"persists"| node_map_core
node_svc_order -->|"persists"| node_map_core
node_svc_chat -->|"persists"| node_map_social
node_svc_ai -->|"calls"| node_ai_ext
node_svc_misc -->|"persists"| node_map_social
node_map_core -->|"SQL"| node_db
node_map_social -->|"SQL"| node_db
node_ent_core -->|"maps to"| node_db
node_ent_social -->|"maps to"| node_db
node_sec -->|"authenticates"| node_ctrl_user
node_sec -->|"authorizes"| node_ctrl_admin
node_sec -->|"uses"| node_redis
node_ws -->|"message flow"| node_svc_chat
node_ws -.->|"uses"| node_redis
node_ctrl_goods -->|"uploads"| node_files
node_ctrl_user -.->|"shares"| node_svc_misc

click node_app_main "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/CampusTradingApplication.java"
click node_ctrl_user "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/UserController.java"
click node_ctrl_goods "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/GoodsController.java"
click node_ctrl_order "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/OrderController.java"
click node_ctrl_chat "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/ChatController.java"
click node_ctrl_ai "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/AiChatController.java"
click node_ctrl_admin "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/AdminController.java"
click node_svc_user "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/UserServiceImpl.java"
click node_svc_goods "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/GoodsServiceImpl.java"
click node_svc_order "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/OrderServiceImpl.java"
click node_svc_chat "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/ChatServiceImpl.java"
click node_svc_ai "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/AiChatServiceImpl.java"
click node_svc_misc "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/AdminServiceImpl.java"
click node_sec "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/security/SecurityConfig.java"
click node_ws "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/handler/ChatWebSocketHandler.java"
click node_redis "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/config/RedisConfig.java"
click node_ai_ext "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/config/DashScopeConfig.java"
click node_files "https://github.com/seal88241712-creator/backend/tree/main/uploads/images"
click node_db "https://github.com/seal88241712-creator/backend/tree/main/src/main/resources/db/migration"
click node_ent_core "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/entity/User.java"
click node_ent_social "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/entity/ChatRecord.java"
click node_map_core "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/mapper/UserMapper.java"
click node_map_social "https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/mapper/ChatRecordMapper.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_main toneBlue
class node_ctrl_user,node_ctrl_goods,node_ctrl_order,node_ctrl_chat,node_ctrl_ai,node_ctrl_admin toneAmber
class node_svc_user,node_svc_goods,node_svc_order,node_svc_chat,node_svc_ai,node_svc_misc toneMint
class node_db,node_ent_core,node_ent_social,node_map_core,node_map_social toneRose
class node_sec,node_ws,node_redis,node_ai_ext,node_files toneIndigo
```

## Components

### Spring Boot app

Single backend monolith for campus second-hand trading

- [CampusTrading](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/CampusTradingApplication.java): boot app · Application bootstrap and runtime entrypoint · `src/main/java/com/campus/trading/CampusTradingApplication.java`

### API layer

HTTP entry points and request/response contracts

- [Users](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/UserController.java): controller · Login, registration, and user audit APIs · `src/main/java/com/campus/trading/controller/UserController.java`
- [Goods](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/GoodsController.java): controller · Goods publish, browse, and audit APIs · `src/main/java/com/campus/trading/controller/GoodsController.java`
- [Orders](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/OrderController.java): controller · Order create, pay, and query APIs · `src/main/java/com/campus/trading/controller/OrderController.java`
- [Chat](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/ChatController.java): controller · Persistent chat history APIs · `src/main/java/com/campus/trading/controller/ChatController.java`
- [AI chat](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/AiChatController.java): controller · AI conversation and recommendation APIs · `src/main/java/com/campus/trading/controller/AiChatController.java`
- [Admin](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/controller/AdminController.java): controller · Platform management and dashboard APIs · `src/main/java/com/campus/trading/controller/AdminController.java`

### Business layer

Core workflows and domain services

- [User service](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/UserServiceImpl.java): service · Authentication, user status, and profile workflows · `src/main/java/com/campus/trading/service/impl/UserServiceImpl.java`
- [Goods service](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/GoodsServiceImpl.java): service · Publish, audit, search, and lifecycle rules · `src/main/java/com/campus/trading/service/impl/GoodsServiceImpl.java`
- [Order service](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/OrderServiceImpl.java): service · Order creation, payment, and tracking rules · `src/main/java/com/campus/trading/service/impl/OrderServiceImpl.java`
- [Chat service](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/ChatServiceImpl.java): service · Chat history and conversation assembly · `src/main/java/com/campus/trading/service/impl/ChatServiceImpl.java`
- [AI service](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/AiChatServiceImpl.java): service · External AI chat and recommendations · `src/main/java/com/campus/trading/service/impl/AiChatServiceImpl.java`
- [Support services](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/service/impl/AdminServiceImpl.java): service · Categories, favorites, evaluations, announcements, files, admin · `src/main/java/com/campus/trading/service/impl/AdminServiceImpl.java`

### Persistence layer

Database entities and MyBatis mappers

- [MySQL](https://github.com/seal88241712-creator/backend/tree/main/src/main/resources/db/migration): system of record · Primary relational database behind entities and mappers · `src/main/resources/db/migration`
- [Core entities](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/entity/User.java): entity models · Users, goods, orders, categories, and announcements · `src/main/java/com/campus/trading/entity/User.java`
- [Interaction entities](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/entity/ChatRecord.java): entity models · Chat records, favorites, evaluations, and AI chat history · `src/main/java/com/campus/trading/entity/ChatRecord.java`
- [Core mappers](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/mapper/UserMapper.java): mybatis mapper · Persistence mappers for main business tables · `src/main/java/com/campus/trading/mapper/UserMapper.java`
- [Interaction mappers](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/mapper/ChatRecordMapper.java): mybatis mapper · Persistence mappers for chat, evaluation, favorite, and AI history · `src/main/java/com/campus/trading/mapper/ChatRecordMapper.java`

### Infrastructure

Security, realtime, storage, and external integrations

- [Security](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/security/SecurityConfig.java): spring security · JWT filter, user details, and authorization · `src/main/java/com/campus/trading/security/SecurityConfig.java`
- [WebSocket chat](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/handler/ChatWebSocketHandler.java): realtime · Handshake and websocket message handling · `src/main/java/com/campus/trading/handler/ChatWebSocketHandler.java`
- [Redis](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/config/RedisConfig.java): cache/state · Secondary store for short-lived platform state · `src/main/java/com/campus/trading/config/RedisConfig.java`
- [DashScope](https://github.com/seal88241712-creator/backend/blob/main/src/main/java/com/campus/trading/config/DashScopeConfig.java): external ai · External AI provider used by AI chat · `src/main/java/com/campus/trading/config/DashScopeConfig.java`
- [Uploads](https://github.com/seal88241712-creator/backend/tree/main/uploads/images): local storage · Local image and file upload storage · `uploads/images`

## Connections

- CampusTrading → Security: HTTP security · All REST traffic passes through JWT authentication and authorization
- CampusTrading → Users: routes · Bootstraps user-facing REST endpoints
- CampusTrading → Goods: routes · Bootstraps goods-related REST endpoints
- CampusTrading → Orders: routes · Bootstraps order REST endpoints
- CampusTrading → Chat: routes · Bootstraps chat history REST endpoints
- CampusTrading → AI chat: routes · Bootstraps AI chat REST endpoints
- CampusTrading → Admin: routes · Bootstraps admin and dashboard REST endpoints
- Users → User service: delegates · Controllers pass request DTOs to domain services
- Goods → Goods service: delegates · Goods APIs delegate workflow rules to service layer
- Orders → Order service: delegates · Order APIs delegate business logic to service layer
- Chat → Chat service: delegates · Chat APIs read and assemble message history
- AI chat → AI service: delegates · AI chat APIs forward prompts and context
- Admin → Support services: delegates · Admin flows compose statistics and platform management views
- User service → Core mappers: persists · User service reads and writes core user records
- Goods service → Core mappers: persists · Goods service persists goods and category data
- Order service → Core mappers: persists · Order service persists order state
- Chat service → Interaction mappers: persists · Chat service stores chat history records
- AI service → DashScope: calls · AI service invokes external model provider
- Support services → Interaction mappers: persists · Favorites, evaluations, announcements, and admin summaries use supporting mappers
- Core mappers → MySQL: SQL · Core mappers operate on MySQL tables
- Interaction mappers → MySQL: SQL · Interaction mappers operate on MySQL tables
- Core entities → MySQL: maps to · Primary domain entities correspond to relational tables
- Interaction entities → MySQL: maps to · Interaction entities correspond to relational tables
- Security → Users: authenticates · JWT filter and user details protect API access
- Security → Admin: authorizes · Role-based access controls admin actions
- Security → Redis: uses · Security and short-lived state may rely on Redis
- WebSocket chat → Chat service: message flow · WebSocket handler exchanges live chat messages with chat service
- WebSocket chat → Redis: uses · Realtime coordination can use Redis-backed state
- Goods → Uploads: uploads · Goods images and related files are stored locally
- Users → Support services: shares · User-facing dashboards and counts are assembled from supporting services
