mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-21 12:11:09 +10:00
Rearchitecture for v0.4.0 (#197)
* feat: database redist support * feat: rearchitecture of database schemas, migration reset, and #180 * feat: import redists * fix: giantbomb logging bug * feat: partial user platform support + statusMessage -> message * feat: add user platform filters to store view * fix: sanitize svg uploads ... copilot suggested this I feel dirty. * feat: beginnings of platform & redist management * feat: add server side redist patching * fix: update drop-base commit * feat: import of custom platforms & file extensions * fix: redelete platform * fix: remove platform * feat: uninstall commands, new R UI * checkpoint: before migrating to nuxt v4 * update to nuxt 4 * fix: fixes for Nuxt v4 update * fix: remaining type issues * feat: initial feedback to import other kinds of versions * working commit * fix: lint * feat: redist import
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
import aclManager from "~/server/internal/acls";
|
||||
import libraryManager from "~/server/internal/library";
|
||||
import aclManager from "~~/server/internal/acls";
|
||||
import libraryManager from "~~/server/internal/library";
|
||||
|
||||
export default defineEventHandler(async (h3) => {
|
||||
const allowed = await aclManager.allowSystemACL(h3, ["game:delete"]);
|
||||
@ -7,7 +7,7 @@ export default defineEventHandler(async (h3) => {
|
||||
|
||||
const gameId = getRouterParam(h3, "id")!;
|
||||
|
||||
libraryManager.deleteGame(gameId);
|
||||
await libraryManager.deleteGame(gameId);
|
||||
|
||||
return {};
|
||||
});
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import type { GameVersion } from "~/prisma/client/client";
|
||||
import aclManager from "~/server/internal/acls";
|
||||
import prisma from "~/server/internal/db/database";
|
||||
import libraryManager from "~/server/internal/library";
|
||||
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, ["game:read"]);
|
||||
@ -15,24 +14,32 @@ export default defineEventHandler(async (h3) => {
|
||||
},
|
||||
include: {
|
||||
versions: {
|
||||
orderBy: {
|
||||
versionIndex: "asc",
|
||||
},
|
||||
omit: {
|
||||
dropletManifest: true,
|
||||
},
|
||||
include: {
|
||||
gameVersions: {
|
||||
include: {
|
||||
install: true,
|
||||
uninstall: true,
|
||||
launches: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
tags: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!game || !game.libraryId)
|
||||
throw createError({ statusCode: 404, statusMessage: "Game ID not found" });
|
||||
throw createError({ statusCode: 404, message: "Game ID not found" });
|
||||
|
||||
const getGameVersionSize = async (version: GameVersion) => {
|
||||
const getGameVersionSize = async (
|
||||
version: Omit<(typeof game)["versions"][number], "dropletManifest">,
|
||||
) => {
|
||||
const size = await libraryManager.getGameVersionSize(
|
||||
gameId,
|
||||
version.versionName,
|
||||
version.versionId,
|
||||
);
|
||||
return { ...version, size };
|
||||
};
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import aclManager from "~/server/internal/acls";
|
||||
import prisma from "~/server/internal/db/database";
|
||||
import aclManager from "~~/server/internal/acls";
|
||||
import prisma from "~~/server/internal/db/database";
|
||||
|
||||
export default defineEventHandler(async (h3) => {
|
||||
const allowed = await aclManager.allowSystemACL(h3, ["game:update"]);
|
||||
|
||||
@ -1,7 +1,13 @@
|
||||
import type { Prisma } from "~/prisma/client/client";
|
||||
import aclManager from "~/server/internal/acls";
|
||||
import prisma from "~/server/internal/db/database";
|
||||
import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
|
||||
import { ArkErrors, type } from "arktype";
|
||||
import type { Prisma } from "~~/prisma/client/client";
|
||||
import aclManager from "~~/server/internal/acls";
|
||||
import prisma from "~~/server/internal/db/database";
|
||||
import { handleFileUpload } from "~~/server/internal/utils/handlefileupload";
|
||||
|
||||
const UpdateMetadata = type({
|
||||
name: "string?",
|
||||
description: "string?",
|
||||
});
|
||||
|
||||
export default defineEventHandler(async (h3) => {
|
||||
const allowed = await aclManager.allowSystemACL(h3, ["game:update"]);
|
||||
@ -11,7 +17,7 @@ export default defineEventHandler(async (h3) => {
|
||||
if (!form)
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: "This endpoint requires multipart form data.",
|
||||
message: "This endpoint requires multipart form data.",
|
||||
});
|
||||
|
||||
const gameId = getRouterParam(h3, "id")!;
|
||||
@ -20,20 +26,20 @@ export default defineEventHandler(async (h3) => {
|
||||
if (!uploadResult)
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: "Failed to upload file",
|
||||
message: "Failed to upload file",
|
||||
});
|
||||
|
||||
const [ids, options, pull, dump] = uploadResult;
|
||||
|
||||
const id = ids.at(0);
|
||||
|
||||
// handleFileUpload reads the rest of the options for us.
|
||||
const name = options.name;
|
||||
const description = options.description;
|
||||
const body = UpdateMetadata(options);
|
||||
if (body instanceof ArkErrors)
|
||||
throw createError({ statusCode: 400, message: body.summary });
|
||||
|
||||
const updateModel: Prisma.GameUpdateInput = {
|
||||
mName: name,
|
||||
mShortDescription: description,
|
||||
...(body.name ? { mName: body.name } : undefined),
|
||||
...(body.description ? { mShortDescription: body.description } : undefined),
|
||||
};
|
||||
|
||||
// handle if user uploaded new icon
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { type } from "arktype";
|
||||
import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
|
||||
import aclManager from "~/server/internal/acls";
|
||||
import prisma from "~/server/internal/db/database";
|
||||
import { readDropValidatedBody, throwingArktype } from "~~/server/arktype";
|
||||
import aclManager from "~~/server/internal/acls";
|
||||
import prisma from "~~/server/internal/db/database";
|
||||
|
||||
const PatchTags = type({
|
||||
tags: "string[]",
|
||||
|
||||
Reference in New Issue
Block a user