Skip to content

fix: 調課後重新發布課表,補課那一節接到新課表;發布 v1.4.18 - #83

Merged
begin0808 merged 2 commits into
mainfrom
fix/relink-swaps-on-publish
Nov 11, 2026
Merged

begin0808 merged 2 commits into
mainfrom
fix/relink-swaps-on-publish

Conversation

@begin0808

Copy link
Copy Markdown
Owner

摘要

LINE 社群組長回報:週四第五節和週三第六節對調後,週課表只有週四那格變紅,週三補課那格變回原本的課。v1.4.17 以為是補課在別週,其實是程式錯誤:調課之後重新發布課表,補課那一節就對不上了。

原因

調課記下補課那一節時記的是「課表的哪一格」(Substitution.swap_entry_id)。發布新課表時新課表每一格都是新的一列、舊課表封存,補課那一節還指著舊課表的格子。結果:

  • 班級、教師的週課表、全校教師週總表、巡堂表、即時概況都畫不出補課那一節(只看已發布課表的格子);
  • 調課清單以為那一節還沒被拿去調(_taken_slots 比對格子編號),同一節可能再換給別人。

請假那一節用「配課 + 節次」記,不受影響,所以只有一半壞掉。

修改

  • services/swap_relink.py:發布時把這學期的調課接到新課表「同一門課(配課)、同一天、涵蓋那一節」的格子。新課表把那堂課搬走、接不上的不猜,維持原樣。
  • 發布 API 回傳 swap_unlinked(今天以後、仍有效、接不上的調課筆數),「版本與發布」頁提醒組長到「調代課處理」撤回重排。
  • alembic 0020_relink_swaps:只改資料、不改資料表,升級時用同一套規則把既有調課接回目前已發布的課表(結構升級流程會先自動備份)。
  • 手冊「版本與發布」、功能總覽、CHANGELOG、README、升級說明、路線圖改為 v1.4.18。

測試

  • 後端 783 passed(ruff、mypy 無誤)。新增 test_swap_relink_v1418.py 4 項:重新發布後補課那格照常顯示(班級與教師週課表)、同一節不會再被拿去調、那堂課被搬走時回報筆數、升級腳本修正既有資料且重跑不會重複改。拿掉修正時前兩項會失敗。
  • 升級腳本在 PostgreSQL 上實測:在 upg14(正式 v1.4.17)做出組長的情況後,於交易中執行 relink,2 筆接上、重跑 0 筆,再退回交易。
  • 前端 73 passed,lint、vue-tsc 無誤。端對端 61 passed(dev 映像,啟動時先自動備份再執行 0020)。

🤖 Generated with Claude Code

begin0808 and others added 2 commits November 11, 2026 20:38
組長回報:調課後又改課表重新發布,週課表只有請假那一格變紅,補課那格變回原本的課。
調課記的是「舊課表的哪一格」,新課表每一格都是新的,於是週課表、教師週總表、巡堂表、
即時概況都畫不出補課那一節,調課清單也以為那一節還能再拿去調(可能重複調課)。

- 發布時把這學期的調課接到新課表「同一門課、同一天、涵蓋那一節」的格子(swap_relink)
- 接不上的(那堂課被搬走)發布後回報筆數 swap_unlinked,前端提醒組長撤回重排
- alembic 0020_relink_swaps:升級時用同一套規則修正既有資料,只改資料不改資料表

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@begin0808
begin0808 merged commit 9759086 into main Nov 11, 2026
6 checks 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.

1 participant