import { CollectionConfig } from "payload"; import { requirePermission, hasPermission } from "@/utils/access-control/hasPermission"; export const MissionAttendances: CollectionConfig = { slug: "mission-attendances", admin: { group: "Intelligence", defaultColumns: ["mission", "user", "response"], }, access: { read: async ({ req }) => !!req.user, create: async ({ req, data }) => { if (!req.user || !data) return false; return await hasPermission(req.payload, req.user, "mission-attendances:create"); }, update: async ({ req, data, id }) => { if (!req.user || typeof id !== "number") return false; if (await hasPermission(req.payload, req.user, "mission-attendances:update")) return true; const ownerId = typeof data?.user === "object" ? data.user?.id : data?.user; if (ownerId === req.user.id) return true; const doc = (await req.payload .findByID({ collection: "mission-attendances", id, depth: 0, overrideAccess: true, }) .catch(() => null)) as unknown as { user?: number | { id: number } } | null; if (!doc) return false; const docOwner = typeof doc.user === "object" ? doc.user?.id : doc.user; return docOwner === req.user.id; }, delete: async ({ req }) => { return await hasPermission(req.payload, req.user, "mission-attendances:delete"); }, }, fields: [ { name: "mission", type: "relationship", relationTo: "missions", required: true, index: true, }, { name: "user", type: "relationship", relationTo: "users", required: true, }, { name: "response", type: "select", required: true, options: [ { label: "Yes", value: "yes" }, { label: "No", value: "no" }, { label: "Tentative", value: "tentative" }, ], }, ], };