36526-vm/db/migrations/001_initial_schema.sql
2025-12-01 07:41:47 +00:00

77 lines
3.1 KiB
SQL

CREATE TABLE IF NOT EXISTS `events` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`code` VARCHAR(255) UNIQUE,
`name_en` VARCHAR(255) NOT NULL,
`name_ar` VARCHAR(255) NOT NULL,
`date_time` DATETIME NOT NULL,
`venue_en` VARCHAR(255) NOT NULL,
`venue_ar` VARCHAR(255) NOT NULL,
`maps_url` VARCHAR(2048),
`default_language` ENUM('Arabic', 'English') NOT NULL DEFAULT 'Arabic',
`inviter_wa_number` VARCHAR(20),
`status` ENUM('Draft', 'Active', 'Closed') NOT NULL DEFAULT 'Draft',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `guests` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`event_id` INT NOT NULL,
`code` VARCHAR(255),
`name_en` VARCHAR(255),
`name_ar` VARCHAR(255),
`country_code` VARCHAR(10),
`phone` VARCHAR(20) NOT NULL,
`language` ENUM('Arabic', 'English') NOT NULL DEFAULT 'Arabic',
`rsvp` ENUM('No Reply', 'Attending', 'Not Attending') NOT NULL DEFAULT 'No Reply',
`rsvp_source` VARCHAR(50),
`rsvp_at` DATETIME NULL,
`qr_token` VARCHAR(255) UNIQUE,
`rsvp_token` VARCHAR(255) UNIQUE,
`scanned` TINYINT(1) DEFAULT 0,
`scanned_at` DATETIME NULL,
`wati_broadcast_id` VARCHAR(64) NULL,
`wati_message_id` VARCHAR(64) NULL,
`wati_reply_wa_id` VARCHAR(64) NULL,
`notes` TEXT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`event_id`) REFERENCES `events`(`id`) ON DELETE CASCADE,
UNIQUE (`event_id`, `code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) UNIQUE NOT NULL,
`password_hash` VARCHAR(255) NOT NULL,
`role` ENUM('admin', 'inviter', 'scanner') NOT NULL DEFAULT 'admin',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `action_log` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`guest_id` INT NULL,
`event_id` INT NULL,
`user_id` INT NULL,
`action_type` VARCHAR(100) NOT NULL,
`old_value` TEXT,
`new_value` TEXT,
`source` VARCHAR(50),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`guest_id`) REFERENCES `guests`(`id`) ON DELETE SET NULL,
FOREIGN KEY (`event_id`) REFERENCES `events`(`id`) ON DELETE SET NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `wati_reply_sessions` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`original_local_message_id` VARCHAR(64) NOT NULL,
`reply_whatsapp_message_id` VARCHAR(64) UNIQUE NOT NULL,
`reply_timestamp` DATETIME NOT NULL,
`raw` TEXT,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX (`original_local_message_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;