1
0
Fork 0
polaris-task-force/src/collections/minigames/CustomRadioTests.ts
2026-09-08 14:41:18 -04:00

77 lines
1.8 KiB
TypeScript

import { CollectionConfig } from "payload";
import { requirePermission, hasPermission } from "@/utils/access-control/hasPermission";
export const CustomRadioTests: CollectionConfig = {
slug: "custom-radio-tests",
admin: {
group: "Minigames",
useAsTitle: "name",
defaultColumns: ["name", "author", "messageCount", "order", "published", "playCount"],
listSearchableFields: ["name"],
},
access: {
read: ({ req }) => !!req.user,
create: ({ req }) => !!req.user,
update: async ({ req }) => {
if (!req.user) return false;
if (await hasPermission(req.payload, req.user, "custom-radio-tests:update")) return true;
return { author: { equals: req.user.id } };
},
delete: requirePermission("custom-radio-tests:delete"),
},
fields: [
{
name: "name",
type: "text",
required: true,
maxLength: 100,
},
{
name: "author",
type: "relationship",
relationTo: "users",
required: true,
admin: {
description: "Player who authored this radio test.",
},
},
{
name: "messages",
type: "json",
required: true,
admin: {
description: "Array of message strings used as the typing pool.",
},
},
{
name: "messageCount",
type: "number",
required: true,
min: 1,
max: 100,
},
{
name: "order",
type: "select",
defaultValue: "fixed",
options: [
{ label: "Fixed Order", value: "fixed" },
{ label: "Shuffled", value: "shuffled" },
],
},
{
name: "published",
type: "checkbox",
defaultValue: true,
},
{
name: "playCount",
type: "number",
defaultValue: 0,
admin: {
readOnly: true,
},
},
],
timestamps: true,
};