dbe34684d8
* 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
55 lines
1.3 KiB
TypeScript
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;
|
|
});
|