Events
Events
使用活动工作台、公开市场和免费报名能力
HackerStart 内置 Events 模块,用于构建活动型 SaaS 或社区运营产品。当前版本覆盖活动创建、发布、公开发现、免费报名和个人报名聚合。
已有页面
| 页面 | 说明 |
|---|---|
/workspace/events | 工作区活动列表,面向 organizer 和 operator |
/workspace/events/new | 多步骤活动创建向导,使用服务端 draft 保存进度 |
/workspace/events/$eventId | 工作区活动详情,按权限显示管理视图或参与者视图 |
/explore | 公开活动市场,未登录用户也可以浏览 |
/explore/$eventSlug | 公开活动详情和免费票报名入口 |
/my-events | 当前用户的跨工作区活动报名聚合 |
角色和权限
Events 复用工作区 membership,但把协作者和公开活动参与者分开处理:
collaborator是真正的工作区成员,可以进入工作区内部页面。event_attendee是公开活动报名产生的轻量 membership,不会进入成员管理列表,也不会获得工作区协作权限。- Workspace owner/admin 默认可以创建活动。
- 普通成员需要显式的
event_organizer授权才能创建活动。 - 编辑、发布、取消和查看报名列表仍绑定到具体 Event 的 organizer/operator 关系。
公开报名会创建 membership_kind='event_attendee',但 tenant resolver 和工作区内部查询默认只接受 membership_kind='collaborator'。这可以防止公开活动参与者进入组织者的工作区内部页面。
活动模型
Events 使用三层结构:
| 模型 | 说明 |
|---|---|
| Event | 活动本体,包含标题、slug、时间、地点、可见性和状态 |
| Ticket Type | 票种目录,包含名称、价格、数量和售卖窗口 |
| Registration | 用户和活动之间的参与关系 |
| Ticket | 入场凭证,当前用于免费票自动签发和 check-in 状态 |
Event 的核心状态是:
draft:草稿,只在工作区内部可见。published:已发布,可根据visibility出现在工作区或公开市场。cancelled:已取消。公开活动旧链接会显示取消提示,但不会出现在/explore列表。
Event 的可见性是:
workspace:只面向工作区协作者。public:可以进入/explore公开市场。
创建和发布活动
组织者从 /workspace/events/new 创建活动。向导会把 draft 保存在服务端,因此刷新页面或离开后可以继续编辑。
发布前至少需要:
- 标题
- 开始和结束时间
- 至少一个 Ticket Type
发布后,visibility='public' 的活动会出现在 /explore;visibility='workspace' 的活动只保留在工作区内。
公开发现和报名
/explore 使用独立的 public read layer,不复用工作区内部查询。发现列表只返回:
status='published'visibility='public'- 未结束的活动,除非用户选择查看 past
公开页面支持:
- Featured 活动,按报名数和开始时间排序
- 分类筛选
- upcoming / past 筛选
- 标题和摘要关键词搜索
登录用户可以在 /explore/$eventSlug 报名免费 Ticket Type。未登录用户会被引导到登录页,登录后回到原活动页面。
当前限制
- paid Ticket Type 可以展示,但付费报名还没有交付。
- QR code、转票、waiting list、多票购买还没有交付。
- 公开 organizer profile、channel、活动更新通知和 analytics 还没有交付。
- 紧急治理取消还没有交付;当前取消活动需要具备该 Event 的 organizer 权限。
相关文件
| 文件 | 说明 |
|---|---|
src/events/server.ts | 工作区 Events Server Functions |
src/events/public-server.ts | 公开发现 Server Functions |
src/events/public-registration-server.ts | 公开报名和 /my-events Server Functions |
src/db/queries/events.ts | 工作区 Events 查询和报名事务 |
src/db/queries/events-public.ts | 公开 Events 查询 |
src/routes/_authenticated/_workspace/workspace.events.*.tsx | 工作区 Events 路由 |
src/routes/{-$locale}/explore/* | 公开 Explore 路由 |
src/routes/_authenticated/my-events.tsx | 我的活动页面 |