{
  "version": "5",
  "dialect": "mysql",
  "id": "b34b9099-be46-4a8e-9783-0372bc37fe07",
  "prevId": "00000000-0000-0000-0000-000000000000",
  "tables": {
    "course_sessions": {
      "name": "course_sessions",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "course_id": {
          "name": "course_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_start_time": {
          "name": "session_start_time",
          "type": "datetime",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_end_time": {
          "name": "session_end_time",
          "type": "datetime",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "is_active": {
          "name": "is_active",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": true
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updated_at": {
          "name": "updated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        },
        "deleted_at": {
          "name": "deleted_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        }
      },
      "indexes": {
        "idx_course_sessions_course_id": {
          "name": "idx_course_sessions_course_id",
          "columns": [
            "course_id"
          ],
          "isUnique": false
        },
        "idx_course_sessions_is_active": {
          "name": "idx_course_sessions_is_active",
          "columns": [
            "is_active"
          ],
          "isUnique": false
        },
        "idx_course_sessions_start_time": {
          "name": "idx_course_sessions_start_time",
          "columns": [
            "session_start_time"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "course_sessions_course_id_courses_id_fk": {
          "name": "course_sessions_course_id_courses_id_fk",
          "tableFrom": "course_sessions",
          "tableTo": "courses",
          "columnsFrom": [
            "course_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "course_sessions_id": {
          "name": "course_sessions_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "courses": {
      "name": "courses",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "instructor_id": {
          "name": "instructor_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "title": {
          "name": "title",
          "type": "varchar(255)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "description": {
          "name": "description",
          "type": "text",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "date": {
          "name": "date",
          "type": "date",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "start_time": {
          "name": "start_time",
          "type": "time",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "duration_minutes": {
          "name": "duration_minutes",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_code": {
          "name": "session_code",
          "type": "varchar(20)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "allow_anonymous": {
          "name": "allow_anonymous",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "status": {
          "name": "status",
          "type": "enum('draft','active','completed')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "'draft'"
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updated_at": {
          "name": "updated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        },
        "deleted_at": {
          "name": "deleted_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "version": {
          "name": "version",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 1
        }
      },
      "indexes": {
        "idx_courses_instructor_id": {
          "name": "idx_courses_instructor_id",
          "columns": [
            "instructor_id"
          ],
          "isUnique": false
        },
        "idx_courses_session_code": {
          "name": "idx_courses_session_code",
          "columns": [
            "session_code"
          ],
          "isUnique": true
        },
        "idx_courses_status": {
          "name": "idx_courses_status",
          "columns": [
            "status"
          ],
          "isUnique": false
        },
        "idx_courses_date": {
          "name": "idx_courses_date",
          "columns": [
            "date"
          ],
          "isUnique": false
        },
        "idx_courses_deleted_at": {
          "name": "idx_courses_deleted_at",
          "columns": [
            "deleted_at"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "courses_instructor_id_users_id_fk": {
          "name": "courses_instructor_id_users_id_fk",
          "tableFrom": "courses",
          "tableTo": "users",
          "columnsFrom": [
            "instructor_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "courses_id": {
          "name": "courses_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {
        "courses_session_code_unique": {
          "name": "courses_session_code_unique",
          "columns": [
            "session_code"
          ]
        }
      },
      "checkConstraint": {}
    },
    "join_codes": {
      "name": "join_codes",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_id": {
          "name": "session_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "code": {
          "name": "code",
          "type": "varchar(50)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "is_custom": {
          "name": "is_custom",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "status": {
          "name": "status",
          "type": "enum('active','revoked')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "'active'"
        },
        "generated_at": {
          "name": "generated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "revoked_at": {
          "name": "revoked_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "created_by": {
          "name": "created_by",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "usage_count": {
          "name": "usage_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "updated_at": {
          "name": "updated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        }
      },
      "indexes": {
        "idx_join_codes_session_id": {
          "name": "idx_join_codes_session_id",
          "columns": [
            "session_id"
          ],
          "isUnique": false
        },
        "idx_join_codes_unique": {
          "name": "idx_join_codes_unique",
          "columns": [
            "session_id",
            "code"
          ],
          "isUnique": true
        },
        "idx_join_codes_status": {
          "name": "idx_join_codes_status",
          "columns": [
            "status"
          ],
          "isUnique": false
        },
        "idx_join_codes_created_by": {
          "name": "idx_join_codes_created_by",
          "columns": [
            "created_by"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "join_codes_session_id_course_sessions_id_fk": {
          "name": "join_codes_session_id_course_sessions_id_fk",
          "tableFrom": "join_codes",
          "tableTo": "course_sessions",
          "columnsFrom": [
            "session_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        },
        "join_codes_created_by_users_id_fk": {
          "name": "join_codes_created_by_users_id_fk",
          "tableFrom": "join_codes",
          "tableTo": "users",
          "columnsFrom": [
            "created_by"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "join_codes_id": {
          "name": "join_codes_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "participants": {
      "name": "participants",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_id": {
          "name": "session_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "join_code_id": {
          "name": "join_code_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "join_method": {
          "name": "join_method",
          "type": "enum('code','link')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "name": {
          "name": "name",
          "type": "varchar(255)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "join_timestamp": {
          "name": "join_timestamp",
          "type": "datetime",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "leave_timestamp": {
          "name": "leave_timestamp",
          "type": "datetime",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "is_active": {
          "name": "is_active",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": true
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updated_at": {
          "name": "updated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        }
      },
      "indexes": {
        "idx_participants_session_id": {
          "name": "idx_participants_session_id",
          "columns": [
            "session_id"
          ],
          "isUnique": false
        },
        "idx_participants_join_code_id": {
          "name": "idx_participants_join_code_id",
          "columns": [
            "join_code_id"
          ],
          "isUnique": false
        },
        "idx_participants_join_method": {
          "name": "idx_participants_join_method",
          "columns": [
            "join_method"
          ],
          "isUnique": false
        },
        "idx_participants_is_active": {
          "name": "idx_participants_is_active",
          "columns": [
            "is_active"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "participants_session_id_course_sessions_id_fk": {
          "name": "participants_session_id_course_sessions_id_fk",
          "tableFrom": "participants",
          "tableTo": "course_sessions",
          "columnsFrom": [
            "session_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        },
        "participants_join_code_id_join_codes_id_fk": {
          "name": "participants_join_code_id_join_codes_id_fk",
          "tableFrom": "participants",
          "tableTo": "join_codes",
          "columnsFrom": [
            "join_code_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "set null",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "participants_id": {
          "name": "participants_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "session_dashboard": {
      "name": "session_dashboard",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_id": {
          "name": "session_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "red_count": {
          "name": "red_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "yellow_count": {
          "name": "yellow_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "green_count": {
          "name": "green_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "total_participants": {
          "name": "total_participants",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "active_participants": {
          "name": "active_participants",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "elapsed_seconds": {
          "name": "elapsed_seconds",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "last_updated": {
          "name": "last_updated",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "version": {
          "name": "version",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 1
        }
      },
      "indexes": {
        "idx_session_dashboard_session_id": {
          "name": "idx_session_dashboard_session_id",
          "columns": [
            "session_id"
          ],
          "isUnique": true
        },
        "idx_session_dashboard_last_updated": {
          "name": "idx_session_dashboard_last_updated",
          "columns": [
            "last_updated"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "session_dashboard_session_id_course_sessions_id_fk": {
          "name": "session_dashboard_session_id_course_sessions_id_fk",
          "tableFrom": "session_dashboard",
          "tableTo": "course_sessions",
          "columnsFrom": [
            "session_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "session_dashboard_id": {
          "name": "session_dashboard_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {
        "session_dashboard_session_id_unique": {
          "name": "session_dashboard_session_id_unique",
          "columns": [
            "session_id"
          ]
        }
      },
      "checkConstraint": {}
    },
    "session_summaries": {
      "name": "session_summaries",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "session_id": {
          "name": "session_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "total_participants": {
          "name": "total_participants",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "participants_via_link": {
          "name": "participants_via_link",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "participants_via_code": {
          "name": "participants_via_code",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "codes_generated_count": {
          "name": "codes_generated_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "codes_revoked_count": {
          "name": "codes_revoked_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "final_red_count": {
          "name": "final_red_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "final_yellow_count": {
          "name": "final_yellow_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "final_green_count": {
          "name": "final_green_count",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": 0
        },
        "duration_seconds": {
          "name": "duration_seconds",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        }
      },
      "indexes": {
        "idx_session_summaries_session_id": {
          "name": "idx_session_summaries_session_id",
          "columns": [
            "session_id"
          ],
          "isUnique": true
        },
        "idx_session_summaries_created_at": {
          "name": "idx_session_summaries_created_at",
          "columns": [
            "created_at"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "session_summaries_session_id_course_sessions_id_fk": {
          "name": "session_summaries_session_id_course_sessions_id_fk",
          "tableFrom": "session_summaries",
          "tableTo": "course_sessions",
          "columnsFrom": [
            "session_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "session_summaries_id": {
          "name": "session_summaries_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {
        "session_summaries_session_id_unique": {
          "name": "session_summaries_session_id_unique",
          "columns": [
            "session_id"
          ]
        }
      },
      "checkConstraint": {}
    },
    "status_events": {
      "name": "status_events",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "participant_id": {
          "name": "participant_id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "status": {
          "name": "status",
          "type": "enum('red','yellow','green')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "triggered_at": {
          "name": "triggered_at",
          "type": "datetime",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "auto_reset_at": {
          "name": "auto_reset_at",
          "type": "datetime",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "is_reset": {
          "name": "is_reset",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        }
      },
      "indexes": {
        "idx_status_events_participant_id": {
          "name": "idx_status_events_participant_id",
          "columns": [
            "participant_id"
          ],
          "isUnique": false
        },
        "idx_status_events_status": {
          "name": "idx_status_events_status",
          "columns": [
            "status"
          ],
          "isUnique": false
        },
        "idx_status_events_triggered_at": {
          "name": "idx_status_events_triggered_at",
          "columns": [
            "triggered_at"
          ],
          "isUnique": false
        },
        "idx_status_events_is_reset": {
          "name": "idx_status_events_is_reset",
          "columns": [
            "is_reset"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "status_events_participant_id_participants_id_fk": {
          "name": "status_events_participant_id_participants_id_fk",
          "tableFrom": "status_events",
          "tableTo": "participants",
          "columnsFrom": [
            "participant_id"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "status_events_id": {
          "name": "status_events_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "users": {
      "name": "users",
      "columns": {
        "id": {
          "name": "id",
          "type": "char(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "google_id": {
          "name": "google_id",
          "type": "varchar(255)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "email": {
          "name": "email",
          "type": "varchar(255)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "name": {
          "name": "name",
          "type": "varchar(255)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "profile_picture_url": {
          "name": "profile_picture_url",
          "type": "varchar(500)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "role": {
          "name": "role",
          "type": "enum('teacher','admin')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "'teacher'"
        },
        "created_at": {
          "name": "created_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updated_at": {
          "name": "updated_at",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        },
        "is_active": {
          "name": "is_active",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": true
        }
      },
      "indexes": {
        "idx_users_role": {
          "name": "idx_users_role",
          "columns": [
            "role"
          ],
          "isUnique": false
        },
        "idx_users_created_at": {
          "name": "idx_users_created_at",
          "columns": [
            "created_at"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {},
      "compositePrimaryKeys": {
        "users_id": {
          "name": "users_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {
        "users_google_id_unique": {
          "name": "users_google_id_unique",
          "columns": [
            "google_id"
          ]
        },
        "users_email_unique": {
          "name": "users_email_unique",
          "columns": [
            "email"
          ]
        }
      },
      "checkConstraint": {}
    }
  },
  "views": {},
  "_meta": {
    "schemas": {},
    "tables": {},
    "columns": {}
  },
  "internal": {
    "tables": {},
    "indexes": {}
  }
}