Files
drop/server/api/v1/admin/import/massversion/index.get.ts
T
DecDuck dbe34684d8 Paginated admin library & upgrade manifests (#351)
* feat: new page layout + endpoint

* feat: non-parallel mass import

* feat: paginated admin library

* feat: lint and performance improvement

* feat: library filter util

* feat: link frontend features to backend

* fix: lint

* fix: small fixes

* feat: bump torrential

* fix: lint
2026-02-25 02:17:33 +11:00

55 lines
1.3 KiB
TypeScript

import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";
import { libraryManager } from "~/server/internal/library";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["import:version:read"]);
if (!allowed) throw createError({ statusCode: 403 });
const games = await prisma.game.findMany({
select: {
id: true,
mName: true,
mIconObjectId: true,
versions: {
select: {
versionPath: true,
},
},
unimportedGameVersions: {
select: {
id: true,
versionName: true,
},
},
libraryId: true,
libraryPath: true,
},
});
const unimportedVersions = await Promise.all(
games.map(async (v) => ({
id: v.id,
name: v.mName,
icon: v.mIconObjectId,
versions: await libraryManager.fetchUnimportedGameVersions(
v.libraryId,
v.libraryPath,
{
gameId: v.id,
versions: v.versions
.map((v) => v.versionPath)
.filter((v) => v !== null),
depotVersions: v.unimportedGameVersions,
},
),
})),
);
const onlyUnimported = unimportedVersions.filter(
(v) => v.versions && v.versions.length > 0,
);
return onlyUnimported;
});