forked from 77media/video-flow
238 lines
5.8 KiB
TypeScript
238 lines
5.8 KiB
TypeScript
/**
|
|
* 单个编辑点API路由
|
|
* 提供单个编辑点的更新和删除操作
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
import { EditPoint } from '@/components/pages/work-flow/video-edit/types';
|
|
|
|
// 引用主路由的存储(实际应用中应使用共享数据库)
|
|
// 这里我们需要一个简单的方式来共享数据
|
|
let editPointsStorage: EditPoint[] = [];
|
|
|
|
// 获取存储的辅助函数
|
|
function getEditPointsStorage(): EditPoint[] {
|
|
// 在实际应用中,这里应该从数据库获取
|
|
return editPointsStorage;
|
|
}
|
|
|
|
function setEditPointsStorage(points: EditPoint[]): void {
|
|
// 在实际应用中,这里应该保存到数据库
|
|
editPointsStorage = points;
|
|
}
|
|
|
|
/**
|
|
* 更新编辑点
|
|
* PUT /api/video-edit/edit-points/[id]
|
|
*/
|
|
export async function PUT(
|
|
request: NextRequest,
|
|
{ params }: { params: { id: string } }
|
|
) {
|
|
try {
|
|
const { id } = params;
|
|
const body = await request.json();
|
|
const { description, status, position_x, position_y } = body;
|
|
|
|
console.log('✏️ 更新编辑点请求:', { id, body });
|
|
|
|
if (!id) {
|
|
return NextResponse.json({
|
|
code: 400,
|
|
successful: false,
|
|
message: 'Edit point ID is required',
|
|
data: null
|
|
}, { status: 400 });
|
|
}
|
|
|
|
const storage = getEditPointsStorage();
|
|
const editPointIndex = storage.findIndex(point => point.id === id);
|
|
|
|
if (editPointIndex === -1) {
|
|
return NextResponse.json({
|
|
code: 404,
|
|
successful: false,
|
|
message: 'Edit point not found',
|
|
data: null
|
|
}, { status: 404 });
|
|
}
|
|
|
|
// 更新编辑点
|
|
const editPoint = storage[editPointIndex];
|
|
|
|
if (description !== undefined) {
|
|
editPoint.description = description;
|
|
}
|
|
|
|
if (status !== undefined) {
|
|
editPoint.status = status;
|
|
}
|
|
|
|
if (position_x !== undefined && position_y !== undefined) {
|
|
editPoint.position = { x: position_x, y: position_y };
|
|
}
|
|
|
|
editPoint.updatedAt = new Date().toISOString();
|
|
|
|
// 保存更新
|
|
setEditPointsStorage(storage);
|
|
|
|
// 转换为API响应格式
|
|
const apiResponse = {
|
|
id: editPoint.id,
|
|
videoId: editPoint.videoId,
|
|
projectId: editPoint.projectId,
|
|
userId: editPoint.userId,
|
|
position: editPoint.position,
|
|
timestamp: editPoint.timestamp,
|
|
description: editPoint.description,
|
|
status: editPoint.status,
|
|
createdAt: editPoint.createdAt,
|
|
updatedAt: editPoint.updatedAt
|
|
};
|
|
|
|
const response = {
|
|
code: 0,
|
|
successful: true,
|
|
message: 'Edit point updated successfully',
|
|
data: apiResponse
|
|
};
|
|
|
|
console.log('✅ 编辑点更新成功:', response.data);
|
|
return NextResponse.json(response);
|
|
|
|
} catch (error) {
|
|
console.error('❌ 更新编辑点失败:', error);
|
|
return NextResponse.json({
|
|
code: 500,
|
|
successful: false,
|
|
message: 'Internal server error',
|
|
data: null
|
|
}, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除编辑点
|
|
* DELETE /api/video-edit/edit-points/[id]
|
|
*/
|
|
export async function DELETE(
|
|
request: NextRequest,
|
|
{ params }: { params: { id: string } }
|
|
) {
|
|
try {
|
|
const { id } = params;
|
|
|
|
console.log('🗑️ 删除编辑点请求:', { id });
|
|
|
|
if (!id) {
|
|
return NextResponse.json({
|
|
code: 400,
|
|
successful: false,
|
|
message: 'Edit point ID is required',
|
|
data: null
|
|
}, { status: 400 });
|
|
}
|
|
|
|
const storage = getEditPointsStorage();
|
|
const editPointIndex = storage.findIndex(point => point.id === id);
|
|
|
|
if (editPointIndex === -1) {
|
|
return NextResponse.json({
|
|
code: 404,
|
|
successful: false,
|
|
message: 'Edit point not found',
|
|
data: null
|
|
}, { status: 404 });
|
|
}
|
|
|
|
// 删除编辑点
|
|
storage.splice(editPointIndex, 1);
|
|
setEditPointsStorage(storage);
|
|
|
|
const response = {
|
|
code: 0,
|
|
successful: true,
|
|
message: 'Edit point deleted successfully',
|
|
data: null
|
|
};
|
|
|
|
console.log('✅ 编辑点删除成功');
|
|
return NextResponse.json(response);
|
|
|
|
} catch (error) {
|
|
console.error('❌ 删除编辑点失败:', error);
|
|
return NextResponse.json({
|
|
code: 500,
|
|
successful: false,
|
|
message: 'Internal server error',
|
|
data: null
|
|
}, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 提交编辑请求
|
|
* POST /api/video-edit/edit-points/[id]/submit
|
|
*/
|
|
export async function POST(
|
|
request: NextRequest,
|
|
{ params }: { params: { id: string } }
|
|
) {
|
|
try {
|
|
const { id } = params;
|
|
|
|
console.log('📤 提交编辑请求:', { id });
|
|
|
|
if (!id) {
|
|
return NextResponse.json({
|
|
code: 400,
|
|
successful: false,
|
|
message: 'Edit point ID is required',
|
|
data: null
|
|
}, { status: 400 });
|
|
}
|
|
|
|
const storage = getEditPointsStorage();
|
|
const editPointIndex = storage.findIndex(point => point.id === id);
|
|
|
|
if (editPointIndex === -1) {
|
|
return NextResponse.json({
|
|
code: 404,
|
|
successful: false,
|
|
message: 'Edit point not found',
|
|
data: null
|
|
}, { status: 404 });
|
|
}
|
|
|
|
// 更新状态为处理中
|
|
const editPoint = storage[editPointIndex];
|
|
editPoint.status = 'processing';
|
|
editPoint.updatedAt = new Date().toISOString();
|
|
|
|
setEditPointsStorage(storage);
|
|
|
|
// 这里可以添加实际的编辑处理逻辑
|
|
// 比如发送到AI编辑服务、添加到处理队列等
|
|
|
|
const response = {
|
|
code: 0,
|
|
successful: true,
|
|
message: 'Edit request submitted successfully',
|
|
data: null
|
|
};
|
|
|
|
console.log('✅ 编辑请求提交成功');
|
|
return NextResponse.json(response);
|
|
|
|
} catch (error) {
|
|
console.error('❌ 提交编辑请求失败:', error);
|
|
return NextResponse.json({
|
|
code: 500,
|
|
successful: false,
|
|
message: 'Internal server error',
|
|
data: null
|
|
}, { status: 500 });
|
|
}
|
|
}
|