Skip to content

feat: 支持活动报名与签到接口 - #986

Merged
HelloWorldZTR merged 2 commits into
Yuanpei-Intelligence:developfrom
PolarisTan:feat/freshman-journey-signup-checkin
Aug 16, 2026
Merged

feat: 支持活动报名与签到接口#986
HelloWorldZTR merged 2 commits into
Yuanpei-Intelligence:developfrom
PolarisTan:feat/freshman-journey-signup-checkin

Conversation

@PolarisTan

Copy link
Copy Markdown
Contributor

背景

需求池中的“新生之旅报名与签到”需要让新生之旅系列讲座和太舞徒步分别支持报名、取消报名、现场扫码签到,并保留参与记录。

本 PR 实现通用活动能力;正式活动的时间、地点、人数和介绍继续由后台活动数据配置,不在代码中写死。

主要修改

  • 活动详情接口返回当前个人的报名/签到状态。
  • 新增报名和取消报名接口,复用现有活动业务逻辑。
  • 对容量、抽签、内部活动、账号权限、活动状态和重复请求进行校验。
  • 完善签到接口校验,无需签到或不符合签到条件的活动会返回明确错误。
  • 统一活动 API 的错误响应结构,便于小程序稳定展示错误信息。
  • 补充报名、取消报名、并发容量、权限和签到状态转换测试。

影响

  • 小程序可基于同一套接口展示活动详情、报名状态并完成扫码签到。
  • 两项新生之旅活动可以在后台分别创建,自动形成两个独立活动页。
  • 没有新增 migration,也没有写入任何正式活动数据。

验证

  • Django 活动与签到相关测试:38 项通过。
  • Django 全量测试:241 项通过。
  • git diff --check 通过。

新增活动详情中的个人参与状态、报名与取消报名接口,并统一活动 API 错误结构。完善签到校验与活动业务函数复用,补充并发、权限、容量和状态转换测试。
@PolarisTan
PolarisTan marked this pull request as ready for review August 14, 2026 16:27

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b87c16117

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread api/activity/views.py Outdated
Comment thread api/activity/checkin.py Outdated
@HelloWorldZTR

HelloWorldZTR commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

整体没啥问题,但是还有几个小问题可能需要你同时修改一下

  • 上面codex说的原子锁和顺序可以顺便优化一下,不是很麻烦
  • 现在活动只有开始前一个小时才能生成签到码,并且这个逻辑很冗余,需要麻烦你同时去掉它。

控制“活动开始前一小时才生成/显示签到码”的核心代码在:

app/activity_utils.py:323

关键判断是第 334 行:

return now >= activity.start - timedelta(hours=1)

调用链如下:

另外,“扫码后是否允许签到”还有两处独立的一小时判断,这两个是合理的。

我的理解是码可以提前任意时间生成,但是签到不允许提前一小时签到。

允许签到码提前生成,同时保留开始前一小时的实际签到限制。将报名账户状态和签到活动状态的校验移入事务锁内。
@PolarisTan

Copy link
Copy Markdown
Contributor Author

整体没啥问题,但是还有几个小问题可能需要你同时修改一下

  • 上面codex说的原子锁和顺序可以顺便优化一下,不是很麻烦
  • 现在活动只有开始前一个小时才能生成签到码,并且这个逻辑很冗余,需要麻烦你同时去掉它。

控制“活动开始前一小时才生成/显示签到码”的核心代码在:

app/activity_utils.py:323

关键判断是第 334 行:

return now >= activity.start - timedelta(hours=1)

调用链如下:

另外,“扫码后是否允许签到”还有两处独立的一小时判断,这两个是合理的。

我的理解是码可以提前任意时间生成,但是签到不允许提前一小时签到。

已按意见修改:签到码现在可以提前生成,实际签到仍限制在活动开始前一小时内;同时调整了报名和签到的并发校验。相关测试均已通过,麻烦再帮忙审核一下,谢谢!

@HelloWorldZTR
HelloWorldZTR merged commit 19d415a into Yuanpei-Intelligence:develop Aug 16, 2026
1 check passed
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