113 lines
5.5 KiB
Markdown
113 lines
5.5 KiB
Markdown
# 萌芽小店 · 后端(mengyastore-backend-java)
|
||
|
||
基于 **Java 17、Spring Boot 3、Spring MVC、Spring Data JPA(Hibernate)** 的 REST API,配套 **Vue 3** 前端联调;可在 **IntelliJ IDEA** 中运行 `MengyastoreBackendJavaApplication` 进行开发与测试。
|
||
|
||
## 技术栈与 Maven 依赖
|
||
|
||
| 依赖 | 用途 |
|
||
|------|------|
|
||
| spring-boot-starter-web | REST、Jackson |
|
||
| spring-boot-starter-data-jpa | 实体、Repository、事务 |
|
||
| mysql-connector-j | MySQL JDBC |
|
||
| spring-boot-starter-amqp | RabbitMQ |
|
||
| spring-boot-starter-data-redis | Redis |
|
||
| spring-boot-starter-validation | Bean 校验 |
|
||
| spring-boot-starter-mail | Jakarta Mail(业务 SMTP 配置来自数据库) |
|
||
| spring-boot-starter-actuator | 健康检查(默认关闭 Mail 指标以免未配 SMTP 报错) |
|
||
| lombok | Getter 等样板代码 |
|
||
|
||
## 包结构
|
||
|
||
```
|
||
src/main/java/com/smyhub/store/mengyastorebackendjava/
|
||
├── MengyastoreBackendJavaApplication.java
|
||
├── config/ # AppProperties、CORS、RabbitMQ、Redis、RestTemplate、WebMvc
|
||
├── controller/ # 按域拆分;admin/ 为管理端
|
||
├── dto/request|response/
|
||
├── entity/ # JPA;entity/converter 处理 JSON 列
|
||
├── exception/ # BusinessException、GlobalExceptionHandler
|
||
├── mq/ # 拓扑、Payload、Producer、Consumer(随 app.rabbitmq-enabled)
|
||
├── repository/
|
||
├── security/ # 管理令牌与用户 Bearer 拦截器、ThreadLocal 用户
|
||
└── service/ # 业务与 SystemStatusService 等
|
||
```
|
||
|
||
## API 路由一览
|
||
|
||
### 公开
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/api/health` | 健康检查;含 RabbitMQ 状态(`ok` / `error` / `disabled`) |
|
||
| GET | `/api/products` | 上架商品列表(不含卡密与 `fixedContent`) |
|
||
| POST | `/api/products/{id}/view` | 记录浏览(进程内去重) |
|
||
| GET | `/api/stats` | 订单数、访问量 |
|
||
| POST | `/api/site/visit` | 站点访问计数 |
|
||
| GET | `/api/site/maintenance` | 维护状态 |
|
||
| POST | `/api/checkout` | 创建订单(可选 `Authorization: Bearer`) |
|
||
| POST | `/api/orders/{id}/confirm` | 确认订单 |
|
||
|
||
### 用户(Bearer,远程认证服务校验)
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/api/orders` | 当前用户订单 |
|
||
| GET / POST | `/api/wishlist` | 列表;POST body `{"productId":"…"}` |
|
||
| DELETE | `/api/wishlist/{id}` | 删除,路径参数为商品 ID |
|
||
| GET / POST | `/api/chat/messages` | 消息列表;发送(带发送频控) |
|
||
|
||
### 管理端(`X-Admin-Token`;兼容 `Authorization`、`?token=`)
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| POST | `/api/admin/verify` | 请求体 `{"token":"…"}`,**响应顶层** `{"valid":true/false}` |
|
||
| GET / POST / PUT / PATCH / DELETE | `/api/admin/products` | 商品 CRUD 与上下架 |
|
||
| POST | `/api/admin/site/maintenance` | 维护模式 |
|
||
| GET / POST | `/api/admin/site/smtp` | SMTP 配置读/写 |
|
||
| GET | `/api/admin/orders` | 订单列表 |
|
||
| DELETE | `/api/admin/orders/{id}` | 删除订单 |
|
||
| GET / POST / DELETE | `/api/admin/chat`、`/api/admin/chat/{account}` | 会话、回复、清空 |
|
||
| GET | `/api/admin/system-status` | 聚合 backend / mysql / redis / rabbitmq;JSON 外层为 `{"data":{…},"error":null}` |
|
||
|
||
其它管理接口的成功响应多为 `{"data":…,"error":null}` 形式。
|
||
|
||
## 数据库表(摘要)
|
||
|
||
开发环境常用 `spring.jpa.hibernate.ddl-auto: update` 同步表结构。
|
||
|
||
**products:** 商品信息;`fulfillment_type`:`card`(卡密库存)/ `fixed`(固定内容);`fixed_content` 不在公开列表返回;含价格、标签 JSON、封面、截图 JSON、`active`、`require_login`、`max_per_account`、`total_sold`、`view_count`、`delivery_mode` 等。
|
||
|
||
**product_codes:** 每行一条卡密,关联 `product_id`;固定内容商品可不设。
|
||
|
||
**orders:** `delivered_codes` JSON、用户信息、`status`、`delivery_mode`、`notify_email`、联系方式等。
|
||
|
||
**site_settings:** 键值对,如 `totalVisits`、`maintenance`、`smtpHost`、`smtpPassword` 等。
|
||
|
||
**wishlists:** 用户账号与商品 ID 唯一约束。
|
||
|
||
**chat_messages:** 会话消息、`from_admin`、发送时间等。
|
||
|
||
## 配置说明(application.yaml)
|
||
|
||
| 项 | 说明 |
|
||
|----|------|
|
||
| `spring.datasource.*` | MySQL |
|
||
| `spring.jpa.hibernate.ddl-auto` | 如 `update` |
|
||
| `server.port` | HTTP 端口,需与前端 `VITE_API_BASE_URL` 一致 |
|
||
| `spring.rabbitmq.*` | Broker;`app.rabbitmq-enabled=false` 时不注册监听器与拓扑,避免无法连接时启动失败 |
|
||
| `spring.data.redis.*` | Redis;`app.redis-enabled=false` 时系统状态中 Redis 标记为未启用 |
|
||
| `app.admin-token` | 管理后台令牌 |
|
||
| `app.auth-api-url` | 用户 token 远程校验服务根地址(`POST …/api/auth/verify`) |
|
||
| `app.app-env` | `development` / `production` |
|
||
| `app.rabbitmq-enabled` | 是否启用 RabbitMQ 发信与消费者 |
|
||
| `app.redis-enabled` | 是否在系统状态中探测 Redis |
|
||
| `app.rabbitmq-env` / `app.redis-env` | `dev` / `prod`,影响交换机与队列名 |
|
||
| `app.cors-allowed-origins` | 逗号分隔的允许源 |
|
||
| `management.health.mail.enabled` | 建议 `false` 直至配置 SMTP |
|
||
|
||
**CORS:** 见 `CorsConfig`,包含 `Authorization`、`X-Admin-Token` 等请求头。
|
||
|
||
## 前端联调
|
||
|
||
前端 axios `baseURL` 来自环境变量或当前页 `origin`,请指向本服务监听的 **协议 + 主机 + 端口**。
|