-- Migration: 新增全站统一上传文件表 files，并把 attachments 数据迁入（type='attachments'）
-- Date: 2026-08-28
-- Description: files 表用于管理全站所有上传文件（附件/头像/Logo 等），
--              Type 字段区分归属类型；attachments 历史数据逐行复制，type 填 'attachments'。
-- 幂等：表用 IF NOT EXISTS，数据按主键 id 对齐跳过已迁移行，可重复执行。

-- 1) 建表（与 GORM AutoMigrate 输出一致）
CREATE TABLE IF NOT EXISTS `files` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(32) DEFAULT 'attachments',
  `article_id` bigint(20) unsigned DEFAULT NULL,
  `session_token` varchar(64) DEFAULT NULL,
  `uploader_id` bigint(20) unsigned DEFAULT NULL,
  `filename` varchar(255) DEFAULT NULL,
  `stored_name` varchar(64) DEFAULT NULL,
  `ext` varchar(32) DEFAULT NULL,
  `mime` varchar(128) DEFAULT NULL,
  `size` bigint(20) DEFAULT 0,
  `category` varchar(32) DEFAULT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `deleted_at` datetime(3) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_files_type` (`type`),
  KEY `idx_files_article_id` (`article_id`),
  KEY `idx_files_session_token` (`session_token`),
  KEY `idx_files_uploader_id` (`uploader_id`),
  KEY `idx_files_stored_name` (`stored_name`),
  KEY `idx_files_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2) 数据迁移：attachments 全部行（含软删除）复制进 files，type='attachments'
INSERT INTO `files`
  (`id`,`type`,`article_id`,`session_token`,`uploader_id`,`filename`,`stored_name`,`ext`,`mime`,`size`,`category`,`created_at`,`updated_at`,`deleted_at`)
SELECT
  a.`id`, 'attachments', a.`article_id`, a.`session_token`, a.`uploader_id`, a.`filename`,
  a.`stored_name`, a.`ext`, a.`mime`, a.`size`, a.`category`, a.`created_at`, a.`updated_at`, a.`deleted_at`
FROM `attachments` a
WHERE NOT EXISTS (SELECT 1 FROM `files` f WHERE f.`id` = a.`id`);
