diff --git a/prisma/migrations/20260324120000_drop_project_mode/migration.sql b/prisma/migrations/20260324120000_drop_project_mode/migration.sql new file mode 100644 index 0000000..a4b66db --- /dev/null +++ b/prisma/migrations/20260324120000_drop_project_mode/migration.sql @@ -0,0 +1,2 @@ +ALTER TABLE `projects` + DROP COLUMN `mode`; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 408766e..a517ed0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -353,7 +353,6 @@ model Project { id String @id @default(uuid()) name String description String? @db.Text - mode String @default("novel-promotion") userId String createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt diff --git a/prisma/schema.sqlit.prisma b/prisma/schema.sqlit.prisma index d4f5edb..0af064e 100644 --- a/prisma/schema.sqlit.prisma +++ b/prisma/schema.sqlit.prisma @@ -347,7 +347,6 @@ model Project { id String @id @default(uuid()) name String description String? - mode String @default("novel-promotion") userId String createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt diff --git a/src/app/[locale]/workspace/page.tsx b/src/app/[locale]/workspace/page.tsx index 825b16f..69201bf 100644 --- a/src/app/[locale]/workspace/page.tsx +++ b/src/app/[locale]/workspace/page.tsx @@ -155,10 +155,7 @@ export default function WorkspacePage() { headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - ...formData, - mode: 'novel-promotion' // 固定为 novel-promotion - }) + body: JSON.stringify(formData) }) if (response.ok) { diff --git a/src/app/api/novel-promotion/[projectId]/ai-modify-shot-prompt/route.ts b/src/app/api/novel-promotion/[projectId]/ai-modify-shot-prompt/route.ts index 3855945..2cc9515 100644 --- a/src/app/api/novel-promotion/[projectId]/ai-modify-shot-prompt/route.ts +++ b/src/app/api/novel-promotion/[projectId]/ai-modify-shot-prompt/route.ts @@ -11,7 +11,7 @@ export const POST = apiHandler(async ( const { projectId } = await context.params const authResult = await requireProjectAuth(projectId) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult + const { session } = authResult const body = await request.json().catch(() => ({})) const currentPrompt = typeof body?.currentPrompt === 'string' ? body.currentPrompt.trim() : '' @@ -19,10 +19,6 @@ export const POST = apiHandler(async ( if (!currentPrompt || !modifyInstruction) { throw new ApiError('INVALID_PARAMS') } - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } - const panelId = typeof body?.panelId === 'string' ? body.panelId.trim() : '' const episodeId = typeof body?.episodeId === 'string' ? body.episodeId.trim() : '' diff --git a/src/app/api/novel-promotion/[projectId]/analyze-global/route.ts b/src/app/api/novel-promotion/[projectId]/analyze-global/route.ts index 61fb559..594eeaf 100644 --- a/src/app/api/novel-promotion/[projectId]/analyze-global/route.ts +++ b/src/app/api/novel-promotion/[projectId]/analyze-global/route.ts @@ -14,13 +14,9 @@ export const POST = apiHandler(async ( const { projectId } = await context.params const authResult = await requireProjectAuth(projectId) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult + const { session } = authResult const body = await request.json().catch(() => ({})) - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } - const asyncTaskResponse = await maybeSubmitLLMTask({ request, userId: session.user.id, diff --git a/src/app/api/novel-promotion/[projectId]/analyze/route.ts b/src/app/api/novel-promotion/[projectId]/analyze/route.ts index f479f6c..bf4c753 100644 --- a/src/app/api/novel-promotion/[projectId]/analyze/route.ts +++ b/src/app/api/novel-promotion/[projectId]/analyze/route.ts @@ -16,11 +16,7 @@ export const POST = apiHandler(async ( include: { characters: true, locations: true }, }) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/novel-promotion/[projectId]/clips/route.ts b/src/app/api/novel-promotion/[projectId]/clips/route.ts index c01ab51..69ba8f3 100644 --- a/src/app/api/novel-promotion/[projectId]/clips/route.ts +++ b/src/app/api/novel-promotion/[projectId]/clips/route.ts @@ -24,11 +24,7 @@ export const POST = apiHandler(async ( include: { characters: true, locations: true }, }) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/novel-promotion/[projectId]/episodes/split/route.ts b/src/app/api/novel-promotion/[projectId]/episodes/split/route.ts index f11bd05..7e9c285 100644 --- a/src/app/api/novel-promotion/[projectId]/episodes/split/route.ts +++ b/src/app/api/novel-promotion/[projectId]/episodes/split/route.ts @@ -14,11 +14,7 @@ export const POST = apiHandler(async ( const { projectId } = await params const authResult = await requireProjectAuthLight(projectId) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const body = await request.json().catch(() => ({})) const content = typeof body?.content === 'string' ? body.content : '' diff --git a/src/app/api/novel-promotion/[projectId]/route.ts b/src/app/api/novel-promotion/[projectId]/route.ts index 2adb988..bedea06 100644 --- a/src/app/api/novel-promotion/[projectId]/route.ts +++ b/src/app/api/novel-promotion/[projectId]/route.ts @@ -276,10 +276,6 @@ export const PATCH = apiHandler(async ( const body = await request.json() - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } - const currentProjectConfig = await prisma.novelPromotionProject.findUnique({ where: { projectId }, select: { diff --git a/src/app/api/novel-promotion/[projectId]/screenplay-conversion/route.ts b/src/app/api/novel-promotion/[projectId]/screenplay-conversion/route.ts index 77155ce..6389436 100644 --- a/src/app/api/novel-promotion/[projectId]/screenplay-conversion/route.ts +++ b/src/app/api/novel-promotion/[projectId]/screenplay-conversion/route.ts @@ -22,11 +22,7 @@ export const POST = apiHandler(async ( const authResult = await requireProjectAuth(projectId) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/novel-promotion/[projectId]/script-to-storyboard-stream/route.ts b/src/app/api/novel-promotion/[projectId]/script-to-storyboard-stream/route.ts index b01492d..8e6e42d 100644 --- a/src/app/api/novel-promotion/[projectId]/script-to-storyboard-stream/route.ts +++ b/src/app/api/novel-promotion/[projectId]/script-to-storyboard-stream/route.ts @@ -22,11 +22,7 @@ export const POST = apiHandler(async ( include: { characters: true, locations: true }, }) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/novel-promotion/[projectId]/story-to-script-stream/route.ts b/src/app/api/novel-promotion/[projectId]/story-to-script-stream/route.ts index 8076824..3622c50 100644 --- a/src/app/api/novel-promotion/[projectId]/story-to-script-stream/route.ts +++ b/src/app/api/novel-promotion/[projectId]/story-to-script-stream/route.ts @@ -26,11 +26,7 @@ export const POST = apiHandler(async ( include: { characters: true, locations: true }, }) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/novel-promotion/[projectId]/voice-analyze/route.ts b/src/app/api/novel-promotion/[projectId]/voice-analyze/route.ts index b694ce0..6122376 100644 --- a/src/app/api/novel-promotion/[projectId]/voice-analyze/route.ts +++ b/src/app/api/novel-promotion/[projectId]/voice-analyze/route.ts @@ -22,11 +22,7 @@ export const POST = apiHandler(async ( const authResult = await requireProjectAuthLight(projectId) if (isErrorResponse(authResult)) return authResult - const { session, project } = authResult - - if (project.mode !== 'novel-promotion') { - throw new ApiError('INVALID_PARAMS') - } + const { session } = authResult const asyncTaskResponse = await maybeSubmitLLMTask({ request, diff --git a/src/app/api/projects/[projectId]/route.ts b/src/app/api/projects/[projectId]/route.ts index 9b2d0de..afb2cf1 100644 --- a/src/app/api/projects/[projectId]/route.ts +++ b/src/app/api/projects/[projectId]/route.ts @@ -44,8 +44,8 @@ export const GET = apiHandler(async ( data: { lastAccessedAt: new Date() } }).catch(err => _ulogError('更新访问时间失败:', err)) - // 这个API只返回基础项目信息 - // 模式特定的数据应该通过各自的API获取(如 /api/novel-promotion/[projectId]) + // 这个 API 只返回基础项目信息 + // 项目附属业务数据通过各自的 API 获取(如 /api/novel-promotion/[projectId]) const projectWithSignedUrls = addSignedUrlsToProject(project) return NextResponse.json({ project: projectWithSignedUrls }) diff --git a/src/app/api/projects/route.ts b/src/app/api/projects/route.ts index 65f7ccc..9a40276 100644 --- a/src/app/api/projects/route.ts +++ b/src/app/api/projects/route.ts @@ -188,12 +188,11 @@ export const POST = apiHandler(async (request: NextRequest) => { where: { userId: session.user.id } }) - // 创建基础项目(mode 固定为 novel-promotion) + // 创建基础项目 const project = await prisma.project.create({ data: { name: name.trim(), description: description?.trim() || null, - mode: 'novel-promotion', userId: session.user.id } }) diff --git a/src/lib/home/create-project-launch.ts b/src/lib/home/create-project-launch.ts index 35b19a2..2f1ca32 100644 --- a/src/lib/home/create-project-launch.ts +++ b/src/lib/home/create-project-launch.ts @@ -113,7 +113,6 @@ export async function createHomeProjectLaunch({ body: JSON.stringify({ name: projectName, description: storyText, - mode: 'novel-promotion', }), }) diff --git a/src/lib/modes.ts b/src/lib/modes.ts deleted file mode 100644 index f4e147a..0000000 --- a/src/lib/modes.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ProjectMode } from '@/types/project' - -// 重新导出 ProjectMode 类型,方便其他文件使用 -export type { ProjectMode } - -export interface ModeConfig { - id: ProjectMode - name: string - description: string - icon: string - color: string - available: boolean -} - -export const PROJECT_MODE: ModeConfig = { - id: 'novel-promotion', - name: '小说推文', - description: '从小说生成推广短视频', - icon: 'N', - color: 'purple', - available: true -} - -// 为了兼容性保留 -export const PROJECT_MODES: ModeConfig[] = [PROJECT_MODE] - -export function getModeConfig(mode: ProjectMode): ModeConfig | undefined { - return mode === 'novel-promotion' ? PROJECT_MODE : undefined -} diff --git a/src/lib/workers/handlers/analyze-global.ts b/src/lib/workers/handlers/analyze-global.ts index 7e7bb05..6b4e55a 100644 --- a/src/lib/workers/handlers/analyze-global.ts +++ b/src/lib/workers/handlers/analyze-global.ts @@ -30,15 +30,11 @@ export async function handleAnalyzeGlobalTask(job: Job) { where: { id: projectId }, select: { id: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelData = await prisma.novelPromotionProject.findUnique({ where: { projectId }, diff --git a/src/lib/workers/handlers/analyze-novel.ts b/src/lib/workers/handlers/analyze-novel.ts index 6f21972..d6638d7 100644 --- a/src/lib/workers/handlers/analyze-novel.ts +++ b/src/lib/workers/handlers/analyze-novel.ts @@ -49,15 +49,11 @@ export async function handleAnalyzeNovelTask(job: Job) { where: { id: projectId }, select: { id: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelData = await prisma.novelPromotionProject.findUnique({ where: { projectId }, diff --git a/src/lib/workers/handlers/clips-build.ts b/src/lib/workers/handlers/clips-build.ts index ce3fddc..701a87a 100644 --- a/src/lib/workers/handlers/clips-build.ts +++ b/src/lib/workers/handlers/clips-build.ts @@ -48,14 +48,11 @@ export async function handleClipsBuildTask(job: Job) { const project = await prisma.project.findUnique({ where: { id: projectId }, - select: { id: true, mode: true }, + select: { id: true }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelData = await prisma.novelPromotionProject.findUnique({ where: { projectId }, diff --git a/src/lib/workers/handlers/episode-split.ts b/src/lib/workers/handlers/episode-split.ts index 9a78402..ae76d8d 100644 --- a/src/lib/workers/handlers/episode-split.ts +++ b/src/lib/workers/handlers/episode-split.ts @@ -67,15 +67,11 @@ export async function handleEpisodeSplitTask(job: Job) { where: { id: projectId }, select: { id: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelProject = await prisma.novelPromotionProject.findFirst({ where: { projectId }, diff --git a/src/lib/workers/handlers/screenplay-convert.ts b/src/lib/workers/handlers/screenplay-convert.ts index 9992e1d..9660583 100644 --- a/src/lib/workers/handlers/screenplay-convert.ts +++ b/src/lib/workers/handlers/screenplay-convert.ts @@ -33,15 +33,11 @@ export async function handleScreenplayConvertTask(job: Job) { select: { id: true, name: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelData = await prisma.novelPromotionProject.findUnique({ where: { projectId }, diff --git a/src/lib/workers/handlers/script-to-storyboard.ts b/src/lib/workers/handlers/script-to-storyboard.ts index 9dad208..d6a2a17 100644 --- a/src/lib/workers/handlers/script-to-storyboard.ts +++ b/src/lib/workers/handlers/script-to-storyboard.ts @@ -82,15 +82,11 @@ export async function handleScriptToStoryboardTask(job: Job) { select: { id: true, name: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } // Register project name for per-project log file routing onProjectNameAvailable(projectId, project.name) diff --git a/src/lib/workers/handlers/story-to-script.ts b/src/lib/workers/handlers/story-to-script.ts index 9700597..7119cc1 100644 --- a/src/lib/workers/handlers/story-to-script.ts +++ b/src/lib/workers/handlers/story-to-script.ts @@ -77,15 +77,11 @@ export async function handleStoryToScriptTask(job: Job) { select: { id: true, name: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } // Register project name for per-project log file routing onProjectNameAvailable(projectId, project.name) diff --git a/src/lib/workers/handlers/voice-analyze.ts b/src/lib/workers/handlers/voice-analyze.ts index b320871..111866b 100644 --- a/src/lib/workers/handlers/voice-analyze.ts +++ b/src/lib/workers/handlers/voice-analyze.ts @@ -36,15 +36,11 @@ export async function handleVoiceAnalyzeTask(job: Job) { where: { id: projectId }, select: { id: true, - mode: true, }, }) if (!project) { throw new Error('Project not found') } - if (project.mode !== 'novel-promotion') { - throw new Error('Not a novel promotion project') - } const novelPromotionData = await prisma.novelPromotionProject.findUnique({ where: { projectId }, diff --git a/src/types/project.ts b/src/types/project.ts index babca69..5c6a032 100644 --- a/src/types/project.ts +++ b/src/types/project.ts @@ -1,10 +1,5 @@ import type { CapabilitySelections } from '@/lib/model-config-contract' -// ============================================ -// 项目模式类型 -// ============================================ -export type ProjectMode = 'novel-promotion' - // ============================================ // 基础项目类型 // ============================================ @@ -12,7 +7,6 @@ export interface BaseProject { id: string name: string description: string | null - mode: ProjectMode userId: string createdAt: Date updatedAt: Date diff --git a/tests/helpers/auth.ts b/tests/helpers/auth.ts index 6f7bb7f..1fdcc7b 100644 --- a/tests/helpers/auth.ts +++ b/tests/helpers/auth.ts @@ -81,7 +81,7 @@ export function installAuthMocks() { if (state.projectAuthMode === 'not_found') return notFoundResponse() return { session: state.session, - project: { id: projectId, userId: state.session.user.id, name: 'project', mode: 'novel-promotion' }, + project: { id: projectId, userId: state.session.user.id, name: 'project' }, novelData: { id: 'novel-data-id' }, } }, diff --git a/tests/helpers/fixtures.ts b/tests/helpers/fixtures.ts index 3c14adb..55bb342 100644 --- a/tests/helpers/fixtures.ts +++ b/tests/helpers/fixtures.ts @@ -15,12 +15,11 @@ export async function createFixtureUser() { }) } -export async function createFixtureProject(userId: string, mode: 'novel-promotion' | 'general' = 'novel-promotion') { +export async function createFixtureProject(userId: string) { const id = suffix() return await prisma.project.create({ data: { userId, - mode, name: `project_${id}`, }, }) diff --git a/tests/integration/api/contract/crud-routes.test.ts b/tests/integration/api/contract/crud-routes.test.ts index b7b48f8..3950d8f 100644 --- a/tests/integration/api/contract/crud-routes.test.ts +++ b/tests/integration/api/contract/crud-routes.test.ts @@ -68,14 +68,14 @@ vi.mock('@/lib/api-auth', () => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: 'novel-promotion' }, + project: { id: projectId, userId: 'user-1' }, } }, requireProjectAuthLight: async (projectId: string) => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: 'novel-promotion' }, + project: { id: projectId, userId: 'user-1' }, } }, } diff --git a/tests/integration/api/contract/direct-submit-routes.test.ts b/tests/integration/api/contract/direct-submit-routes.test.ts index a8b3fbb..aa87197 100644 --- a/tests/integration/api/contract/direct-submit-routes.test.ts +++ b/tests/integration/api/contract/direct-submit-routes.test.ts @@ -4,7 +4,6 @@ import { buildMockRequest } from '../../../helpers/request' type AuthState = { authenticated: boolean - projectMode: 'novel-promotion' | 'other' } type SubmitResult = { @@ -28,7 +27,6 @@ type DirectRouteCase = { const authState = vi.hoisted(() => ({ authenticated: true, - projectMode: 'novel-promotion', })) const submitTaskMock = vi.hoisted(() => vi.fn<(...args: unknown[]) => Promise>()) @@ -218,14 +216,14 @@ vi.mock('@/lib/api-auth', () => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: authState.projectMode }, + project: { id: projectId, userId: 'user-1' }, } }, requireProjectAuthLight: async (projectId: string) => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: authState.projectMode }, + project: { id: projectId, userId: 'user-1' }, } }, } @@ -534,7 +532,6 @@ describe('api contract - direct submit routes (behavior)', () => { beforeEach(() => { vi.clearAllMocks() authState.authenticated = true - authState.projectMode = 'novel-promotion' let seq = 0 submitTaskMock.mockImplementation(async () => ({ taskId: `task-${++seq}`, diff --git a/tests/integration/api/contract/llm-observe-routes.test.ts b/tests/integration/api/contract/llm-observe-routes.test.ts index 08f08b0..f94289f 100644 --- a/tests/integration/api/contract/llm-observe-routes.test.ts +++ b/tests/integration/api/contract/llm-observe-routes.test.ts @@ -5,7 +5,6 @@ import { buildMockRequest } from '../../../helpers/request' type AuthState = { authenticated: boolean - projectMode: 'novel-promotion' | 'other' } type LLMRouteCase = { @@ -23,7 +22,6 @@ type RouteContext = { const authState = vi.hoisted(() => ({ authenticated: true, - projectMode: 'novel-promotion', })) const maybeSubmitLLMTaskMock = vi.hoisted(() => @@ -77,14 +75,14 @@ vi.mock('@/lib/api-auth', () => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: authState.projectMode }, + project: { id: projectId, userId: 'user-1' }, } }, requireProjectAuthLight: async (projectId: string) => { if (!authState.authenticated) return unauthorized() return { session: { user: { id: 'user-1' } }, - project: { id: projectId, userId: 'user-1', mode: authState.projectMode }, + project: { id: projectId, userId: 'user-1' }, } }, } @@ -329,7 +327,6 @@ describe('api contract - llm observe routes (behavior)', () => { beforeEach(() => { vi.clearAllMocks() authState.authenticated = true - authState.projectMode = 'novel-promotion' maybeSubmitLLMTaskMock.mockResolvedValue( NextResponse.json({ success: true, diff --git a/tests/integration/api/specific/novel-promotion-project-art-style-validation.test.ts b/tests/integration/api/specific/novel-promotion-project-art-style-validation.test.ts index f6b59ff..e97e277 100644 --- a/tests/integration/api/specific/novel-promotion-project-art-style-validation.test.ts +++ b/tests/integration/api/specific/novel-promotion-project-art-style-validation.test.ts @@ -4,7 +4,7 @@ import { buildMockRequest } from '../../../helpers/request' const authMock = vi.hoisted(() => ({ requireProjectAuthLight: vi.fn(async () => ({ session: { user: { id: 'user-1', name: 'User 1' } }, - project: { id: 'project-1', userId: 'user-1', mode: 'novel-promotion', name: 'Project 1' }, + project: { id: 'project-1', userId: 'user-1', name: 'Project 1' }, })), isErrorResponse: vi.fn((value: unknown) => value instanceof Response), })) diff --git a/tests/integration/api/specific/panel-variant-route.test.ts b/tests/integration/api/specific/panel-variant-route.test.ts index 3238417..a4cecfa 100644 --- a/tests/integration/api/specific/panel-variant-route.test.ts +++ b/tests/integration/api/specific/panel-variant-route.test.ts @@ -27,7 +27,7 @@ type StoryboardRecord = { const authMock = vi.hoisted(() => ({ requireProjectAuthLight: vi.fn(async () => ({ session: { user: { id: 'user-1' } }, - project: { id: 'project-1', userId: 'user-1', mode: 'novel-promotion' }, + project: { id: 'project-1', userId: 'user-1' }, })), isErrorResponse: vi.fn((value: unknown) => value instanceof Response), })) diff --git a/tests/integration/api/specific/project-create-default-audio-model.test.ts b/tests/integration/api/specific/project-create-default-audio-model.test.ts index 4952629..1a0dc9f 100644 --- a/tests/integration/api/specific/project-create-default-audio-model.test.ts +++ b/tests/integration/api/specific/project-create-default-audio-model.test.ts @@ -28,7 +28,6 @@ const prismaMock = vi.hoisted(() => ({ id: 'project-1', name: 'Test Project', description: null, - mode: 'novel-promotion', userId: 'user-1', })), }, @@ -60,6 +59,13 @@ describe('api specific - project create default audio model', () => { const res = await mod.POST(req, routeContext) expect(res.status).toBe(201) + expect(prismaMock.project.create).toHaveBeenCalledWith({ + data: { + name: 'Test Project', + description: null, + userId: 'user-1', + }, + }) expect(prismaMock.novelPromotionProject.create).toHaveBeenCalledWith({ data: expect.objectContaining({ projectId: 'project-1', diff --git a/tests/integration/api/specific/speaker-voice-provider-contract.test.ts b/tests/integration/api/specific/speaker-voice-provider-contract.test.ts index ef15269..0faaaf8 100644 --- a/tests/integration/api/specific/speaker-voice-provider-contract.test.ts +++ b/tests/integration/api/specific/speaker-voice-provider-contract.test.ts @@ -4,7 +4,7 @@ import { buildMockRequest } from '../../../helpers/request' const authMock = vi.hoisted(() => ({ requireProjectAuthLight: vi.fn(async () => ({ session: { user: { id: 'user-1' } }, - project: { id: 'project-1', userId: 'user-1', mode: 'novel-promotion' }, + project: { id: 'project-1', userId: 'user-1' }, })), isErrorResponse: vi.fn((value: unknown) => value instanceof Response), })) diff --git a/tests/integration/api/specific/voice-generate-default-audio-model.test.ts b/tests/integration/api/specific/voice-generate-default-audio-model.test.ts index 8a45979..095bacd 100644 --- a/tests/integration/api/specific/voice-generate-default-audio-model.test.ts +++ b/tests/integration/api/specific/voice-generate-default-audio-model.test.ts @@ -4,7 +4,7 @@ import { buildMockRequest } from '../../../helpers/request' const authMock = vi.hoisted(() => ({ requireProjectAuthLight: vi.fn(async () => ({ session: { user: { id: 'user-1' } }, - project: { id: 'project-1', userId: 'user-1', mode: 'novel-promotion' }, + project: { id: 'project-1', userId: 'user-1' }, })), isErrorResponse: vi.fn((value: unknown) => value instanceof Response), })) diff --git a/tests/integration/chain/text.chain.test.ts b/tests/integration/chain/text.chain.test.ts index e4f6723..6514653 100644 --- a/tests/integration/chain/text.chain.test.ts +++ b/tests/integration/chain/text.chain.test.ts @@ -14,7 +14,7 @@ const queueState = vi.hoisted(() => ({ const prismaMock = vi.hoisted(() => ({ project: { - findUnique: vi.fn(async () => ({ id: 'project-1', mode: 'novel-promotion' })), + findUnique: vi.fn(async () => ({ id: 'project-1' })), }, novelPromotionProject: { findFirst: vi.fn(async () => ({ id: 'np-project-1' })), diff --git a/tests/unit/home/create-project-launch.test.ts b/tests/unit/home/create-project-launch.test.ts index da666ec..cacdf25 100644 --- a/tests/unit/home/create-project-launch.test.ts +++ b/tests/unit/home/create-project-launch.test.ts @@ -45,7 +45,6 @@ describe('createHomeProjectLaunch', () => { body: JSON.stringify({ name: '开场白', description: '第一章内容', - mode: 'novel-promotion', }), }) expect(apiFetch).toHaveBeenNthCalledWith(2, '/api/novel-promotion/project-1', { diff --git a/tests/unit/worker/analyze-global.test.ts b/tests/unit/worker/analyze-global.test.ts index a8b4b5f..3040837 100644 --- a/tests/unit/worker/analyze-global.test.ts +++ b/tests/unit/worker/analyze-global.test.ts @@ -104,7 +104,7 @@ describe('worker analyze-global behavior', () => { beforeEach(() => { vi.clearAllMocks() - prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', mode: 'novel-promotion' }) + prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1' }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ id: 'np-project-1', diff --git a/tests/unit/worker/analyze-novel.test.ts b/tests/unit/worker/analyze-novel.test.ts index cf8ac01..4013b86 100644 --- a/tests/unit/worker/analyze-novel.test.ts +++ b/tests/unit/worker/analyze-novel.test.ts @@ -85,7 +85,6 @@ describe('worker analyze-novel behavior', () => { prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', - mode: 'novel-promotion', }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ diff --git a/tests/unit/worker/clips-build.test.ts b/tests/unit/worker/clips-build.test.ts index c650805..72ab078 100644 --- a/tests/unit/worker/clips-build.test.ts +++ b/tests/unit/worker/clips-build.test.ts @@ -85,7 +85,7 @@ describe('worker clips-build behavior', () => { beforeEach(() => { vi.clearAllMocks() - prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', mode: 'novel-promotion' }) + prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1' }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ id: 'np-project-1', diff --git a/tests/unit/worker/episode-split.test.ts b/tests/unit/worker/episode-split.test.ts index 55483b5..6c0d7ea 100644 --- a/tests/unit/worker/episode-split.test.ts +++ b/tests/unit/worker/episode-split.test.ts @@ -4,7 +4,7 @@ import { TASK_TYPE, type TaskJobData } from '@/lib/task/types' const prismaMock = vi.hoisted(() => ({ project: { - findUnique: vi.fn(async () => ({ id: 'project-1', mode: 'novel-promotion' })), + findUnique: vi.fn(async () => ({ id: 'project-1' })), }, novelPromotionProject: { findFirst: vi.fn(async () => ({ id: 'np-project-1' })), diff --git a/tests/unit/worker/screenplay-convert.test.ts b/tests/unit/worker/screenplay-convert.test.ts index bbf1ee0..6c8eae5 100644 --- a/tests/unit/worker/screenplay-convert.test.ts +++ b/tests/unit/worker/screenplay-convert.test.ts @@ -79,7 +79,6 @@ describe('worker screenplay-convert behavior', () => { prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', name: 'Project One', - mode: 'novel-promotion', }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ diff --git a/tests/unit/worker/script-to-storyboard.test.ts b/tests/unit/worker/script-to-storyboard.test.ts index 7c8fb95..4bd9591 100644 --- a/tests/unit/worker/script-to-storyboard.test.ts +++ b/tests/unit/worker/script-to-storyboard.test.ts @@ -231,7 +231,6 @@ describe('worker script-to-storyboard behavior', () => { prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', name: 'Project One', - mode: 'novel-promotion', }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ diff --git a/tests/unit/worker/story-to-script.test.ts b/tests/unit/worker/story-to-script.test.ts index 1ae42de..8d355fa 100644 --- a/tests/unit/worker/story-to-script.test.ts +++ b/tests/unit/worker/story-to-script.test.ts @@ -124,7 +124,6 @@ describe('worker story-to-script behavior', () => { prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', name: 'Project One', - mode: 'novel-promotion', }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ diff --git a/tests/unit/worker/voice-analyze.test.ts b/tests/unit/worker/voice-analyze.test.ts index ba2b71b..53244e6 100644 --- a/tests/unit/worker/voice-analyze.test.ts +++ b/tests/unit/worker/voice-analyze.test.ts @@ -82,7 +82,7 @@ describe('worker voice-analyze behavior', () => { txState.createdRows = [] txState.deletedWhereClauses = [] - prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1', mode: 'novel-promotion' }) + prismaMock.project.findUnique.mockResolvedValue({ id: 'project-1' }) prismaMock.novelPromotionProject.findUnique.mockResolvedValue({ id: 'np-project-1', analysisModel: 'llm::analysis-1',