Files

102 lines
4.2 KiB
SQL

-- 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;