-- AlterTable ALTER TABLE `bookings` ADD COLUMN `review_reminder_claimed_at` DATETIME(3) NULL, ADD COLUMN `review_reminder_due_at` DATETIME(3) NULL, ADD COLUMN `review_reminder_sent_at` DATETIME(3) NULL; -- CreateTable CREATE TABLE `booking_reviews` ( `id` VARCHAR(191) NOT NULL, `booking_id` VARCHAR(191) NOT NULL, `rating` INTEGER NOT NULL, `recommendation` INTEGER NULL, `tags` JSON NOT NULL, `comment` VARCHAR(200) NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), UNIQUE INDEX `booking_reviews_booking_id_key`(`booking_id`), INDEX `booking_reviews_created_at_idx`(`created_at`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `body_metrics` ( `id` VARCHAR(191) NOT NULL, `user_id` VARCHAR(191) NOT NULL, `recorded_at` DATE NOT NULL, `weight` DOUBLE NULL, `body_fat` DOUBLE NULL, `waist` DOUBLE NULL, `hip` DOUBLE NULL, `flexibility` DOUBLE NULL, `remark` VARCHAR(200) NOT NULL DEFAULT '', `operator_id` VARCHAR(191) NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `body_metrics_user_id_recorded_at_idx`(`user_id`, `recorded_at`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `member_notes` ( `id` VARCHAR(191) NOT NULL, `user_id` VARCHAR(191) NOT NULL, `booking_id` VARCHAR(191) NULL, `content` VARCHAR(1000) NOT NULL, `shared` BOOLEAN NOT NULL DEFAULT false, `operator_id` VARCHAR(191) NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `member_notes_user_id_created_at_idx`(`user_id`, `created_at`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `progress_photos` ( `id` VARCHAR(191) NOT NULL, `user_id` VARCHAR(191) NOT NULL, `object_key` VARCHAR(191) NOT NULL, `caption` VARCHAR(200) NOT NULL DEFAULT '', `recorded_at` DATE NOT NULL, `uploaded_at` DATETIME(3) NULL, `consented_at` DATETIME(3) NULL, `revoked_at` DATETIME(3) NULL, `operator_id` VARCHAR(191) NOT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), UNIQUE INDEX `progress_photos_object_key_key`(`object_key`), INDEX `progress_photos_user_id_recorded_at_idx`(`user_id`, `recorded_at`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `booking_reviews` ADD CONSTRAINT `booking_reviews_booking_id_fkey` FOREIGN KEY (`booking_id`) REFERENCES `bookings`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `body_metrics` ADD CONSTRAINT `body_metrics_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `member_notes` ADD CONSTRAINT `member_notes_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `member_notes` ADD CONSTRAINT `member_notes_booking_id_fkey` FOREIGN KEY (`booking_id`) REFERENCES `bookings`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `progress_photos` ADD CONSTRAINT `progress_photos_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;