feat(missions): add generate-mission bin for next Saturday template
This commit is contained in:
parent
f065aa6796
commit
ad774121b0
2 changed files with 91 additions and 0 deletions
|
|
@ -155,6 +155,10 @@ export default buildConfig({
|
|||
scriptPath: path.resolve(dirname, "scripts/marketTick.ts"),
|
||||
key: "market-tick",
|
||||
},
|
||||
{
|
||||
scriptPath: path.resolve(dirname, "scripts/generateNextMission.ts"),
|
||||
key: "generate-mission",
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
// payloadCloudPlugin(),
|
||||
|
|
|
|||
87
src/scripts/generateNextMission.ts
Normal file
87
src/scripts/generateNextMission.ts
Normal 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);
|
||||
};
|
||||
Loading…
Reference in a new issue