Skip to content

Conversation

@DuckyProject
Copy link
Contributor

概述

本 PR 完成公告系统 MVP(管理端 + 用户端),并解决了 ent 代码生成导致的 ent <-> internal/service 循环依赖,使后端可正常 go generate / go test

主要功能

后端

  • 新增公告与已读记录数据结构(Ent schema + migration)。
  • 管理端 API:公告 CRUD、分页列表、按条件筛选/搜索、查看用户已读状态(含 eligible 判定)。
  • 用户端 API:公告列表(支持仅未读)、标记已读。
  • Targeting 规则保持简单且与计划一致:any_of(OR) / all_of(AND),条件类型:
    • subscription:operator=in,按 group_ids 匹配当前有效订阅
    • balance:operator=gt/gte/lt/lte/eq,按 value 比较

前端

  • 新增管理端公告页面:列表/搜索/筛选、创建/编辑/删除、Targeting 编辑器、Read status 弹窗(分页 + 搜索)。
  • 新增用户端公告页面:列表、仅未读、标记已读。
  • API/types/i18n/sidebar/router 已接入公告入口。

关键实现细节

1) 修复 ent/service 循环依赖

  • 新增 backend/internal/domain:承载 Ent schema 需要引用的常量与公告 targeting 类型/逻辑(不依赖 ent)。
  • backend/ent/schema/*internal/service 改为引用 internal/domain(彻底消除 ent -> service)。
  • backend/internal/service/domain_constants.go 改为 re-export internal/domain 常量,最大限度减少改动面。

2) 生成代码更新

  • Ent 生成文件已更新/新增(announcement/announcementread 等)。
  • Wire 注入图已更新,接入 Announcement repo/service/handler。

测试

  • cd backend && go test ./...

备注

  • Targeting 仍坚持 MVP 约束:只支持 OR-of-AND(any_of/all_of),不引入 NOT/嵌套表达式。

Implements announcements end-to-end (admin CRUD + read status, user list + mark read) with OR-of-AND targeting. Also breaks the ent<->service import cycle by moving schema-facing constants/targeting into a new domain package.
@DuckyProject
Copy link
Contributor Author

更改需要深度测试

@Wei-Shaw Wei-Shaw merged commit d3062b2 into Wei-Shaw:main Feb 2, 2026
4 checks passed
Wei-Shaw added a commit that referenced this pull request Feb 2, 2026
…-upstream

feat(announcements): admin/user announcement system
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants