organizations
organizations

Cancel Classes

Call off classes: a whole school day, one section's day, or one class.

WHY THIS EXISTS. There was no way to say "no class today". A coordinator's only tools were deleting the series, which is permanent and loses the timetable, or typing an announcement, which tells the students and tells the PRODUCT nothing. TESI suspended classes on 2026-09-15 and the announcement was the only trace: the schedule still listed thirteen sections, thirteen rooms sat waiting, the prescale evaluator still raised the floor for them, and a student who opened the app saw a normal class day.

HOW IT WORKS, and why there is no new table. Setting the room's status to "cancelled" is enough on its own, because of two things that were already true:

  • every "is this room live" query filters status.in_(("scheduled", "active")), so a cancelled room drops out of all of them at once — including the reminder sweep, which is requirement one;
  • _existing_room() in group_session_service matches on (org, group, instant) and does NOT look at status, so the generator sees the cancelled room, considers the occurrence done, and will not build another one over the top.

THE HORIZON, and what used to be out of reach. Rooms exist only inside the generator's 8-day window (LOOK_AHEAD_DAYS), so for a while this could only mark what had already been built — a class further out, or any class the coverage calendar drew from the timetable alone, had no row to set a status on and so quietly could not be called off at all. occurrence_at closes that: the room is built in order to be cancelled. It is the same move bind_occurrence already makes when a teacher plans a future class, and it is safe for the same reason cancelling works at all — _existing_room() ignores status, so the generator will not lay a live room over the top.

Notification is the teacher's, by Nancy's call: this says nothing to anyone. It removes the reminder and puts a note on the door.

post/organizations/{org_id}/classes/cancel

Path parameters

org_idstring required

Headers

authorizationstring nullable

Request body

object required

Response

Successful Response

{"stackTrail":"paths:/organizations/{org_id}/classes/cancel:post:responses:200:content:application/json:schema","oasType":"schema","type":"unknown"}

Changes

Changed in 1 of the 25 revisions of this API.1

Of the 25 revisions, 1 has no diff computed.