98 lines
3.8 KiB
TypeScript
98 lines
3.8 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { appleApiRequest } from "@/app/asc/api";
|
|
|
|
const DISPLAY_TYPE = "APP_IPHONE_65"; // iPhone 6.5" (6.7" Super Retina)
|
|
|
|
// GET /api/asc/screenshots?localizationId=xxx
|
|
// Returns the APP_IPHONE_65 screenshot set and its screenshots
|
|
export async function GET(req: NextRequest) {
|
|
const locId = req.nextUrl.searchParams.get("localizationId");
|
|
if (!locId) return NextResponse.json({ error: "localizationId gerekli" }, { status: 400 });
|
|
|
|
// 1. Fetch screenshot sets for this localization
|
|
const setsResult = await appleApiRequest(
|
|
`/appStoreVersionLocalizations/${locId}/appScreenshotSets?filter[screenshotDisplayType]=${DISPLAY_TYPE}&include=appScreenshots&limit=1`
|
|
);
|
|
if (setsResult.error) return NextResponse.json({ error: setsResult.error }, { status: 502 });
|
|
|
|
const sets = setsResult.data?.data ?? [];
|
|
if (sets.length === 0) {
|
|
return NextResponse.json({ set: null, screenshots: [] });
|
|
}
|
|
|
|
const set = sets[0];
|
|
// screenshots are included via ?include=appScreenshots
|
|
const included = setsResult.data?.included ?? [];
|
|
const screenshots = included.filter((r: { type: string }) => r.type === "appScreenshots");
|
|
|
|
return NextResponse.json({ set, screenshots });
|
|
}
|
|
|
|
// POST /api/asc/screenshots/reserve { localizationId, fileName, fileSize, md5 }
|
|
// Step 1: Creates screenshot set if needed, then creates the upload reservation
|
|
export async function POST(req: NextRequest) {
|
|
const body = await req.json();
|
|
const { localizationId, fileName, fileSize, md5 } = body ?? {};
|
|
|
|
if (!localizationId || !fileName || !fileSize)
|
|
return NextResponse.json({ error: "localizationId, fileName, fileSize gerekli" }, { status: 400 });
|
|
|
|
// 1. Find or create the APP_IPHONE_65 screenshot set
|
|
const setsResult = await appleApiRequest(
|
|
`/appStoreVersionLocalizations/${localizationId}/appScreenshotSets?filter[screenshotDisplayType]=${DISPLAY_TYPE}&limit=1`
|
|
);
|
|
if (setsResult.error) return NextResponse.json({ error: setsResult.error }, { status: 502 });
|
|
|
|
let setId: string;
|
|
if ((setsResult.data?.data ?? []).length > 0) {
|
|
setId = setsResult.data.data[0].id;
|
|
} else {
|
|
// Create the set
|
|
const createSet = await appleApiRequest(`/appScreenshotSets`, {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
data: {
|
|
type: "appScreenshotSets",
|
|
attributes: { screenshotDisplayType: DISPLAY_TYPE },
|
|
relationships: {
|
|
appStoreVersionLocalization: {
|
|
data: { type: "appStoreVersionLocalizations", id: localizationId },
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
});
|
|
if (createSet.error) return NextResponse.json({ error: createSet.error }, { status: 502 });
|
|
setId = createSet.data.data.id;
|
|
}
|
|
|
|
// 2. Create screenshot upload reservation
|
|
const reserveResult = await appleApiRequest(`/appScreenshots`, {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
data: {
|
|
type: "appScreenshots",
|
|
attributes: { fileName, fileSize, ...(md5 ? { md5 } : {}) },
|
|
relationships: {
|
|
appScreenshotSet: {
|
|
data: { type: "appScreenshotSets", id: setId },
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
});
|
|
|
|
if (reserveResult.error) return NextResponse.json({ error: reserveResult.error }, { status: 502 });
|
|
return NextResponse.json(reserveResult.data, { status: 201 });
|
|
}
|
|
|
|
// DELETE /api/asc/screenshots?screenshotId=xxx
|
|
export async function DELETE(req: NextRequest) {
|
|
const screenshotId = req.nextUrl.searchParams.get("screenshotId");
|
|
if (!screenshotId) return NextResponse.json({ error: "screenshotId gerekli" }, { status: 400 });
|
|
|
|
const result = await appleApiRequest(`/appScreenshots/${screenshotId}`, { method: "DELETE" });
|
|
if (result.error) return NextResponse.json({ error: result.error }, { status: 502 });
|
|
return new NextResponse(null, { status: 204 });
|
|
}
|