Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Schema Information

Users

The Users table stores information on users.

Schema Definition

#![allow(unused)]
fn main() {
struct User {
  id: i32,
  name: string,
  andrew_id: string,
  oidc_subject: string,
  created_at: DateTimeWithTimeZone
}
}

Field Descriptions

  • id: Primary Key. The id for the user. Autogenerated.
  • name: The (full) name of the user, as fetched from auth.
  • andrew_id: The andrew_id of the user, as fetched from auth.
  • oidc_subject: The OIDC subject of the user, as fetched from auth. This is for authentication, and not for the frontend.
  • created_at: The timestamp when the user was created (when the entry was created). Autogenerated.

Organizations

Schema Definition

#![allow(unused)]
fn main() {
struct Organization {
  id: i32,
  name: string,
  data: Json
}
}

Field Descriptions

  • id: Primary Key. The id for the organization. Autogenerated.
  • name: The name of the organization.
  • data: Other data related to the organization. See organization.data.

Organization Members

The OrganizationMembers table is a join table between the Organizations and Users table to describe the many-to-many relationship users are allowed to have with organizations. It also stores information on what the user is allowed to do in the organization.

Schema Definition

#![allow(unused)]
fn main() {
struct OrganizationMember {
  organization_id: i32,
  user_id: i32,
  user_role: string,
  joined_at: DateTimeWithTimeZone
}
}

Field Descriptions

  • organization_id: Primary Key. The id for an organization. References Organizations.
  • user_id: Primary Key. The id for the user in the organization. References Users.
  • user_role: The role of the user in the organization. Specifies their permissions in the organization and creating events.
  • joined_at: The timestamp when the user joined the organization (when the entry was created). Autogenerated.

Sessions

Schema Definition

#![allow(unused)]
fn main() {
struct Session {
  id: i32,
  join_code: String
  status: SessionStatus,
  created_by_user_id: i32
}
}

Field Descriptions

  • id: Primary Key. The id for the session. Autogenerated.
  • join_code: The join code for the session. Capital alphabet and digits, 6 characters.
  • status: The status of the session, can be “open”, “locked”, “closed”.
  • created_by_user_id: The id of the user who created the session. Reference Users.

User Sessions

Schema Definition

#![allow(unused)]
fn main() {
struct UserSession {
  id: i32,
  user_id: i32,
  session_id: i32,
  proxy: Option<string>,
  join_left: JoinLeft,
  timestamp: DateTimeWithTimeZone
}
}

Field Descriptions

  • id: Primary Key. Autogenerated.
  • user_id: Foreign Key. The id for the user in the session. References Users.
  • session_id: Foreign Key. The id for the session. References Sessions.
  • proxy: Nullable string. If set, stores the user id (as a string) of the participant this user is proxying for.
  • join_left: Whether the user joined or left the session. Can be “joined” or “left”.
  • timestamp: The timestamp when the user joined the session (when the entry was created).

Events

Schema Definition

#![allow(unused)]
fn main() {
struct Event {
  id: i32,
  event_type: EventType,
  name: String,
  status: StatusOption,
  start_time: DateTimeWithTimeZone,
  end_time: Option<DateTimeWithTimeZone>,
  data: Json,
  created_by_user_id: i32,
  session_id: i32,
}
}

Field Descriptions

  • id: Primary Key. The id for the event. Autogenerated.
  • event_type: The type of the event. Is an enum type. Can be “motion” or “election”.
  • name: The name for the event.
  • status: The status of the event. Is an enum type. Can be “active” or “inactive”.
  • start_time: The time when the event(voting) starts.
  • end_time: The time when the event(voting) ends, if ever.
  • data: The other data related to the event. See event.data
  • created_by_user_id. The id of the user who created the event. References Users.
  • session_id: The id for the session this event belongs to. References Sessions.

Votes

This table probably breaks a normalization rule or two, but that doesn’t really matter right now.

Schema Definition

#![allow(unused)]
fn main() {
struct Vote {
  id: i32,
  event_id: i32,
  user_session_id: i32,
  cast_time: DateTimeWithTimeZone,
  data: Json,
}
}

Field Descriptions

  • id: Primary Key. The id for the vote. Autogenerated.
  • event_id: Foreign Key. The event this vote belongs to. References Events.
  • user_session_id: Foreign Key. The user_session row representing the participant/proxy vote instance. References User Sessions.
  • cast_time: The time at which this vote was cast (when the entry was created). Autogenerated.
  • data: Other data pertaining to the vote. See vote.data

Votes are unique per (event_id, user_session_id).