= UC0003 - RSVP or Announce Absence for Activity Session = '''Initiating actor:''' Member A Member views upcoming activity sessions, submits an RSVP, or announces an absence. The scenario uses Nikola Spasovski as the logged-in member. == Scenario == 1. The Member opens the list of upcoming activity sessions. 2. The application lists upcoming sessions with the member's current RSVP and attendance status. {{{#!sql SELECT a.at_name, a.as_start_time, a.as_location, COALESCE(p.rsvp_status, 'no_response') AS rsvp_status, p.rsvp_at, COALESCE(p.attendance_status, 'not_checked') AS attendance_status FROM activity_sessions a LEFT JOIN participation p ON p.at_name = a.at_name AND p.as_start_time = a.as_start_time AND p.as_location = a.as_location AND p.student_index = 230014 WHERE a.as_start_time >= CURRENT_TIMESTAMP ORDER BY a.as_start_time, a.at_name; }}} 3. The Member chooses the IT workshop and marks that they are going. 4. The application stores the RSVP. {{{#!sql INSERT INTO participation ( student_index, at_name, as_start_time, as_location, rsvp_status, rsvp_at, attendance_status ) VALUES ( 230014, 'IT Workshop', TIMESTAMP '2026-11-26 17:00:00', 'Base42', 'going', CURRENT_TIMESTAMP, 'not_checked' ); }}} 5. The Member enters an absence reason for the Hackathon core team meeting. 6. The application stores the absence announcement. {{{#!sql INSERT INTO announces_absence ( student_index, at_name, as_start_time, as_location, reason, announced_at ) VALUES ( 230014, 'Core Team Meeting', TIMESTAMP '2026-12-01 18:30:00', 'BEST Office', 'Faculty obligations at the same time.', CURRENT_TIMESTAMP ); }}} 7. The application updates the participation status for the same session. {{{#!sql UPDATE participation SET rsvp_status = 'not_going', rsvp_at = CURRENT_TIMESTAMP, attendance_status = 'excused' WHERE student_index = 230014 AND at_name = 'Core Team Meeting' AND as_start_time = TIMESTAMP '2026-12-01 18:30:00' AND as_location = 'BEST Office'; }}} 8. The application shows the saved absence and updated participation status. {{{#!sql SELECT p.student_index, p.at_name, p.as_start_time, p.as_location, p.rsvp_status, p.rsvp_at, p.attendance_status, aa.reason, aa.announced_at FROM participation p LEFT JOIN announces_absence aa ON aa.student_index = p.student_index AND aa.at_name = p.at_name AND aa.as_start_time = p.as_start_time AND aa.as_location = p.as_location WHERE p.student_index = 230014 AND p.at_name = 'Core Team Meeting' AND p.as_start_time = TIMESTAMP '2026-12-01 18:30:00' AND p.as_location = 'BEST Office'; }}}