Adds the npc-staffing and labor-classifications collections, a shared staffing field factory applied to both structure blueprints (Staffing Defaults group) and game structure instances, blueprint-derived staffing defaults on game structure create, staff-hiring toggles on Game Rules, and their database migrations. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
27 lines
1 KiB
TypeScript
27 lines
1 KiB
TypeScript
import type { Structure } from "@/payload-types";
|
|
|
|
export type StaffingDefaults = {
|
|
readonly maintenanceCost: number;
|
|
readonly laborRequirements: NonNullable<Structure["laborRequirements"]>;
|
|
readonly staffPositions: NonNullable<Structure["staffPositions"]>;
|
|
};
|
|
|
|
export function staffingDefaultsFromBlueprint(blueprint: Structure): StaffingDefaults {
|
|
return {
|
|
maintenanceCost: blueprint.maintenanceCost ?? 0,
|
|
laborRequirements: (blueprint.laborRequirements ?? []).map((requirement) => ({
|
|
classification:
|
|
typeof requirement.classification === "object"
|
|
? requirement.classification.id
|
|
: requirement.classification,
|
|
requiredHeadcount: requirement.requiredHeadcount,
|
|
maxHeadcount: requirement.maxHeadcount ?? null,
|
|
enforcedSalary: requirement.enforcedSalary ?? null,
|
|
})),
|
|
staffPositions: (blueprint.staffPositions ?? []).map((position) => ({
|
|
positionType: position.positionType,
|
|
max: position.max ?? null,
|
|
enforcedSalary: position.enforcedSalary ?? null,
|
|
})),
|
|
};
|
|
}
|