fix media storage get

This commit is contained in:
Marco Pedone 2026-05-26 14:28:13 +02:00
parent abb9dcfd36
commit 63a1bf2a8a
2 changed files with 47 additions and 12 deletions

View file

@ -1,10 +1,14 @@
import fs from "node:fs";
import path from "node:path";
import type { NextApiRequest, NextApiResponse } from "next";
import { storageId } from "~/schemas/public/Storage";
import {
type MediaStorage,
mediaStorageId,
} from "~/schemas/public/MediaStorage";
import { type Storage, storageId } from "~/schemas/public/Storage";
import { TOKEN_CONFIG } from "~/server/auth/configs";
import { verifyToken } from "~/server/auth/jwt";
import { getFile } from "~/server/services/storage.service";
import { getFile, getMediaFile } from "~/server/services/storage.service";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
@ -55,19 +59,33 @@ export default async function handler(
return res.status(401);
}
}
const parsedId = storageId.safeParse(id);
if (!parsedId.success) {
if (isImageRequest || isNextImageRequest) {
return getFallback("fallback-image.png", req, res);
let file: Storage | MediaStorage | undefined;
if (isImageRequest || isNextImageRequest || isVideoRequest) {
const parsedId = mediaStorageId.safeParse(id);
if (!parsedId.success) {
if (isImageRequest || isNextImageRequest) {
return getFallback("fallback-image.png", req, res);
}
if (isVideoRequest) {
return getFallback("fallback-video.png", req, res);
}
return res.status(404).json({ error: "Invalid input id" });
}
if (isVideoRequest) {
return getFallback("fallback-video.png", req, res);
file = await getMediaFile(parsedId.data);
} else {
const parsedId = storageId.safeParse(id);
if (!parsedId.success) {
if (isImageRequest || isNextImageRequest) {
return getFallback("fallback-image.png", req, res);
}
if (isVideoRequest) {
return getFallback("fallback-video.png", req, res);
}
return res.status(404).json({ error: "Invalid input id" });
}
return res.status(404).json({ error: "Invalid input id" });
file = await getFile(parsedId.data);
}
const file = await getFile(parsedId.data);
if (!file) {
if (isImageRequest || isNextImageRequest) {
return getFallback("fallback-image.png", req, res);

View file

@ -1,4 +1,5 @@
import { TRPCError } from "@trpc/server";
import type { MediaStorageId } from "~/schemas/public/MediaStorage";
import type {
Storage,
StorageId,
@ -108,6 +109,22 @@ export const getFile = async (fileId: StorageId) => {
}
};
export const getMediaFile = async (fileId: MediaStorageId) => {
try {
return await db
.$pickTables<"media_storage">()
.selectFrom("media_storage")
.selectAll()
.where("id", "=", fileId)
.executeTakeFirst();
} catch (e) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: `Failed to get media_file: ${(e as Error).message}`,
});
}
};
export const editFile = async (fileId: StorageId, data: StorageUpdate) => {
try {
await db