Skip to content

v1.4.7

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 09 May 10:09
· 16 commits to main since this release

What's Changed

自 v1.4.6 以來,這個版本帶入叫號鎖定機制的完整實作,包含自動解除、位置編號解除、以及相關修正與測試補齊。

叫號鎖定機制(Called-but-not-released Lock)

  • 管理員叫號後,被叫號的使用者進入「已叫號待解除」狀態,無法重新加入隊列,直到管理員執行 /admin/release 解除。
  • 此機制在 LINE、Telegram、Discord 三個平台同步生效。

Admin Serve 自動解除前一位鎖定

  • 當管理員再次執行 /admin/serve(或指定叫號),若上一次叫的人尚未被 release,系統會自動靜默 release 前一位,並在回覆訊息中提示。
  • 使用 in-memory _admin_serve_sessions dict 追蹤每位 admin 的叫號配對,多 admin 並存時互不干擾。
  • 自動解除無條件發生——即使目前隊列已空(叫號本身失敗),前一位的鎖定仍會被解除。

/admin/release 改為位置編號操作

  • /admin/release [位置編號](例如 /admin/release A-1)取代原本的 user_id 參數。
  • 只需該位置編號有對應的登記紀錄(profile)即可執行;不需要 queue entry 存在或已 served——若無 queue entry,仍視為成功(空操作)。
  • 叫號完成後的快捷按鈕自動帶入被叫號者的位置編號,管理員可一鍵點擊解除。

/status 修正

  • 修正叫號鎖定中的使用者無法查看排隊狀態的問題,現在 /status 在任何狀態下都可正常顯示整體排隊人數。

測試補齊

  • core/database.py:find_user_profile_by_location、find_called_user_by_location、force_release_queue 三個方法補上單元測試。
  • services/admin_flow.py:release_user() 成功、位置不存在、無 queue entry 三種情境。
  • services/serve_flow.py:location、auto_released_display_name 欄位及 admin_user_id session 追蹤。
  • services/user_flow.py:called 狀態使用者查詢 /status 的行為驗證。
  • core/queue_manager.py:TestAdminServeSessionsAutoRelease 類別,覆蓋 session 機制的 9 種情境。
  • LINE / Telegram handler:/admin/release 位置不存在時的錯誤回覆。

Full Changelog: woody0509/queue-linebot@v1.4.6...v1.4.7