Files
YG-Datasets/easy-dataset-main/app/api/projects/[projectId]/images/route.js

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 });
}
}