1
0
Fork 0

feat(missions): add generate-mission bin for next Saturday template

This commit is contained in:
Jason Fraley 2026-08-12 12:38:55 -04:00
parent f065aa6796
commit ad774121b0
2 changed files with 91 additions and 0 deletions

View file

@ -155,6 +155,10 @@ export default buildConfig({
scriptPath: path.resolve(dirname, "scripts/marketTick.ts"), scriptPath: path.resolve(dirname, "scripts/marketTick.ts"),
key: "market-tick", key: "market-tick",
}, },
{
scriptPath: path.resolve(dirname, "scripts/generateNextMission.ts"),
key: "generate-mission",
},
], ],
plugins: [ plugins: [
// payloadCloudPlugin(), // payloadCloudPlugin(),

View file

@ -0,0 +1,87 @@
import type { SanitizedConfig } from "payload";
import { getPayload } from "payload";
export const script = async (config: SanitizedConfig) => {
const payload = await getPayload({ config });
payload.logger.info(
"[Generate Mission] Starting next mission template generation...",
);
const latest = await payload.find({
collection: "missions",
where: { operationType: { equals: "main" } },
sort: "-createdAt",
limit: 1,
depth: 0,
});
const source = latest.docs[0];
if (!source) {
payload.logger.info(
'[Generate Mission] No "main" operation mission found; skipping. Create the first one manually.',
);
process.exit(0);
}
// Same logic as the Missions collection startDateTime default: the upcoming
// Saturday at 20:00, always at least a week out.
const today = new Date();
const day = today.getDay();
const diff = (6 - day) % 7;
const nextSaturday = new Date(today);
nextSaturday.setDate(today.getDate() + diff + 7);
nextSaturday.setHours(20, 0, 0, 0);
const dateStamp = [
nextSaturday.getFullYear(),
String(nextSaturday.getMonth() + 1).padStart(2, "0"),
String(nextSaturday.getDate()).padStart(2, "0"),
].join("");
const codeName = `${source.codeName}-${dateStamp}`;
const existing = await payload.find({
collection: "missions",
where: { codeName: { equals: codeName } },
limit: 1,
depth: 0,
});
if (existing.docs.length > 0) {
payload.logger.info(
`[Generate Mission] Mission with codeName "${codeName}" already exists; skipping.`,
);
process.exit(0);
}
const {
id: _sourceId,
createdAt: _sourceCreatedAt,
updatedAt: _sourceUpdatedAt,
...template
} = source;
const mission = await payload.create({
collection: "missions",
data: {
...template,
codeName,
classification: {
...template.classification,
startDateTime: nextSaturday.toISOString(),
},
ownershipAndStatus: {
...template.ownershipAndStatus,
status: "Concept",
},
},
overrideAccess: true,
depth: 0,
});
payload.logger.info(
`[Generate Mission] Created next mission template: id=${mission.id} name="${mission.name}" codeName="${mission.codeName}" startDateTime=${mission.classification.startDateTime}`,
);
process.exit(0);
};