1
0
Fork 0
polaris-task-force/src/collections/server/MissionFiles.ts

55 lines
1.3 KiB
TypeScript

import { CollectionConfig } from "payload";
import { isDeveloper } from "@/utils/access-control/isRole";
export const MissionFiles: CollectionConfig = {
slug: "mission-files",
access: {
create: isDeveloper,
update: isDeveloper,
delete: isDeveloper,
read: isDeveloper,
},
admin: {
group: "Server",
},
fields: [
{
name: "missionFileName",
type: "text",
required: true,
},
{
name: "author",
type: "relationship",
relationTo: "users",
required: true,
},
],
upload: {
mimeTypes: ["application/octet-stream"],
},
hooks: {
beforeValidate: [
async ({ data, req }) => {
// Enforce .pbo extension on uploaded filename
// For direct file uploads, req.files?.file?.name is typically present
const file = (req as any)?.files?.file;
const name: string | undefined =
file?.name ??
(typeof data?.filename === "string" ? data.filename : undefined) ??
(typeof data?.file === "string" ? data.file : undefined);
if (!name || !name.toLowerCase().endsWith(".pbo")) {
throw new Error("Only .pbo files are allowed.");
}
// Optional: store clean filename (without path)
if (data) {
data.missionFileName = name;
}
return data;
},
],
},
};