Workshop Participant
Data Entity
Description
Roster record linking a user to a specific workshop session, tracking enrollment and attendance status for Blindeforbundet's mentor-program career workshops.
Data Structure
| Name | Type | Description | Constraints |
|---|---|---|---|
id |
uuid |
Primary key | PKrequiredunique |
workshop_id |
uuid |
Foreign key to workshops table | required |
user_id |
uuid |
Foreign key to users table — the peer mentor enrolled in the workshop | required |
organization_id |
uuid |
Tenant scope — must match the workshop's organization_id for isolation | required |
status |
enum |
Enrollment/attendance status of the participant | required |
enrolled_at |
datetime |
Timestamp when the participant was added to the workshop roster | required |
attended_at |
datetime |
Timestamp when attendance was confirmed; NULL until marked attended | - |
added_by_user_id |
uuid |
User ID of the coordinator who added this participant to the roster | - |
notes |
text |
Optional coordinator notes about this participant's involvement or follow-up actions | - |
updated_at |
datetime |
Last modification timestamp | required |
Database Indexes
idx_workshop_participants_workshop_id
Columns: workshop_id
idx_workshop_participants_user_id
Columns: user_id
idx_workshop_participants_unique_enrollment
Columns: workshop_id, user_id
idx_workshop_participants_org_status
Columns: organization_id, status
Validation Rules
user_must_exist_in_organization
error
Validation failed
workshop_must_be_active
error
Validation failed
status_transition_guard
error
Validation failed
notes_length_limit
error
Validation failed
Business Rules
unique_enrollment_per_workshop
A user may only appear once on a given workshop's roster — duplicate enrollments are rejected
organization_scope_match
The participant's organization_id must match the workshop's organization_id; cross-org enrollment is forbidden
coordinator_only_roster_management
Only users with Coordinator or Org Admin role may add or remove participants from a workshop roster
attended_at_requires_attended_status
attended_at timestamp may only be set when status is 'attended'; setting attended_at auto-promotes status to 'attended'
cancelled_participant_excluded_from_counts
Participants with status 'cancelled' are excluded from workshop capacity counts and Bufdir-relevant attendance aggregates