fix: 清理 typecheck 报错并修正迁移列名
- 加入缺失的 @testing-library/dom 依赖(RTL v16 必需 peer),修复 screen 导入 - 修正测试文件错误的相对导入路径(header 改具名导入;prompts/courses 指向 ../page) - 修正联盟/打赏迁移 SQL:Prisma 列名为 camelCase(仅 @@map 映射表名),原 snake_case 列名导致查询 500,已重建表 - npm run typecheck 现已通过(EXIT=0)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
-- 联盟返佣系统:规范化数据模型
|
||||
-- 替换原先手写的 affiliate_stats / affiliate_clicks 裸表,改用 ORM 管理
|
||||
-- 注意:Prisma 字段名即为列名(camelCase),仅通过 @@map 映射表名为 snake_case
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `affiliate_programs` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
@@ -7,54 +8,54 @@ CREATE TABLE IF NOT EXISTS `affiliate_programs` (
|
||||
`slug` VARCHAR(191) NOT NULL,
|
||||
`provider` VARCHAR(191),
|
||||
`description` TEXT,
|
||||
`commission_rate` VARCHAR(191),
|
||||
`cookie_days` INT,
|
||||
`homepage_url` VARCHAR(191),
|
||||
`commissionRate` VARCHAR(191),
|
||||
`cookieDays` INT,
|
||||
`homepageUrl` VARCHAR(191),
|
||||
`logo` VARCHAR(191),
|
||||
`active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`sort_order` INT NOT NULL DEFAULT 0,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
`sortOrder` INT NOT NULL DEFAULT 0,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `affiliate_programs_slug_key` (`slug`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `affiliate_links` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`program_id` INT NOT NULL,
|
||||
`programId` INT NOT NULL,
|
||||
`title` VARCHAR(191) NOT NULL,
|
||||
`description` TEXT,
|
||||
`url` TEXT NOT NULL,
|
||||
`thumbnail` VARCHAR(191),
|
||||
`tool_id` INT,
|
||||
`skill_id` VARCHAR(191),
|
||||
`toolId` INT,
|
||||
`skillId` VARCHAR(191),
|
||||
`tags` TEXT,
|
||||
`estimated_commission` DOUBLE NOT NULL DEFAULT 0,
|
||||
`sort_order` INT NOT NULL DEFAULT 0,
|
||||
`is_featured` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`estimatedCommission` DOUBLE NOT NULL DEFAULT 0,
|
||||
`sortOrder` INT NOT NULL DEFAULT 0,
|
||||
`isFeatured` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `affiliate_links_program_id_idx` (`program_id`),
|
||||
INDEX `affiliate_links_tool_id_idx` (`tool_id`),
|
||||
INDEX `affiliate_links_skill_id_idx` (`skill_id`),
|
||||
CONSTRAINT `affiliate_links_program_id_fkey` FOREIGN KEY (`program_id`) REFERENCES `affiliate_programs` (`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `affiliate_links_tool_id_fkey` FOREIGN KEY (`tool_id`) REFERENCES `tools` (`id`) ON DELETE SET NULL,
|
||||
CONSTRAINT `affiliate_links_skill_id_fkey` FOREIGN KEY (`skill_id`) REFERENCES `skills` (`id`) ON DELETE SET NULL
|
||||
INDEX `affiliate_links_programId_idx` (`programId`),
|
||||
INDEX `affiliate_links_toolId_idx` (`toolId`),
|
||||
INDEX `affiliate_links_skillId_idx` (`skillId`),
|
||||
CONSTRAINT `affiliate_links_programId_fkey` FOREIGN KEY (`programId`) REFERENCES `affiliate_programs` (`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `affiliate_links_toolId_fkey` FOREIGN KEY (`toolId`) REFERENCES `tools` (`id`) ON DELETE SET NULL,
|
||||
CONSTRAINT `affiliate_links_skillId_fkey` FOREIGN KEY (`skillId`) REFERENCES `skills` (`id`) ON DELETE SET NULL
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `affiliate_clicks` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`link_id` INT NOT NULL,
|
||||
`user_id` INT,
|
||||
`linkId` INT NOT NULL,
|
||||
`userId` INT,
|
||||
`ip` VARCHAR(191),
|
||||
`user_agent` TEXT,
|
||||
`userAgent` TEXT,
|
||||
`ref` VARCHAR(191),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `affiliate_clicks_link_id_idx` (`link_id`),
|
||||
CONSTRAINT `affiliate_clicks_link_id_fkey` FOREIGN KEY (`link_id`) REFERENCES `affiliate_links` (`id`) ON DELETE CASCADE
|
||||
INDEX `affiliate_clicks_linkId_idx` (`linkId`),
|
||||
CONSTRAINT `affiliate_clicks_linkId_fkey` FOREIGN KEY (`linkId`) REFERENCES `affiliate_links` (`id`) ON DELETE CASCADE
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- 清理旧的手写裸表(被本迁移的规范化模型取代)
|
||||
|
||||
Reference in New Issue
Block a user