Move CMS SQL to drizzle/migrations, drop prisma packages/schema, wire drizzle-kit scripts, and regenerate schema names from src/db/schema.ts. Co-authored-by: Cursor <[email protected]>
441 lines
15 KiB
SQL
441 lines
15 KiB
SQL
-- 0004_cms_feature_tables.sql
|
|
-- Idempotent CREATE TABLE for the CMS-owned (website-tier) feature tables
|
|
-- the AtomCMS-Next conversion needs but the live emulator DB lacks:
|
|
-- radio_*, game_*/challenges, staff_activities, alert_logs, email_templates,
|
|
-- social_accounts, website_article_comments/reactions. Generated from
|
|
-- `prisma migrate diff` (CREATE statements only; all ALTER/DROP excluded so
|
|
-- emulator-owned tables are never touched). Each statement is IF NOT EXISTS.
|
|
|
|
CREATE TABLE IF NOT EXISTS `website_article_reactions` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` INTEGER UNSIGNED NOT NULL,
|
|
`article_id` BIGINT UNSIGNED NOT NULL,
|
|
`reaction` VARCHAR(50) NOT NULL,
|
|
`active` BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `website_article_comments` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`article_id` BIGINT UNSIGNED NOT NULL,
|
|
`user_id` INTEGER NOT NULL,
|
|
`comment` VARCHAR(255) NOT NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `alert_logs` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`type` VARCHAR(255) NOT NULL,
|
|
`severity` VARCHAR(255) NOT NULL,
|
|
`message` TEXT NOT NULL,
|
|
`context` JSON NULL,
|
|
`sent_via_email` BOOLEAN NOT NULL DEFAULT false,
|
|
`sent_via_discord` BOOLEAN NOT NULL DEFAULT false,
|
|
`is_read` BOOLEAN NOT NULL DEFAULT false,
|
|
`read_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_ranks` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(255) NOT NULL,
|
|
`description` VARCHAR(255) NULL,
|
|
`badge_code` VARCHAR(255) NULL,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_shouts` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`message` TEXT NOT NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_applications` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`real_name` VARCHAR(255) NOT NULL,
|
|
`age` INTEGER NOT NULL,
|
|
`availability` TEXT NOT NULL,
|
|
`experience` TEXT NULL,
|
|
`motivation` TEXT NOT NULL,
|
|
`music_style` TEXT NULL,
|
|
`discord_username` VARCHAR(255) NULL,
|
|
`rank_id` BIGINT UNSIGNED NULL,
|
|
`status` VARCHAR(255) NOT NULL DEFAULT 'pending',
|
|
`approved_by` BIGINT UNSIGNED NULL,
|
|
`approved_at` TIMESTAMP(0) NULL,
|
|
`rejected_by` BIGINT UNSIGNED NULL,
|
|
`rejected_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_schedules` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`day` VARCHAR(255) NOT NULL,
|
|
`start_time` TIME NOT NULL,
|
|
`end_time` TIME NOT NULL,
|
|
`show_name` VARCHAR(255) NULL,
|
|
`description` TEXT NULL,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_banners` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`image_path` VARCHAR(255) NOT NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`description` TEXT NULL,
|
|
`sort_order` INTEGER NOT NULL DEFAULT 0,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_history` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`show_name` VARCHAR(255) NULL,
|
|
`started_at` TIMESTAMP(0) NOT NULL,
|
|
`ended_at` TIMESTAMP(0) NULL,
|
|
`listeners_count` INTEGER NOT NULL DEFAULT 0,
|
|
`notes` TEXT NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_contests` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_giveaways` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_listener_points` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_song_requests` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_song_votes` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_scores` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` INTEGER UNSIGNED NOT NULL,
|
|
`game` VARCHAR(50) NOT NULL,
|
|
`score` INTEGER NOT NULL DEFAULT 0,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_rooms` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`game` VARCHAR(50) NOT NULL,
|
|
`player1_id` INTEGER UNSIGNED NOT NULL,
|
|
`player2_id` INTEGER UNSIGNED NULL,
|
|
`state` JSON NULL,
|
|
`turn` INTEGER UNSIGNED NOT NULL DEFAULT 1,
|
|
`winner_id` INTEGER UNSIGNED NULL,
|
|
`status` VARCHAR(191) NOT NULL DEFAULT 'waiting',
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_reward_claims` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`game` VARCHAR(50) NOT NULL,
|
|
`wins_required` INTEGER NOT NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `game_reward_claims_user_id_game_wins_required_key`(`user_id`, `game`, `wins_required`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_chat_messages` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`room_id` BIGINT UNSIGNED NOT NULL,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`message` TEXT NOT NULL,
|
|
`type` VARCHAR(191) NOT NULL DEFAULT 'chat',
|
|
`reactions` JSON NULL,
|
|
`created_at` TIMESTAMP(0) NOT NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_replays` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`game` VARCHAR(191) NOT NULL,
|
|
`player1_id` BIGINT UNSIGNED NOT NULL,
|
|
`player2_id` BIGINT UNSIGNED NULL,
|
|
`game_data` JSON NOT NULL,
|
|
`moves` JSON NOT NULL,
|
|
`winner` VARCHAR(191) NULL,
|
|
`player1_score` INTEGER NOT NULL DEFAULT 0,
|
|
`player2_score` INTEGER NOT NULL DEFAULT 0,
|
|
`started_at` TIMESTAMP(0) NOT NULL,
|
|
`ended_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_ranks` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(191) NOT NULL,
|
|
`slug` VARCHAR(191) NOT NULL,
|
|
`icon` VARCHAR(191) NOT NULL DEFAULT '⭐',
|
|
`color` VARCHAR(191) NOT NULL DEFAULT '#ffffff',
|
|
`min_points` INTEGER NOT NULL DEFAULT 0,
|
|
`max_points` INTEGER NULL,
|
|
`tier` INTEGER NOT NULL DEFAULT 1,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `game_ranks_slug_key`(`slug`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `user_game_ranks` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`game` VARCHAR(191) NOT NULL,
|
|
`rank_id` BIGINT UNSIGNED NOT NULL,
|
|
`points` INTEGER NOT NULL DEFAULT 0,
|
|
`wins` INTEGER NOT NULL DEFAULT 0,
|
|
`games_played` INTEGER NOT NULL DEFAULT 0,
|
|
`win_streak` INTEGER NOT NULL DEFAULT 0,
|
|
`best_streak` INTEGER NOT NULL DEFAULT 0,
|
|
`last_played_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `user_game_ranks_user_id_game_key`(`user_id`, `game`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_invitations` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`from_user_id` BIGINT UNSIGNED NOT NULL,
|
|
`to_user_id` BIGINT UNSIGNED NOT NULL,
|
|
`game` VARCHAR(255) NOT NULL,
|
|
`status` VARCHAR(255) NOT NULL DEFAULT 'pending',
|
|
`bet_amount` INTEGER NOT NULL DEFAULT 0,
|
|
`bet_currency` VARCHAR(255) NOT NULL DEFAULT 'credits',
|
|
`room_id` BIGINT UNSIGNED NULL,
|
|
`expires_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `user_game_xp` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`game` VARCHAR(255) NOT NULL,
|
|
`xp` INTEGER NOT NULL DEFAULT 0,
|
|
`level` INTEGER NOT NULL DEFAULT 1,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `user_game_xp_user_id_game_key`(`user_id`, `game`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `game_level_rewards` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`game` VARCHAR(255) NOT NULL,
|
|
`level` INTEGER NOT NULL,
|
|
`reward_type` VARCHAR(255) NOT NULL,
|
|
`reward_currency` VARCHAR(255) NULL,
|
|
`reward_amount` INTEGER NOT NULL DEFAULT 0,
|
|
`claimed` BOOLEAN NOT NULL DEFAULT false,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `daily_challenges` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(255) NOT NULL,
|
|
`description` VARCHAR(255) NOT NULL,
|
|
`game` VARCHAR(255) NULL,
|
|
`type` VARCHAR(255) NOT NULL,
|
|
`target` INTEGER NOT NULL,
|
|
`reward_currency` VARCHAR(255) NOT NULL DEFAULT 'credits',
|
|
`reward_amount` INTEGER NOT NULL,
|
|
`date` DATE NOT NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `user_challenge_progress` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`challenge_id` BIGINT UNSIGNED NOT NULL,
|
|
`progress` INTEGER NOT NULL DEFAULT 0,
|
|
`completed` BOOLEAN NOT NULL DEFAULT false,
|
|
`claimed` BOOLEAN NOT NULL DEFAULT false,
|
|
`completed_at` TIMESTAMP(0) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `user_challenge_progress_user_id_challenge_id_key`(`user_id`, `challenge_id`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `staff_activities` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`action` VARCHAR(50) NOT NULL,
|
|
`target_type` VARCHAR(100) NULL,
|
|
`target_id` BIGINT UNSIGNED NULL,
|
|
`description` TEXT NOT NULL,
|
|
`ip_address` VARCHAR(45) NULL,
|
|
`metadata` JSON NULL,
|
|
`created_at` TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `email_templates` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(255) NOT NULL,
|
|
`subject` VARCHAR(255) NOT NULL,
|
|
`body` TEXT NOT NULL,
|
|
`variables` TEXT NULL,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `email_templates_name_key`(`name`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `social_accounts` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`provider` VARCHAR(255) NOT NULL,
|
|
`provider_id` VARCHAR(255) NOT NULL,
|
|
`avatar` VARCHAR(255) NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `social_accounts_provider_provider_id_key`(`provider`, `provider_id`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_api_keys` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(255) NOT NULL,
|
|
`key` VARCHAR(64) NOT NULL,
|
|
`allowed_ips` VARCHAR(255) NULL,
|
|
`permissions` JSON NULL,
|
|
`rate_limit` INTEGER NOT NULL DEFAULT 300,
|
|
`last_used_at` TIMESTAMP(0) NULL,
|
|
`expires_at` TIMESTAMP(0) NULL,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
UNIQUE INDEX `radio_api_keys_key_key`(`key`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_song_plays` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`title` VARCHAR(255) NOT NULL,
|
|
`artist` VARCHAR(255) NULL,
|
|
`album` VARCHAR(255) NULL,
|
|
`artwork_url` VARCHAR(255) NULL,
|
|
`duration` INTEGER UNSIGNED NULL,
|
|
`played_at` TIMESTAMP(0) NOT NULL,
|
|
`dj_id` BIGINT UNSIGNED NULL,
|
|
`metadata` JSON NULL,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS `radio_auto_dj_playlist` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`title` VARCHAR(255) NOT NULL,
|
|
`artist` VARCHAR(255) NULL,
|
|
`album` VARCHAR(255) NULL,
|
|
`artwork_url` VARCHAR(255) NULL,
|
|
`duration` INTEGER UNSIGNED NULL,
|
|
`play_count` INTEGER UNSIGNED NOT NULL DEFAULT 0,
|
|
`last_played_at` TIMESTAMP(0) NULL,
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
`sort_order` INTEGER UNSIGNED NOT NULL DEFAULT 0,
|
|
`created_at` TIMESTAMP(0) NULL,
|
|
`updated_at` TIMESTAMP(0) NULL,
|
|
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|