123 lines
3.2 KiB
TypeScript
123 lines
3.2 KiB
TypeScript
// app/api/user-files/route.ts
|
|
import { NextRequest, NextResponse } from "next/server";
|
|
|
|
import { createUserFile } from "@/lib/dto/files";
|
|
import { checkUserStatus } from "@/lib/dto/user";
|
|
import { getCurrentUser } from "@/lib/session";
|
|
import { bytesToStorageValue } from "@/lib/utils";
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const user = checkUserStatus(await getCurrentUser());
|
|
if (user instanceof Response) return user;
|
|
|
|
const body = await request.json();
|
|
|
|
const requiredFields = [
|
|
"userId",
|
|
"name",
|
|
"originalName",
|
|
"mimeType",
|
|
"path",
|
|
"size",
|
|
"bucket",
|
|
];
|
|
const missingFields = requiredFields.filter((field) => !body[field]);
|
|
|
|
if (missingFields.length > 0) {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: `Missing required fields: ${missingFields.join(", ")}`,
|
|
},
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
const userFile = await createUserFile({
|
|
userId: body.userId,
|
|
name: body.name,
|
|
originalName: body.originalName,
|
|
mimeType: body.mimeType,
|
|
path: body.path,
|
|
etag: body.etag || "",
|
|
storageClass: body.storageClass || "",
|
|
channel: body.channel || "",
|
|
platform: body.platform || "",
|
|
providerName: body.providerName || "",
|
|
size: bytesToStorageValue(body.size),
|
|
bucket: body.bucket,
|
|
lastModified: body.lastModified
|
|
? new Date(body.lastModified)
|
|
: new Date(),
|
|
});
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: userFile,
|
|
message: "success",
|
|
});
|
|
} catch (error: any) {
|
|
console.error("Error creating user file:", error);
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: error.message || "Error creating user file",
|
|
},
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
}
|
|
|
|
// 批量创建用户文件数据
|
|
export async function PUT(request: NextRequest) {
|
|
try {
|
|
const user = checkUserStatus(await getCurrentUser());
|
|
if (user instanceof Response) return user;
|
|
|
|
const { files } = await request.json();
|
|
|
|
if (!Array.isArray(files)) {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: "File list must be an array",
|
|
},
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
const results = await Promise.allSettled(
|
|
files.map((file) => createUserFile(file)),
|
|
);
|
|
|
|
const successful = results.filter((r) => r.status === "fulfilled").length;
|
|
const failed = results.filter((r) => r.status === "rejected").length;
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: {
|
|
total: files.length,
|
|
successful,
|
|
failed,
|
|
results: results.map((result, index) => ({
|
|
index,
|
|
status: result.status,
|
|
data: result.status === "fulfilled" ? result.value : null,
|
|
error: result.status === "rejected" ? result.reason.message : null,
|
|
})),
|
|
},
|
|
message: `Complete: ${successful} success, ${failed} failed`,
|
|
});
|
|
} catch (error: any) {
|
|
console.error("Create user files failed:", error);
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: error.message || "Create user files failed",
|
|
},
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
}
|