Files

103 lines
6.1 KiB
Markdown
Raw Permalink Normal View History

# Project Context
## Purpose
本仓库实现"微信小程序通信记录管理系统":小程序端采集/展示对话与用户信息;后端提供登录、会话记录的增删改查、文件上传与管理查询能力;数据存储在 MariaDB/MySQL。后台管理网站提供管理员操作界面用于系统配置、数据管理和监控。
## Repository Layout (Source of Truth)
- 小程序端:`CommunicationRecords/`
- 页面:`pages/chat`(聊天与会话列表)、`pages/logs`(登录/注册/隐私协议)等
- 公共:`utils/config.js`(环境与 API 根地址)
- 后端:`WxCheckMvc/`ASP.NET Core 8MVC + Web API Controller
- API Controllers`Controllers/LoginController.cs``Controllers/CheckController.cs``Controllers/AdminController.cs`
- 配置:`appsettings.json`
- 后台管理网站:`admin-web/`Vue 3.x + Element Plus + Vite
- 页面:登录页、会话记录管理页、用户管理页等
- 路由:`src/router/index.js`vue-router配置
- 组件:`src/components/`(模块化组件)
- 状态管理:`src/store/`(深色/浅色模式状态)
- 样式:`src/styles/`(响应式样式、主题样式)
- 数据库:`wx_xcx_check.sql`(根目录)与 `WxCheckMvc/wx_xcx_check.sql`(均为 MariaDB/MySQL 导出)
## Tech Stack
- Client:
- 微信小程序JavaScript + WXML/WXSS依赖 `WechatSI` 插件(语音识别/录音管理器)
- 后台管理网站Vue 3.x + Element Plus + Vite
- 路由管理vue-router
- 状态管理Pinia用于深色/浅色模式切换)
- HTTP客户端axios
- 构建工具Vite
- 开发环境Node.js
- Server: ASP.NET Core 8`ControllersWithViews` + API Controller数据库访问使用 `MySql.Data`
- DB: MariaDB/MySQLschema: `wx_xcx_check`
- Cache/Stream: Redis通过 `CSRedis`;用于 Redis Stream 推送与读取消息)
- External APIs:
- 微信:`https://api.weixin.qq.com/sns/jscode2session`(用 `code` 换取 `openid`
- 高德地图:逆地理编码(经纬度 → 地址)
## High-Level Architecture
1) 小程序端通过 `wx.login()` 获取 `code`,调用后端登录接口换取用户信息与 Token当前 token 主要用于前端保存/展示)。
2) 小程序端对话发送/修改/删除通过后端 API 写入数据库(表 `xcx_conversation`)。
3) 后端在新增会话时AddConversation会将会话与用户信息写入 Redis Streamkey: `xcx_msg`group: `xcx_group`),用于异步消费(例如外部系统订阅)。
4) 后端管理查询AdminController提供查询用户与会话的接口。
5) 后台管理网站:
- 使用 Vue 3.x + Element Plus + Vite 构建
- 通过 vue-router 管理多页面路由
- 使用 Pinia 管理深色/浅色模式状态
- 通过 axios 调用后端 AdminController 提供的 API
- 响应式设计:优先适配手机宽度,电脑其次
- 前端验证:固定账号密码均为 Admin
- 模块化设计:所有页面和组件采用模块化思路
## Core Domain Model
- 用户(`xcx_users`
- `UserKey`:用户唯一标识(实际为微信 `openid`
- 可补全资料:`UserName``WeChatName``PhoneNumber``AvatarUrl``Department`
- 状态:`IsDisabled`(禁用)
- 会话记录(`xcx_conversation`
- `Guid`:会话唯一标识(由后端生成或前端传入)
- `MessageType`1 公有 / 2 私有
- `IsDeleted`:软删除标记
- `RecordTimeUTCStamp`:用于排序与分页
## API Surface (Entry Points)
后端 API 统一路由前缀:`/api/{Controller}/{Action}`
- 登录与用户:`/api/Login/Login``/api/Login/Register`
- 会话与文件:`/api/Check/AddConversation``GetConversations``GetConversationsByPage``UpdateConversation``DeleteConversation``GetConversationByGuid``UploadFile``CheckAddress``ReadMessageFromRedis`
- 管理查询:`/api/Admin/QueryUsers``/api/Admin/QueryConversations`
## Business Rules (High Impact)
- 登录
- 使用 `code` 向微信换取 `openid`,以 `openid` 作为 `UserKey`
-`xcx_users` 中不存在该 `UserKey`,后端会插入一条“未完善资料”的用户记录(仅含 `UserKey/FirstLoginTime` 等)。
- 注册/资料完善
- 仅允许更新已存在的用户(若不存在返回 NotFound
- `PhoneNumber` 会被清洗为纯数字并校验为 `^1\d{10}$`
- `UserName` 会去除标点/符号/空白后校验不为空。
- 会话
- 删除为软删除(`IsDeleted = 1`)。
- 查询默认过滤 `IsDeleted = 0`
- 分页接口限制 `PageSize` 1..100。
## Known Limitations / Risks
- 鉴权“已配置但未启用”:后端配置了 JWT Bearer但当前请求管线未启用 `UseAuthentication()`,且控制器/Action 未使用 `[Authorize]`;因此 API 当前等同于“无强制鉴权”。
- 配置敏感信息明文:`WxCheckMvc/appsettings.json` 中包含数据库密码、微信 AppSecret、JWT SecretKey 等,存在泄露风险。
- 环境选择被强制:小程序端 `CommunicationRecords/utils/config.js` 固定返回 `release`,导致无法按 `envVersion` 自动切换。
- 小程序存在硬编码域名:部分页面直接写死 `https://wx-xcx-check.blv-oa.com:4433`,未统一走 `config.baseUrl`
- Redis 连接固定为 `127.0.0.1:6800` 且无密码(见 `CSRedisCacheHelper`),生产部署需额外约束网络与权限。
- 文件上传缺少类型/大小白名单:`UploadFile` 仅校验目录名字符集,未对扩展名、内容类型、大小做进一步限制。
## Conventions
- C#PascalCase类型/方法),配置键区分大小写但项目内存在 `JwT`/`JWT` 混用历史;以 `appsettings.json``JwT:*` 为准。
- JScamelCase小程序请求优先使用 `config.baseUrl`
- Vue 3.x
- 组件命名PascalCase`ConversationList.vue`
- 变量/方法camelCase
- 常量UPPER_SNAKE_CASE
- 使用 Composition API 和 `<script setup>` 语法
- 组件模块化:每个组件职责单一,可复用
- 样式:
- 使用 CSS Modules 或 Scoped CSS
- 响应式设计:优先适配手机宽度(<768px其次适配桌面
- 深色/浅色模式:使用 Element Plus 的主题切换功能