Skip to content

Add forward-planned session scheduling #1112

Description

@Tim020

Summary

DigiScript currently creates a ShowSession the instant "Start" is pressed. This feature adds the ability to schedule sessions ahead of time (with a date, time, and script revision), so that upcoming performances exist as first-class objects before they go live. Sessions can then be prepared (casting assigned, mics reviewed) before show day. The existing "Start Ad-hoc Session" path is preserved.

Part 1 of 3 for issue #792. Must be completed before #1113 (casting matrix) and #1114 (mic re-runs).

Note: Performance categorisation (Preview, Press Night, etc.) is handled via the existing user-defined SessionTag system — no new session_type field is needed. The "Schedule Session" modal includes a tag picker so tags can be assigned at creation time.


Backend changes

ShowSession model (server/models/session.py):

  • Add scheduled_date_time: Mapped[datetime | None] — when set and start_date_time is null, the session is in "scheduled" state

Alembic migration: alembic revision --autogenerate -m "add_scheduled_session_fields" — adds scheduled_date_time column to showsession.

Schema (server/schemas/schemas.py): add scheduled_date_time to ShowSessionSchema.

New/updated controllers (server/controllers/api/show/session/):

Method Path Role Description
POST /api/v1/show/sessions/schedule EXECUTE Create a scheduled session. Body: {scheduled_date_time, tag_ids, script_revision_id}. start_date_time left null. tag_ids assigns existing SessionTags at creation time.
PATCH /api/v1/show/sessions/{id} EXECUTE Update scheduled_date_time, script_revision_id, or tags. Returns 409 if session already started.
DELETE /api/v1/show/sessions/{id} EXECUTE Delete a scheduled session. Returns 409 if already started.

Update SessionStartController (POST /show/sessions/start):

  • Accept optional show_session_id in request body
  • If present: find that ShowSession, set start_date_time, client_internal_id, user_id (no new row created)
  • If absent: existing ad-hoc behaviour unchanged

Frontend changes (client-v3/)

ConfigSessions.vue — significant update:

  • Add "+ Schedule Session" button → ScheduleSessionModal.vue
  • Keep "Start Ad-hoc Session" button (existing flow)
  • Update table columns: Date · Time | Tags | Revision | Status | Actions
  • Status badges: Scheduled (blue) / Next Up (green) / In Progress (green) / Complete (grey)
  • Per-row actions: [Edit] [Delete] [Start] for scheduled; [Stop] for live; [View Log] for complete

New ScheduleSessionModal.vue (components/show/config/sessions/):

  • Fields: datetime-local picker, tags multi-select (from existing SessionTags), script revision select
  • Calls POST /api/v1/show/sessions/schedule

StartSessionConfirmModal.vue — extend to accept show_session_id for starting a pre-scheduled session; show session date/time + tags in header.

stores/show.ts additions:

  • New actions: scheduleSession(data), updateScheduledSession(id, data), deleteScheduledSession(id)
  • New getter: scheduledSessions — sessions where start_date_time is null, sorted by scheduled_date_time

src/types/api/session.ts: add scheduled_date_time: string | null to ShowSession.


E2E tests

Update client-v3/e2e/tests/12-show-config-sessions.spec.ts:

  • Schedule a session → verify "Scheduled" row appears
  • Edit → verify table updates
  • Delete → verify row removed
  • Start scheduled session → confirm modal → "In Progress" status

Verification

  • pytest — all existing tests pass + new tests for schedule/edit/delete/start-scheduled endpoints
  • npm run typecheck + npm run lint in client-v3/
  • npm run test:e2e — full suite

Metadata

Metadata

Assignees

No one assigned

    Labels

    claudeIssues created by Claude

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions