93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { getImages, deleteImage, getImageDetail } from '@/lib/db/images';
|
|
import { getProjectPath } from '@/lib/db/base';
|
|
import { db } from '@/lib/db/index';
|
|
import { importImagesFromDirectories } from '@/lib/services/images';
|
|
import fs from 'fs/promises';
|
|
import path from 'path';
|
|
|
|
// 获取图片列表
|
|
export async function GET(request, { params }) {
|
|
try {
|
|
const { projectId } = params;
|
|
const { searchParams } = new URL(request.url);
|
|
|
|
const page = parseInt(searchParams.get('page')) || 1;
|
|
const pageSize = parseInt(searchParams.get('pageSize')) || 20;
|
|
const imageName = searchParams.get('imageName') || '';
|
|
const hasQuestions = searchParams.get('hasQuestions');
|
|
const hasDatasets = searchParams.get('hasDatasets');
|
|
const simple = searchParams.get('simple');
|
|
|
|
const result = await getImages(projectId, page, pageSize, imageName, hasQuestions, hasDatasets, simple);
|
|
|
|
return NextResponse.json(result);
|
|
} catch (error) {
|
|
console.error('Failed to get images:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to get images' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
// 导入图片
|
|
export async function POST(request, { params }) {
|
|
try {
|
|
const { projectId } = params;
|
|
const { directories } = await request.json();
|
|
|
|
// 调用服务层处理图片导入
|
|
const result = await importImagesFromDirectories(projectId, directories);
|
|
|
|
return NextResponse.json(result);
|
|
} catch (error) {
|
|
console.error('Failed to import images:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to import images' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
// 删除图片
|
|
export async function DELETE(request, { params }) {
|
|
try {
|
|
const { projectId } = params;
|
|
const { searchParams } = new URL(request.url);
|
|
const imageId = searchParams.get('imageId');
|
|
|
|
if (!imageId) {
|
|
return NextResponse.json({ error: '缺少图片ID' }, { status: 400 });
|
|
}
|
|
|
|
// 获取图片信息
|
|
const image = await getImageDetail(imageId);
|
|
|
|
if (!image) {
|
|
return NextResponse.json({ error: '图片不存在' }, { status: 404 });
|
|
}
|
|
|
|
// 删除关联的数据集
|
|
await db.imageDatasets.deleteMany({
|
|
where: { imageId }
|
|
});
|
|
|
|
// 删除关联的问题
|
|
await db.questions.deleteMany({
|
|
where: { imageId }
|
|
});
|
|
|
|
// 删除文件
|
|
const projectPath = await getProjectPath(projectId);
|
|
const filePath = path.join(projectPath, 'images', image.imageName);
|
|
try {
|
|
await fs.unlink(filePath);
|
|
} catch (err) {
|
|
console.warn('删除文件失败:', err);
|
|
}
|
|
|
|
// 删除数据库记录
|
|
await deleteImage(imageId);
|
|
|
|
return NextResponse.json({ success: true });
|
|
} catch (error) {
|
|
console.error('Failed to delete image:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to delete image' }, { status: 500 });
|
|
}
|
|
}
|