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; }, ], }, };