Files
EpicNext-Cms/drizzle/migrations/0004_cms_feature_tables.sql
T
SimoandCursor ba82789166
CI / check (push) Failing after 9s
CI / release (push) Skipped
CI / deploy (push) Skipped
chore(db): finish Prisma cutover to Drizzle Kit tooling
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]>
2026-08-01 15:02:21 +02:00

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;