Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat(pay): 添加支付API基础结构 feat(miniapp): 创建支付测试小程序页面与配置 feat(wechatpay): 配置微信支付参数与证书 fix(guild): 修复成员列表查询条件 docs: 更新代码规范文档与需求文档 style: 统一前后端枚举显示与注释格式 refactor(admin): 重构用户奖励发放接口参数处理 test(title): 添加称号效果参数验证测试
4.2 KiB
4.2 KiB
现状与缺口
- 审核未落地:
internal/service/guild/join.go:13-48加入逻辑固定写JoinStatus=2(同意),未按join_mode=1走待审流程;接口仅JoinGuild/LeaveGuild,无审批。 - 管理端缺踢人:仅成员列表
internal/api/admin/guild_members.go:42-73;前端成员页无操作列web/admin/src/views/guild/members/index.vue:30-35。 - 角色字段未赋权:虽有
owner/admin/member(internal/repository/mysql/model/guild_members.gen.go:19-23),但未做权限绑定与校验。
目标与范围
- 增加「加入申请与审核」能力:支持待审、通过、拒绝;仅当
join_mode=1生效。 - 增加「成员剔除」能力:管理端支持踢人,并记录操作日志。
- 基础优化:完善角色权限(会长/官员)、分页/检索一致性、接口与 Swagger 描述对齐。
后端改造
- 模型与数据流
- 新增表
guild_join_applications(推荐方案):字段id/guild_id/user_id/apply_time/status(0待审,1通过,2拒绝)/reviewer_id/review_time/remark。 JoinGuild改造:- 当
join_mode=1时,仅写一条applications(pending),不立即写guild_members;返回“申请已提交”。 - 当
join_mode=2时,维持现状直接入会(JoinStatus=2)。 - 为兼容保留 24h 离开限制与重复加入校验。
- 当
- 审批动作:
- 通过:写
guild_members(status=1, role=member, start_time=now, join_status=2),并更新申请为approved;拒绝:仅更新申请为rejected。
- 通过:写
- 踢人动作:新增服务
KickMember(ctx, guildID, userID),仅将成员status=2并回写时间;禁止踢会长自身,需先转移会长。
- 新增表
- 服务接口(
internal/service/guild/guild.go)- 新增:
ListApplications/ApproveApplication/RejectApplication/KickMember方法。
- 新增:
- 控制器与路由(Admin)
GET /api/admin/guilds/:guild_id/applications列表(分页、按状态过滤)。POST /api/admin/guilds/:guild_id/applications/:id/approve、POST .../reject。DELETE /api/admin/guilds/:guild_id/members/:user_id踢人。- 接口均校验:
IsSuper==1(现行规则),并记录操作日志(log_operation)。
- 控制器与路由(App,可选)
POST /api/app/guilds/:guild_id/applications提交申请;GET /api/app/guilds/:guild_id/applications/:id查询状态。
- 查询一致性
- 成员列表
internal/service/guild/members_list.go:9-29保持status=1过滤;无需受待审数据影响。
- 成员列表
管理端前端改造
- API 封装(
web/admin/src/api/guild.ts)- 增加
fetchGetGuildApplications、approveGuildApplication、rejectGuildApplication、kickGuildMember。
- 增加
- 成员页(
web/admin/src/views/guild/members/index.vue)- 增加操作列与「踢出」按钮;调用
kickGuildMember,成功后刷新当前页。
- 增加操作列与「踢出」按钮;调用
- 新增「申请审核」页
- 列表展示:用户ID、申请时间、状态;提供「通过/拒绝」操作;支持按状态筛选与分页。
- 路由与菜单
- 在
web/admin/src/router/modules/guild.ts增加“工会申请审核”菜单。
- 在
权限与审计
- 权限:管理端暂按
IsSuper==1;后续可拓展为“会长/官员”在 App 端可审与踢人(基于GuildMembers.Role校验)。 - 审计:所有审批与踢人动作写入
log_operation,包含 guild_id/user_id/reviewer_id/动作/结果。
验收标准
- 加入审核:当
join_mode=1时,提交申请后在管理端可见;可通过/拒绝;通过后出现在成员列表。 - 成员剔除:管理端成员页出现「踢出」操作,成功后该成员不再出现在成员列表;禁止踢会长。
- 权限:非超管无法访问管理端相关接口;错误提示与状态码规范。
- 文档:Swagger 增补新端点与模型;接口参数与响应示例完整。
风险与兼容
- 数据迁移:新增
guild_join_applications表(DDL 与 gorm/gen 代码生成);对现有guild_members无破坏性更改。 - 并发与一致性:审批通过与重复申请的幂等处理;用户离开后重新申请的限制延续。
- 回滚策略:所有写操作事务化;失败回滚不影响既有功能。
请确认以上方案,确认后我将分步骤提交后端与前端改造,并补齐测试与文档。