feat: 实现起卦、设置与积分系统

This commit is contained in:
qzl
2026-04-03 16:56:47 +08:00
parent 31594558eb
commit f245eec5f6
170 changed files with 20728 additions and 328 deletions
@@ -0,0 +1,202 @@
# 算卦 Agent API Reference
## 1. API Endpoint
- **URL**: `POST https://meeyao.com.cn/api/deepseek/chat`
- **认证**: 需要通过 `AuthInterceptor` 注入用户 token
---
## 2. 请求结构
### 2.1 DeepSeekRequest (请求体)
```kotlin
data class DeepSeekRequest(
val model: String = "deepseek-chat",
val messages: List<DeepSeekMessage>,
val temperature: Double = 0.7,
val max_tokens: Int = 2048,
val stream: Boolean = false
)
```
### 2.2 DeepSeekMessage
```kotlin
data class DeepSeekMessage(
val role: String, // "system" 或 "user"
val content: String // 系统提示词或用户提示词(含卦象JSON)
)
```
### 2.3 DivinationInfo (卦象信息 JSON)
```kotlin
data class DivinationInfo(
// 用户信息
val question: String, // 用户问题
val questionType: String, // 问题类型 (如"事业"、"感情"、"健康")
// 起卦时间信息
val divinationTime: String, // 起卦时间 "2024年06月01日 12:00"
val yearGanZhi: String, // 年干支 "甲子"
val monthGanZhi: String, // 月干支
val dayGanZhi: String, // 日干支
val timeGanZhi: String, // 时干支
// 干支空亡信息
val yearKongWang: String, // 年空亡 "戌亥"
val monthKongWang: String, // 月空亡
val dayKongWang: String, // 日空亡
val timeKongWang: String, // 时空亡
// 月建日辰信息
val yueJian: String, // 月建 "寅木"
val riChen: String, // 日辰 "午火"
val yuePo: String, // 月破
val riChong: String, // 日冲
// 五行旺衰
val wuXingStatuses: Map<String, String>, // 五行旺相休囚死状态
// 本卦信息
val guaName: String, // 卦名 "坤为地"
val upperName: String, // 上卦名称
val lowerName: String, // 下卦名称
val worldPosition: Int, // 世爻位置 (1-6)
val responsePosition: Int, // 应爻位置 (1-6)
// 六爻信息
val yaoInfoList: List<YaoDetailInfo>,
// 变卦信息
val hasChangingYao: Boolean, // 是否有动爻
val targetGuaName: String, // 变卦名称
val targetYaoInfoList: List<YaoDetailInfo>
)
```
### 2.4 YaoDetailInfo (爻详细信息)
```kotlin
data class YaoDetailInfo(
val position: Int, // 爻位置 (1-6: 初爻到上爻)
val spiritName: String, // 神煞 (龙/雀/勾/蛇/虎/玄)
val relationName: String, // 六亲 (兄弟/父母/官鬼/妻财/子孙)
val tiganName: String, // 地支 (子/丑/寅...)
val elementName: String, // 五行 (金/木/水/火/土)
val isYang: Boolean, // 阴阳属性
val isChanging: Boolean, // 是否为动爻
val specialMark: String // 特殊标记 (世/应/"")
)
```
---
## 3. 响应结构
### 3.1 DeepSeekResponse
```kotlin
data class DeepSeekResponse(
val id: String,
val choices: List<DeepSeekChoice>
)
data class DeepSeekChoice(
val message: DeepSeekMessage?, // 包含 AI 回复内容
val finish_reason: String?
)
data class DeepSeekMessage(
val role: String,
val content: String // AI 返回的解卦结果
)
```
---
## 4. 系统提示词 (System Prompt)
```
## 角色
你是一个六爻解卦专家,熟悉六爻解卦步骤以及给出对应的解卦结果...
## 输出格式要求
- 单独在最开头输出一句话概括卦象的吉凶
- 输出顺序:解卦结论、卦象重点、卦象建议、关键词
- 格式:解卦结论:1、… 2、…;卦象重点:1、… 2、…;卦象建议:1、… 2、…;关键词:…
- 关键词:三个四字成语
```
### 4.1 吉凶等级
| 等级 | 描述 |
|------|------|
| 上上签 | 卦象结果较好,完成某事容易或最终结果好 |
| 中上签 | 卦象结果一般,需很努力才能完成或效果一般 |
| 中下签 | 卦象结果较差,即使很努力也无法完成或结果不好 |
---
## 5. 字段说明
### 5.1 字段名与含义对照表
| 字段名 | 含义 | 示例 |
|--------|------|------|
| `divinationTime` | 起卦时间 | "2024年06月01日 12:00" |
| `yearGanZhi` | 年柱天干地支 | "甲子" |
| `monthGanZhi` | 月柱天干地支 | "丙寅" |
| `dayGanZhi` | 日柱天干地支 | "戊午" |
| `timeGanZhi` | 时柱天干地支 | "庚子" |
| `yearKongWang` | 年柱空亡地支 | "戌亥" |
| `yueJian` | 月建 | "寅木" |
| `riChen` | 日辰 | "午火" |
| `yuePo` | 月破 | "申金" |
| `riChong` | 日冲 | "子水" |
| `guaName` | 本卦卦名 | "坤为地" |
| `upperName` | 上卦名称 | |
| `lowerName` | 下卦名称 | |
| `worldPosition` | 世爻位置 | 1-6 |
| `responsePosition` | 应爻位置 | 1-6 |
| `hasChangingYao` | 是否有动爻 | true/false |
| `targetGuaName` | 变卦卦名 | |
### 5.2 六神 (spiritName)
| 神煞 | 含义 |
|------|------|
| 龙 | 青龙 |
| 雀 | 朱雀 |
| 勾 | 勾陈 |
| 蛇 | 螣蛇 |
| 虎 | 白虎 |
| 玄 | 玄武 |
### 5.3 六亲 (relationName)
| 六亲 | 含义 |
|------|------|
| 兄弟 | |
| 父母 | |
| 官鬼 | |
| 妻财 | |
| 子孙 | |
### 5.4 地支 (tiganName)
子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥
### 5.5 五行 (elementName)
金、木、水、火、土
---
## 6. Source
- Android App: `old/app/src/main/java/com/example/eryaoapp/api/DivinationRepository.kt`
- Request Models: `old/app/src/main/java/com/example/eryaoapp/api/model/DivinationRequest.kt`
- API Service: `old/app/src/main/java/com/example/eryaoapp/api/DeepSeekApiService.kt`
+350
View File
@@ -0,0 +1,350 @@
# Old 项目数据库表结构参考
本文档记录 `old` 文件夹中历史项目的数据库表结构定义。
---
## 一、login-service (后端服务)
### 1. users - 用户表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| phone_number | VARCHAR(20) | UNIQUE, NOT NULL | 手机号 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
**索引:**
- `idx_phone_number` ON `phone_number`
---
### 2. verification_codes - 验证码表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| phone_number | VARCHAR(20) | NOT NULL | 手机号 |
| code | VARCHAR(6) | NOT NULL | 验证码 |
| expiration_time | TIMESTAMP | NOT NULL | 过期时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
**索引:**
- `idx_vc_phone_number` ON `phone_number`
- `idx_vc_expiration` ON `expiration_time`
---
### 3. user_profile - 用户资料表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| phone_number | VARCHAR(20) | UNIQUE, NOT NULL | 手机号 |
| nickname | VARCHAR(50) | | 昵称 |
| avatar_url | VARCHAR(500) | | 头像URL |
| signature | VARCHAR(200) | | 个性签名 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
---
### 4. user_tokens - 用户令牌表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL | 用户ID |
| token | VARCHAR(255) | NOT NULL | 访问令牌 |
| refresh_token | VARCHAR(255) | | 刷新令牌 |
| expires_at | TIMESTAMP | | 过期时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
---
### 5. user_feedback - 用户反馈表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL | 用户ID |
| content | TEXT | NOT NULL | 反馈内容 |
| contact | VARCHAR(100) | | 联系方式 |
| status | VARCHAR(20) | DEFAULT 'PENDING' | 处理状态 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
---
### 6. user_coin - 用户金币表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | UNIQUE, NOT NULL | 用户ID |
| coin_count | BIGINT | DEFAULT 0 | 金币数量 |
| total_charged | BIGINT | DEFAULT 0 | 累计充值金币 |
| total_consumed | BIGINT | DEFAULT 0 | 累计消费金币 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
---
### 7. notification - 通知表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL | 用户ID |
| title | VARCHAR(100) | NOT NULL | 通知标题 |
| content | TEXT | | 通知内容 |
| type | VARCHAR(20) | | 通知类型 |
| is_read | BOOLEAN | DEFAULT FALSE | 是否已读 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
---
### 8. payment_record - 支付记录表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL | 用户ID |
| order_id | VARCHAR(64) | NOT NULL | 订单ID |
| amount | DECIMAL(10,2) | NOT NULL | 支付金额 |
| coin_amount | BIGINT | NOT NULL | 购买金币数量 |
| payment_method | VARCHAR(20) | | 支付方式 |
| status | VARCHAR(20) | NOT NULL | 支付状态 |
| transaction_id | VARCHAR(100) | | 第三方交易号 |
| paid_at | TIMESTAMP | | 支付时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
---
### 9. payment_order - 支付订单表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| order_no | VARCHAR(64) | UNIQUE, NOT NULL | 订单号 |
| user_id | BIGINT | NOT NULL | 用户ID |
| product_id | VARCHAR(50) | NOT NULL | 商品ID |
| product_name | VARCHAR(100) | NOT NULL | 商品名称 |
| amount | DECIMAL(10,2) | NOT NULL | 订单金额 |
| status | VARCHAR(20) | NOT NULL | 订单状态 |
| pay_url | TEXT | | 支付链接 |
| expire_time | TIMESTAMP | | 过期时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
---
### 10. sensitive_word_violations - 敏感词违规记录表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL, FK | 用户ID |
| content_type | VARCHAR(20) | NOT NULL | 内容类型:NICKNAME, SIGNATURE |
| violation_type | VARCHAR(30) | NOT NULL | 违规类型:POLITICAL, ILLEGAL, VULGAR, ADVERTISING, PERSONAL_ATTACK |
| detection_service | VARCHAR(20) | DEFAULT 'LOCAL' | 检测服务类型:LOCAL, ALIYUN |
| risk_level | VARCHAR(50) | | 阿里云风险等级 |
| confidence | DOUBLE | | 阿里云置信度(0-1) |
| original_content | TEXT | NOT NULL | 原始内容 |
| matched_words | TEXT | NOT NULL | 匹配到的敏感词(JSON) |
| aliyun_response | TEXT | | 阿里云完整响应 |
| client_ip | VARCHAR(45) | | 客户端IP |
| user_agent | TEXT | | 用户代理 |
| violation_time | DATETIME | NOT NULL | 违规时间 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
**索引:**
- `idx_user_id` ON `user_id`
- `idx_content_type` ON `content_type`
- `idx_violation_type` ON `violation_type`
- `idx_violation_time` ON `violation_time`
- `idx_user_violation_time` ON `(user_id, violation_time)`
- `idx_client_ip` ON `client_ip`
- `idx_detection_service` ON `detection_service`
- `idx_risk_level` ON `risk_level`
- `idx_confidence` ON `confidence`
**外键:**
- `user_id` REFERENCES `user_profile(id)` ON DELETE CASCADE
---
### 11. user_divination_records - 用户解卦记录表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL | 用户ID |
| trace_id | VARCHAR(64) | NOT NULL | 请求追踪ID |
| question | TEXT | NOT NULL | 用户问题 |
| question_type | VARCHAR(50) | NOT NULL | 问题类型 |
| divination_data | LONGTEXT | NOT NULL | 卦象详情JSON |
| deepseek_request | LONGTEXT | NOT NULL | 发送给DeepSeek的请求JSON |
| deepseek_response | LONGTEXT | | DeepSeek响应JSON |
| interpretation_result | LONGTEXT | | 解卦结果文本 |
| api_success | BOOLEAN | NOT NULL, DEFAULT FALSE | API调用是否成功 |
| error_message | TEXT | | 错误信息 |
| api_duration_ms | BIGINT | | API调用耗时(毫秒) |
| phone_number | VARCHAR(20) | | 用户手机号(冗余) |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
**索引:**
- `idx_user_id` ON `user_id`
- `idx_trace_id` ON `trace_id`
- `idx_phone_number` ON `phone_number`
- `idx_created_at` ON `created_at`
- `idx_api_success` ON `api_success`
- `idx_question_type` ON `question_type`
- `idx_user_created` ON `(user_id, created_at)`
---
### 12. user_divination_history - 用户卦象历史同步表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NOT NULL, FK | 用户ID |
| phone_number | VARCHAR(20) | NOT NULL | 用户手机号 |
| local_record_id | BIGINT | | 本地记录ID |
| json_data | LONGTEXT | NOT NULL | 卦象详情JSON |
| ai_result | LONGTEXT | NOT NULL | AI解卦结果 |
| question_type | VARCHAR(50) | NOT NULL | 问题类型 |
| question | TEXT | NOT NULL | 用户问题 |
| timestamp | BIGINT | NOT NULL | 创建时间戳(毫秒) |
| is_active | BOOLEAN | NOT NULL, DEFAULT TRUE | 是否有效 |
| sync_time | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 同步时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
**索引:**
- `idx_user_phone` ON `(user_id, phone_number)`
- `idx_phone_active` ON `(phone_number, is_active)`
- `idx_user_active_time` ON `(user_id, is_active, timestamp)`
- `idx_local_record` ON `local_record_id`
- `idx_sync_time` ON `sync_time`
- `idx_question_type` ON `question_type`
**外键:**
- `user_id` REFERENCES `user_profile(id)`
---
### 13. network_access_logs - 网络访问日志表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | NULL | 用户ID |
| phone_number | VARCHAR(20) | NULL | 用户手机号 |
| client_ip | VARCHAR(45) | NOT NULL | 客户端IP |
| client_port | INT | NULL | 客户端端口 |
| server_ip | VARCHAR(45) | NOT NULL | 服务器IP |
| server_port | INT | NOT NULL | 服务器端口 |
| http_method | VARCHAR(10) | NOT NULL | 请求方法 |
| request_path | VARCHAR(500) | NOT NULL | 请求路径 |
| request_url | VARCHAR(1000) | NOT NULL | 完整请求URL |
| user_agent | VARCHAR(1000) | NULL | User-Agent |
| device_info | TEXT | NULL | 设备信息JSON |
| response_status | INT | NULL | HTTP响应状态码 |
| processing_time_ms | BIGINT | NULL | 处理耗时(毫秒) |
| request_size | BIGINT | NULL | 请求体大小(字节) |
| response_size | BIGINT | NULL | 响应体大小(字节) |
| x_forwarded_for | VARCHAR(500) | NULL | X-Forwarded-For |
| x_real_ip | VARCHAR(45) | NULL | X-Real-IP |
| referer | VARCHAR(1000) | NULL | Referer |
| operation_type | VARCHAR(50) | NULL | 操作类型 |
| operation_result | VARCHAR(20) | NULL | 操作结果 |
| error_message | TEXT | NULL | 错误信息 |
| session_id | VARCHAR(100) | NULL | 会话ID |
| access_time | DATETIME | NOT NULL | 访问时间 |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
**索引:**
- `idx_user_id` ON `user_id`
- `idx_phone_number` ON `phone_number`
- `idx_client_ip` ON `client_ip`
- `idx_access_time` ON `access_time`
- `idx_operation_type` ON `operation_type`
- `idx_operation_result` ON `operation_result`
- `idx_client_ip_access_time` ON `(client_ip, access_time)`
- `idx_user_id_access_time` ON `(user_id, access_time)`
---
### 14. app_version - 应用版本管理表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| version_name | VARCHAR(20) | UNIQUE, NOT NULL | 版本名称(如v1.06) |
| version_code | INT | UNIQUE, NOT NULL | 版本号(如106) |
| min_supported_version | VARCHAR(20) | NOT NULL | 最低支持版本 |
| min_supported_code | INT | NOT NULL | 最低支持版本号 |
| is_force_update | BOOLEAN | NOT NULL, DEFAULT FALSE | 是否强制更新 |
| update_message | TEXT | | 更新提示信息 |
| download_url | VARCHAR(500) | | 下载链接 |
| is_active | BOOLEAN | NOT NULL, DEFAULT TRUE | 是否启用 |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
**索引:**
- `uk_version_name` UNIQUE ON `version_name`
- `uk_version_code` UNIQUE ON `version_code`
- `idx_is_active` ON `is_active`
- `idx_created_at` ON `created_at`
---
## 二、app (Android 客户端本地 Room 数据库)
### 1. divination_record - 解卦记录表
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| question_type | VARCHAR(50) | NOT NULL | 问题类型 |
| question | TEXT | NOT NULL | 用户问题 |
| hexagram_data | TEXT | NOT NULL | 卦象数据JSON |
| ai_result | TEXT | NOT NULL | AI解卦结果 |
| timestamp | BIGINT | NOT NULL | 创建时间戳 |
| is_synced | BOOLEAN | DEFAULT FALSE | 是否已同步到云端 |
| is_deleted | BOOLEAN | DEFAULT FALSE | 是否已删除 |
---
## 三、数据库初始化文件位置
| 文件 | 说明 |
|------|------|
| `login-service/src/main/resources/db/init.sql` | 初始化表结构 |
| `login-service/src/main/resources/db/migration.sql` | 迁移脚本 |
| `login-service/src/main/resources/db/migration/V1_4__Create_sensitive_word_violations_table.sql` | 敏感词表创建 |
| `login-service/src/main/resources/db/migration/V1_5__Enhance_sensitive_word_violations_table.sql` | 敏感词表增强 |
---
## 四、Entity 类位置
| Entity 类 | 表名 | 位置 |
|-----------|------|------|
| UsersEntity | users | `login-service/src/main/kotlin/com/eryao/login/entity/UsersEntity.kt` |
| VerificationCode | verification_codes | `login-service/src/main/kotlin/com/eryao/login/entity/VerificationCode.kt` |
| User | user_profile | `login-service/src/main/kotlin/com/eryao/login/entity/User.kt` |
| UserToken | user_tokens | `login-service/src/main/kotlin/com/eryao/login/entity/UserToken.kt` |
| UserFeedback | user_feedback | `login-service/src/main/kotlin/com/eryao/login/entity/UserFeedback.kt` |
| UserCoin | user_coin | `login-service/src/main/kotlin/com/eryao/login/entity/UserCoin.kt` |
| Notification | notification | `login-service/src/main/kotlin/com/eryao/login/entity/Notification.kt` |
| PaymentRecord | payment_record | `login-service/src/main/kotlin/com/eryao/login/entity/PaymentRecord.kt` |
| PaymentOrder | payment_order | `login-service/src/main/kotlin/com/eryao/login/entity/PaymentOrder.kt` |
| SensitiveWordViolation | sensitive_word_violations | `login-service/src/main/kotlin/com/eryao/login/entity/SensitiveWordViolation.kt` |
| DivinationRecord | user_divination_records | `login-service/src/main/kotlin/com/eryao/login/entity/DivinationRecord.kt` |
| DivinationHistory | user_divination_history | `login-service/src/main/kotlin/com/eryao/login/entity/DivinationRecord.kt` |
| NetworkAccessLog | network_access_logs | `login-service/src/main/kotlin/com/eryao/login/entity/NetworkAccessLog.kt` |
| AppVersion | app_version | `login-service/src/main/kotlin/com/eryao/login/entity/AppVersion.kt` |
| DivinationRecord (Room) | divination_record | `app/src/main/java/com/example/eryaoapp/database/DivinationRecord.kt` |