chore: sync local updates

This commit is contained in:
2026-05-16 19:03:36 +08:00
parent 37983f3b60
commit f1417891ac
101 changed files with 4626 additions and 307 deletions

112
.java-test/后端文档.md Normal file
View File

@@ -0,0 +1,112 @@
# 萌芽小店 · 后端mengyastore-backend-java
基于 **Java 17、Spring Boot 3、Spring MVC、Spring Data JPAHibernate** 的 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/ # JPAentity/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 / rabbitmqJSON 外层为 `{"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`,请指向本服务监听的 **协议 + 主机 + 端口**