# 16 用户、档案与内容服务（for AI Agents）

> 关联代码：internal/model/{mp_user,address,organizer_profile,dynamic,notification,complaint,faq}.go 及对应 internal/service/*
> 管理端页面：web/src/views/mp/、organizer-profile/、address/、complaint/、faq/、config/contact-info/
> 小程序页面：pages/user/*、pages/address/*、pages/notifications/、pages/faq/、pages/complaint/、pages/contact/、pages/settings/、pages/disclaimer/、pages/privacy/

====================================================================
1. 功能概述
====================================================================

用户域与内容服务：小程序用户档案与封禁、用户主页与图文动态（社区）、发起人引流档案（OrganizerProfile，多渠道触点）、收货地址（PII 加密）、站内通知、投诉处理、三级 FAQ、联系客服、协议页。

====================================================================
2. 底层逻辑
====================================================================

2.1 小程序用户（MpUser）
- OpenID/UnionID；邀请体系字段（见 14）；drawbox 扩展字段（见 08）；Status 封禁标志（0 正常；封禁后：JWT 每请求回查即时失效 + 资损接口 assertUserActive 拒绝）。
- 公开主页 GET /mp/users/:id：公开资料 + 内联「快捷加粉」（若该用户有 OrganizerProfile，默认展示引流入口）。

2.2 动态（Dynamic/DynamicLike/DynamicComment）
- 独立内容子系统：图文动态（≤9 图）、点赞（唯一索引防重，计数冗余维护）、评论、作者删除。
- 用户主页两 Tab：进行中抽奖（ListUserOngoing）+ 动态流。

2.3 发起人档案（OrganizerProfile）
- 一用户可多档案；承载引流触点：微信号、公众号（二维码+链接）、小程序（AppID+路径+二维码）、群二维码、视频号（三件套）。
- 抽奖可关联档案（OrganizerProfileID）：中奖/详情页弹「发起人引流」弹窗（components/organizer-traffic）。

2.4 地址（Address）
- Name/Phone/Detail 由 GORM 钩子 AES 加解密（env LOTTERY_AES_KEY；未配置明文透传）；订单 AddressSnapshot 同口径。
- 中奖绑定地址与商城收货共用；?from=winner 区分来源。

2.5 通知（Notification）
- 站内通知 biz_type 分流跳转：prize→中奖详情、lucky_prize→幸运结果页、order→订单列表。
- 订阅消息模板（静态配置 wechat.subscribe_msg.*）：prize_won/order_shipped/await_address/signin_reminder/draw_reminder/daily666_result；开奖提醒订阅 POST /mp/notifications/draw-reminder。

2.6 投诉（Complaint）
- 用户提交（?lottery_id=&lottery_title=，6 类理由：high_prize 虚高奖品/fake_prize 虚假奖品/induce_share 诱导分享/fraud 欺诈/prior_violation 历史违规/other）。
- 后台处理：status pending→handled（处理备注）/rejected（驳回）。

2.7 FAQ（三级：FAQModule → FAQCategory → FAQ）
- 模块 code（小写字母数字横线 3-32，如 withdraw/mall/checkin/drawbox）；分类（图≤9）；条目（问题/答案/图≤9）。
- 小程序 pages/faq/index?code=<模块> 按模块定位；提现页等场景有 FAQ 入口。

2.8 内容安全
- 小程序昵称/动态等 UGC 经微信内容安全 msgSecCheck（wechat.miniprogram 配置）。

====================================================================
3. 后台操作
====================================================================

3.1 小程序用户 /mp/users（views/mp/UserList.vue）
- 筛选：搜索用户（昵称/openid/邀请码）。
- 表格列：头像/昵称/openid/手机号/等级/抽奖次数/余额(元)/积分/状态/注册时间/操作。
- 「更多」下拉（跨页联动核心入口）：
  - 抽奖记录/订单/余额/积分/地址/发起人档案/命运盒子/禁用/启用
  - 积分：弹窗（积分详情+流水+手动调整表单）
  - 余额：跳用户余额页带 user_id 预筛选
  - 邀请详情：跳裂变详情页
  - 发起人档案：跳档案页预筛选
  - 地址：跳地址管理预筛选
  - 订单：跳订单页预筛选
  - 命运盒子记录：跳盒子记录页预筛选

3.2 发起人档案 /organizer-profiles（只读）
- 筛选：搜索名称、搜索用户。
- 表格列：名称/用户/微信号/公众号/小程序/视频号/群二维码/操作。
- 行操作：「详情」进详情页（基础信息 + 引流信息全量展示，各类二维码/链接）。档案的创建编辑在小程序端完成。

3.3 地址管理 /addresses
- 筛选：搜索用户、姓名。
- 表格列：用户/姓名/手机号/地址/操作。
- 行操作：「详情」弹窗 + 「删除」（Popconfirm）。

3.4 投诉管理 /complaints（views/complaint/ComplaintList.vue）
- 筛选：状态 pending/handled/rejected。
- 表格列：ID/抽奖/投诉人/类型/理由/描述/状态/操作。
- 「处理」弹窗：展示原因/描述/关联抽奖/投诉人 → 选择已处理/已驳回 + 处理备注。

3.5 FAQ 三页
- 模块 /faq/modules：「新增模块」；表（ID/Code/名称/排序/状态/操作）；行操作：编辑/禁用/删除；CRUD 弹窗字段（code/名称/图标/排序/状态）。
- 分类 /faq/categories：按模块筛选 + 「新增分类」；表（ID/模块/名称/附图/排序/状态/操作）；行操作：编辑/禁用/删除；CRUD 弹窗字段（所属模块/名称/图片≤9/排序/状态）。
- 条目 /faq/items：按模块筛选→按分类筛选（级联）+ 显示已禁用开关 + 「新增 FAQ」；表（ID/模块/分类/问题/答案/附图/排序/状态/操作）；行操作：编辑/禁用/删除；CRUD 弹窗字段（模块/分类/问题/答案/图片≤9/排序/状态）。

3.6 联系客服 /config/contact-info（不在侧边栏菜单，直达）
- 标题/描述/二维码上传。免责说明 /config/disclaimer 与提现规则文案见对应配置页。

3.7 后台操作逻辑备注（隐藏约束，UI 不直接体现）
- FAQ 层级删除约束：模块下有分类时禁止删除模块（需先删分类）；分类下有 FAQ 条目时禁止删除分类（需先删/迁移条目）。删除操作为物理删除（非软删），不可恢复。
- FAQ 禁用与删除区别：禁用仅影响小程序端展示（禁用条目不出现在 FAQ 页），后台仍可见可编辑；删除为物理删除。
- 投诉状态流转：pending→handled（处理，需填备注）或 pending→rejected（驳回）；已处理/已驳回后不可再变更状态。
- 用户封禁即时生效：PUT /mp-users/:id/status 封禁后，JWT 每次请求实时回查 MpUser.Status，token 立即失效；所有资损接口（提现/兑换/领取等）的 assertUserActive 前置校验同步拒绝。解封后即时恢复。
- 发起人档案后台只读：后台不可创建/编辑档案，所有创建和修改入口在小程序端完成。

====================================================================
4. 小程序端操作
====================================================================

- pages/user/home/index（?id=）：用户主页——抽奖/动态两 Tab；动态点赞（乐观更新）/评论/删除；本人有编辑资料/发抽奖/发动态入口；快捷加粉弹窗（organizer_profile）。
- pages/user/edit/index：编辑资料（头像上传/昵称/签名/位置）。
- pages/user/post-edit/index：发布动态（文字+≤9 图上传）。
- pages/address/index + edit：地址列表/新增编辑（?from=winner）。
- pages/notifications/index：通知列表，biz_type 分流跳转。
- pages/complaint/index：提交投诉。
- pages/faq/index（?code=）、pages/contact/index、pages/settings/index（版本/清缓存/协议入口）、pages/disclaimer/index、pages/privacy/index/index。

====================================================================
5. API 速查
====================================================================

小程序端（/api/mp）：
GET|PUT /api/mp/user/me；GET /api/mp/users/:id（公开主页）
GET|POST|PUT|DELETE /api/mp/address(/:id)
GET|PUT /api/mp/winner/:id/address            中奖绑地址（见 03）
POST|GET /api/mp/dynamics；DELETE /api/mp/dynamics/:id
POST|DELETE /api/mp/dynamics/:id/like；GET|POST /api/mp/dynamics/:id/comments；DELETE comments/:cid
GET|POST|PUT|DELETE /api/mp/organizer-profiles(/:id)     我的发起人档案 CRUD
GET  /api/mp/notifications(/unread-count)；POST /api/mp/notifications/:id/read
POST /api/mp/notifications/draw-reminder       订阅开奖提醒
POST /api/mp/complaint；GET /api/mp/complaints/mine
GET  /api/mp/faqs；GET /api/mp/faqs/modules/:code
GET  /api/mp/config/contact-info|disclaimer    客服/免责配置

管理端（/api/admin）：
GET  /api/admin/mp-users(/:id)；PUT /api/admin/mp-users/:id/status   封禁/解封
GET  /api/admin/organizer-profiles(/:id)                            只读档案
GET  /api/admin/addresses(/:id)；DELETE /api/admin/addresses/:id
GET  /api/admin/complaints(/:id)；PUT /api/admin/complaints/:id/status
FAQ 三级 CRUD（/api/admin/faqs、/faq/modules、/faq/categories）
GET|PUT /api/admin/config/contact-info

====================================================================
6. 注意事项
====================================================================

- 封禁是全端即时生效（JWT 回查 + 资损接口 assertUserActive），封禁后该用户 token 立即不可用——测试时准备两个账号。
- 地址明文只在加密钩子解开后的运行时可见；后台地址页看到的是解密后数据（配置了 AES 时）；LOTTERY_AES_KEY 换钥匙会导致旧密文不可解，属高危运维动作。
- 发起人档案后台只读：修改入口在小程序「我的-发起人档案」。
- 动态/评价等 UGC 走微信内容安全检测，msgSecCheck 未配置或失败时的行为以代码为准（配置不完整影响发布链路）。
- 通知跳转依赖 biz_type 枚举，新增业务通知时同步小程序通知页路由表。
