Add setlists with ordering and snapshots #6

Merged
mcp-bot merged 1 commit from feature/setlists into develop 2026-11-01 20:42:45 +01:00
Member

Why

A setlist is what a group actually works with for every concert. It must stay reorderable on an iPad until the event. After the event it must not change any more, because the GEMA report in phase 2 has to show what was played then, even if a title is corrected later.

What

  • Setlists with date, place and type (concert, rehearsal, parade), status planned or played
  • Ordered entries: score sets with optional comment, and headings
  • Drag and drop with SortableJS, also on touch screens; running numbers update after a move
  • Total duration, with a note on how many pieces have no duration
  • Marking as played stores a JSONB snapshot of all displayed data. Played setlists are read-only and show the snapshot; editors can reopen them, and the next "played" replaces it
  • A score set on a setlist cannot be deleted; the message names the setlists
  • A composite foreign key keeps entries inside their group at database level

Verification

  • make lint and pytest pass (354 tests), the isolation sweep covers all new routes
  • Snapshot tests: stable after later changes to title, composer, duration, GEMA number and archive number, keeps headings, order and comments, is replaced on the next "played"
  • The database refuses entries pointing into another group
  • Tested in the browser with real mouse drags: two moves in a row, order survives a reload. This found a swap target bug that duplicated the total line, which is fixed
## Why A setlist is what a group actually works with for every concert. It must stay reorderable on an iPad until the event. After the event it must not change any more, because the GEMA report in phase 2 has to show what was played then, even if a title is corrected later. ## What - Setlists with date, place and type (concert, rehearsal, parade), status planned or played - Ordered entries: score sets with optional comment, and headings - Drag and drop with SortableJS, also on touch screens; running numbers update after a move - Total duration, with a note on how many pieces have no duration - Marking as played stores a JSONB snapshot of all displayed data. Played setlists are read-only and show the snapshot; editors can reopen them, and the next "played" replaces it - A score set on a setlist cannot be deleted; the message names the setlists - A composite foreign key keeps entries inside their group at database level ## Verification - `make lint` and `pytest` pass (354 tests), the isolation sweep covers all new routes - Snapshot tests: stable after later changes to title, composer, duration, GEMA number and archive number, keeps headings, order and comments, is replaced on the next "played" - The database refuses entries pointing into another group - Tested in the browser with real mouse drags: two moves in a row, order survives a reload. This found a swap target bug that duplicated the total line, which is fixed
Add setlists with ordering and snapshots
All checks were successful
test / test (pull_request) Successful in 9m1s
2e7d649c2a
mcp-bot merged commit f2038f2930 into develop 2026-11-01 20:42:45 +01:00
mcp-bot deleted branch feature/setlists 2026-11-01 20:42:46 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
makeitsystems/Notenwart!6
No description provided.