Files
ftdl/app/api/apks/route.ts
tech e217d1c6c9 fix: resolve duplicate commit field and add commitId filter test
- Replace spread operator with explicit field selection to avoid
  duplicate commit field from getApks() and parseApkFilename()
- Add test case for commitId parameter filtering to ensure
  the filter parameter works correctly with new metadata extraction

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 22:17:31 +08:00

40 lines
1.2 KiB
TypeScript

// app/api/apks/route.ts
import { NextResponse } from 'next/server';
import { getApks } from '@/lib/fs-utils';
import { parseApkFilename } from '@/lib/apk-parser';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const project = searchParams.get('project');
const version = searchParams.get('version');
const commitId = searchParams.get('commit') || undefined;
if (!project || !version) {
return NextResponse.json(
{ error: 'Project and version parameters are required' },
{ status: 400 }
);
}
try {
const apks = await getApks(project, version, commitId);
const apksWithMetadata = apks.map(apk => {
const parsed = parseApkFilename(apk.name);
return {
name: apk.name,
size: apk.size,
environment: parsed.environment,
commit: parsed.commit,
modifiedAt: apk.modifiedAt.toISOString(),
downloadUrl: `/api/download?project=${encodeURIComponent(project)}&version=${encodeURIComponent(version)}&filename=${encodeURIComponent(apk.name)}`,
};
});
return NextResponse.json(apksWithMetadata);
} catch (error) {
return NextResponse.json(
{ error: 'Failed to fetch APK files' },
{ status: 500 }
);
}
}