-- CreateTable CREATE TABLE `users` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `email` VARCHAR(191) NOT NULL, `password` VARCHAR(191) NOT NULL, `display_name` VARCHAR(191) NOT NULL, `role` ENUM('admin', 'user') NOT NULL DEFAULT 'user', `email_verified_at` DATETIME(3) NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL, UNIQUE INDEX `users_email_key`(`email`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `meetings` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `uuid` VARCHAR(191) NOT NULL, `title` VARCHAR(191) NOT NULL, `type` ENUM('instant', 'scheduled') NOT NULL, `status` ENUM('scheduled', 'active', 'ended') NOT NULL DEFAULT 'scheduled', `scheduled_at` DATETIME(3) NULL, `host_user_id` INTEGER NOT NULL, `started_at` DATETIME(3) NULL, `ended_at` DATETIME(3) NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL, UNIQUE INDEX `meetings_uuid_key`(`uuid`), INDEX `meetings_uuid_idx`(`uuid`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `meeting_participants` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `meeting_id` INTEGER NOT NULL, `user_id` INTEGER NULL, `guest_name` VARCHAR(191) NULL, `identity` VARCHAR(191) NOT NULL, `role` ENUM('host', 'co_host', 'participant') NOT NULL DEFAULT 'participant', `status` ENUM('pending', 'admitted', 'denied', 'left') NOT NULL DEFAULT 'pending', `requested_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `admitted_at` DATETIME(3) NULL, `left_at` DATETIME(3) NULL, INDEX `meeting_participants_meeting_id_status_idx`(`meeting_id`, `status`), UNIQUE INDEX `meeting_participants_meeting_id_identity_key`(`meeting_id`, `identity`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `notes` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `meeting_id` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `content` TEXT NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL, UNIQUE INDEX `notes_meeting_id_user_id_key`(`meeting_id`, `user_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `recordings` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `meeting_id` INTEGER NOT NULL, `egress_id` VARCHAR(191) NOT NULL, `status` ENUM('in_progress', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'in_progress', `storage_path` VARCHAR(191) NULL, `file_size_bytes` BIGINT NULL, `duration_seconds` INTEGER NULL, `started_by_user_id` INTEGER NOT NULL, `started_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `completed_at` DATETIME(3) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `meetings` ADD CONSTRAINT `meetings_host_user_id_fkey` FOREIGN KEY (`host_user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `meeting_participants` ADD CONSTRAINT `meeting_participants_meeting_id_fkey` FOREIGN KEY (`meeting_id`) REFERENCES `meetings`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `meeting_participants` ADD CONSTRAINT `meeting_participants_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `notes` ADD CONSTRAINT `notes_meeting_id_fkey` FOREIGN KEY (`meeting_id`) REFERENCES `meetings`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `notes` ADD CONSTRAINT `notes_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `recordings` ADD CONSTRAINT `recordings_meeting_id_fkey` FOREIGN KEY (`meeting_id`) REFERENCES `meetings`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `recordings` ADD CONSTRAINT `recordings_started_by_user_id_fkey` FOREIGN KEY (`started_by_user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;