From c0563dae3012c48194551984dc3a9f07dab1439f Mon Sep 17 00:00:00 2001 From: Z8MB1E Date: Sun, 20 Sep 2026 02:45:00 -0400 Subject: [PATCH] chore(generated): regenerate types and schema, register operation migrations Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/migrations/index.ts | 332 +++++++------ src/payload-generated-schema.ts | 372 +++++++++++++++ src/payload-types.ts | 810 +++++++++++++++++++++++++++++++- 3 files changed, 1375 insertions(+), 139 deletions(-) diff --git a/src/migrations/index.ts b/src/migrations/index.ts index df50681..31e7608 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -1,411 +1,471 @@ -import * as migration_20260820_004157 from "./20260820_004157"; -import * as migration_20260825_220000 from "./20260825_220000"; -import * as migration_20260826_050000_repair_shims_auxiliary_tables from "./20260826_050000_repair_shims_auxiliary_tables"; -import * as migration_20260826_060000_add_game_servers_event_target from "./20260826_060000_add_game_servers_event_target"; -import * as migration_20260827_005757 from "./20260827_005757"; -import * as migration_20260827_022334_add_eod_minesweeper_best_flags from "./20260827_022334_add_eod_minesweeper_best_flags"; -import * as migration_20260827_213857_add_evaluations_collection from "./20260827_213857_add_evaluations_collection"; -import * as migration_20260827_233224_add_mission_completed_at from "./20260827_233224_add_mission_completed_at"; -import * as migration_20260828_011500_add_background_texture_preference from "./20260828_011500_add_background_texture_preference"; -import * as migration_20260828_041615_add_campaign_mode from "./20260828_041615_add_campaign_mode"; -import * as migration_20260828_044506 from "./20260828_044506"; -import * as migration_20260831_142503 from "./20260831_142503"; -import * as migration_20260831_180233_assignment_transfers from "./20260831_180233_assignment_transfers"; -import * as migration_20260901_014006_add_assignment_transfer_event_target from "./20260901_014006_add_assignment_transfer_event_target"; -import * as migration_20260901_213108_add_ticket_votes_and_edit_history from "./20260901_213108_add_ticket_votes_and_edit_history"; -import * as migration_20260901_222200_add_admin_page_permissions from "./20260901_222200_add_admin_page_permissions"; -import * as migration_20260902_195336_add_medal_backgrounds from "./20260902_195336_add_medal_backgrounds"; -import * as migration_20260903_035544 from "./20260903_035544"; -import * as migration_20260903_044047 from "./20260903_044047"; -import * as migration_20260903_053419 from "./20260903_053419"; -import * as migration_20260903_060000_add_radio_mode_stats from "./20260903_060000_add_radio_mode_stats"; -import * as migration_20260903_061000_add_radio_incorrect_counts from "./20260903_061000_add_radio_incorrect_counts"; -import * as migration_20260903_062000_add_aim_trainer_stats from "./20260903_062000_add_aim_trainer_stats"; -import * as migration_20260904_230838_add_wiki_collections from "./20260904_230838_add_wiki_collections"; -import * as migration_20260905_183940_base_management from "./20260905_183940_base_management"; -import * as migration_20260905_195456_labor_headcount from "./20260905_195456_labor_headcount"; -import * as migration_20260905_210310_labor_classifications from "./20260905_210310_labor_classifications"; -import * as migration_20260905_213824 from "./20260905_213824"; -import * as migration_20260905_215658 from "./20260905_215658"; -import * as migration_20260906_045502 from "./20260906_045502"; -import * as migration_20260906_050900_add_evaluation_reminders_field from "./20260906_050900_add_evaluation_reminders_field"; -import * as migration_20260906_061451_add_wiki_template_css from "./20260906_061451_add_wiki_template_css"; -import * as migration_20260906_063753_add_personal_excerpt_richtext from "./20260906_063753_add_personal_excerpt_richtext"; -import * as migration_20260906_065405_add_wiki_template_html from "./20260906_065405_add_wiki_template_html"; -import * as migration_20260906_100908_add_market_economy_state from "./20260906_100908_add_market_economy_state"; -import * as migration_20260906_165837_add_market_state_event_target from "./20260906_165837_add_market_state_event_target"; -import * as migration_20260906_202925_add_voice_submissions from "./20260906_202925_add_voice_submissions"; -import * as migration_20260907_012326_add_missions_created_by from "./20260907_012326_add_missions_created_by"; -import * as migration_20260907_013724_make_missions_campaign_optional from "./20260907_013724_make_missions_campaign_optional"; -import * as migration_20260907_041051_add_voice_script_spoiler from "./20260907_041051_add_voice_script_spoiler"; -import * as migration_20260907_043339_add_voice_script_description from "./20260907_043339_add_voice_script_description"; -import * as migration_20260907_044934_add_missions_discord_modlist_hash from "./20260907_044934_add_missions_discord_modlist_hash"; -import * as migration_20260907_083010_add_voice_submission_description from "./20260907_083010_add_voice_submission_description"; -import * as migration_20260907_090245_add_mission_ready_reminder_fields from "./20260907_090245_add_mission_ready_reminder_fields"; -import * as migration_20260907_120754_add_story_beats from "./20260907_120754_add_story_beats"; -import * as migration_20260907_124024_convert_story_beats_body_to_lexical from "./20260907_124024_convert_story_beats_body_to_lexical"; -import * as migration_20260908_152021_add_opord_recall_minigame_stats from "./20260908_152021_add_opord_recall_minigame_stats"; -import * as migration_20260908_172241_add_custom_minigame_collections from "./20260908_172241_add_custom_minigame_collections"; -import * as migration_20260908_193107_add_creator_xp_bank_field from "./20260908_193107_add_creator_xp_bank_field"; -import * as migration_20260908_194435_add_expose_edge_mines_field from "./20260908_194435_add_expose_edge_mines_field"; -import * as migration_20260909_153427_add_opord_recall_best_times from "./20260909_153427_add_opord_recall_best_times"; -import * as migration_20260909_223955_add_voice_script_draft_status from "./20260909_223955_add_voice_script_draft_status"; -import * as migration_20260910_221018_make_missions_codename_optional from "./20260910_221018_make_missions_codename_optional"; -import * as migration_20260910_222518_add_dashboard_layout_preference from "./20260910_222518_add_dashboard_layout_preference"; -import * as migration_20260911_044754_add_poker_minigame_stats from "./20260911_044754_add_poker_minigame_stats"; -import * as migration_20260911_052147_add_ribbon_submissions from "./20260911_052147_add_ribbon_submissions"; -import * as migration_20260911_201559_add_award_advancement_series from "./20260911_201559_add_award_advancement_series"; -import * as migration_20260912_051752_add_rank_promotion_ceiling from "./20260912_051752_add_rank_promotion_ceiling"; -import * as migration_20260912_071740_add_blackjack_minigame_stats from "./20260912_071740_add_blackjack_minigame_stats"; -import * as migration_20260912_231219_add_discord_cancelled_at from "./20260912_231219_add_discord_cancelled_at"; -import * as migration_20260914_153046_add_chip_bank from "./20260914_153046_add_chip_bank"; -import * as migration_20260914_171412_add_respawn_tickets from "./20260914_171412_add_respawn_tickets"; -import * as migration_20260916_083158_add_game_map_system from "./20260916_083158_add_game_map_system"; -import * as migration_20260916_185544_construction_timestamp_model from "./20260916_185544_construction_timestamp_model"; -import * as migration_20260916_220224_add_map_labels_and_styling from "./20260916_220224_add_map_labels_and_styling"; -import * as migration_20260917_023028_add_node_and_zone_resources from "./20260917_023028_add_node_and_zone_resources"; -import * as migration_20260917_112258_add_zone_political_types from "./20260917_112258_add_zone_political_types"; -import * as migration_20260918_170318_add_imminent_reminder_marker from "./20260918_170318_add_imminent_reminder_marker"; +import * as migration_20260820_004157 from './20260820_004157'; +import * as migration_20260825_220000 from './20260825_220000'; +import * as migration_20260826_050000_repair_shims_auxiliary_tables from './20260826_050000_repair_shims_auxiliary_tables'; +import * as migration_20260826_060000_add_game_servers_event_target from './20260826_060000_add_game_servers_event_target'; +import * as migration_20260827_005757 from './20260827_005757'; +import * as migration_20260827_022334_add_eod_minesweeper_best_flags from './20260827_022334_add_eod_minesweeper_best_flags'; +import * as migration_20260827_213857_add_evaluations_collection from './20260827_213857_add_evaluations_collection'; +import * as migration_20260827_233224_add_mission_completed_at from './20260827_233224_add_mission_completed_at'; +import * as migration_20260828_011500_add_background_texture_preference from './20260828_011500_add_background_texture_preference'; +import * as migration_20260828_041615_add_campaign_mode from './20260828_041615_add_campaign_mode'; +import * as migration_20260828_044506 from './20260828_044506'; +import * as migration_20260831_142503 from './20260831_142503'; +import * as migration_20260831_180233_assignment_transfers from './20260831_180233_assignment_transfers'; +import * as migration_20260901_014006_add_assignment_transfer_event_target from './20260901_014006_add_assignment_transfer_event_target'; +import * as migration_20260901_213108_add_ticket_votes_and_edit_history from './20260901_213108_add_ticket_votes_and_edit_history'; +import * as migration_20260901_222200_add_admin_page_permissions from './20260901_222200_add_admin_page_permissions'; +import * as migration_20260902_195336_add_medal_backgrounds from './20260902_195336_add_medal_backgrounds'; +import * as migration_20260903_035544 from './20260903_035544'; +import * as migration_20260903_044047 from './20260903_044047'; +import * as migration_20260903_053419 from './20260903_053419'; +import * as migration_20260903_060000_add_radio_mode_stats from './20260903_060000_add_radio_mode_stats'; +import * as migration_20260903_061000_add_radio_incorrect_counts from './20260903_061000_add_radio_incorrect_counts'; +import * as migration_20260903_062000_add_aim_trainer_stats from './20260903_062000_add_aim_trainer_stats'; +import * as migration_20260904_230838_add_wiki_collections from './20260904_230838_add_wiki_collections'; +import * as migration_20260905_183940_base_management from './20260905_183940_base_management'; +import * as migration_20260905_195456_labor_headcount from './20260905_195456_labor_headcount'; +import * as migration_20260905_210310_labor_classifications from './20260905_210310_labor_classifications'; +import * as migration_20260905_213824 from './20260905_213824'; +import * as migration_20260905_215658 from './20260905_215658'; +import * as migration_20260906_045502 from './20260906_045502'; +import * as migration_20260906_050900_add_evaluation_reminders_field from './20260906_050900_add_evaluation_reminders_field'; +import * as migration_20260906_061451_add_wiki_template_css from './20260906_061451_add_wiki_template_css'; +import * as migration_20260906_063753_add_personal_excerpt_richtext from './20260906_063753_add_personal_excerpt_richtext'; +import * as migration_20260906_065405_add_wiki_template_html from './20260906_065405_add_wiki_template_html'; +import * as migration_20260906_100908_add_market_economy_state from './20260906_100908_add_market_economy_state'; +import * as migration_20260906_165837_add_market_state_event_target from './20260906_165837_add_market_state_event_target'; +import * as migration_20260906_202925_add_voice_submissions from './20260906_202925_add_voice_submissions'; +import * as migration_20260907_012326_add_missions_created_by from './20260907_012326_add_missions_created_by'; +import * as migration_20260907_013724_make_missions_campaign_optional from './20260907_013724_make_missions_campaign_optional'; +import * as migration_20260907_041051_add_voice_script_spoiler from './20260907_041051_add_voice_script_spoiler'; +import * as migration_20260907_043339_add_voice_script_description from './20260907_043339_add_voice_script_description'; +import * as migration_20260907_044934_add_missions_discord_modlist_hash from './20260907_044934_add_missions_discord_modlist_hash'; +import * as migration_20260907_083010_add_voice_submission_description from './20260907_083010_add_voice_submission_description'; +import * as migration_20260907_090245_add_mission_ready_reminder_fields from './20260907_090245_add_mission_ready_reminder_fields'; +import * as migration_20260907_120754_add_story_beats from './20260907_120754_add_story_beats'; +import * as migration_20260907_124024_convert_story_beats_body_to_lexical from './20260907_124024_convert_story_beats_body_to_lexical'; +import * as migration_20260908_152021_add_opord_recall_minigame_stats from './20260908_152021_add_opord_recall_minigame_stats'; +import * as migration_20260908_172241_add_custom_minigame_collections from './20260908_172241_add_custom_minigame_collections'; +import * as migration_20260908_193107_add_creator_xp_bank_field from './20260908_193107_add_creator_xp_bank_field'; +import * as migration_20260908_194435_add_expose_edge_mines_field from './20260908_194435_add_expose_edge_mines_field'; +import * as migration_20260909_153427_add_opord_recall_best_times from './20260909_153427_add_opord_recall_best_times'; +import * as migration_20260909_223955_add_voice_script_draft_status from './20260909_223955_add_voice_script_draft_status'; +import * as migration_20260910_221018_make_missions_codename_optional from './20260910_221018_make_missions_codename_optional'; +import * as migration_20260910_222518_add_dashboard_layout_preference from './20260910_222518_add_dashboard_layout_preference'; +import * as migration_20260911_044754_add_poker_minigame_stats from './20260911_044754_add_poker_minigame_stats'; +import * as migration_20260911_052147_add_ribbon_submissions from './20260911_052147_add_ribbon_submissions'; +import * as migration_20260911_201559_add_award_advancement_series from './20260911_201559_add_award_advancement_series'; +import * as migration_20260912_051752_add_rank_promotion_ceiling from './20260912_051752_add_rank_promotion_ceiling'; +import * as migration_20260912_071740_add_blackjack_minigame_stats from './20260912_071740_add_blackjack_minigame_stats'; +import * as migration_20260912_231219_add_discord_cancelled_at from './20260912_231219_add_discord_cancelled_at'; +import * as migration_20260914_153046_add_chip_bank from './20260914_153046_add_chip_bank'; +import * as migration_20260914_171412_add_respawn_tickets from './20260914_171412_add_respawn_tickets'; +import * as migration_20260916_083158_add_game_map_system from './20260916_083158_add_game_map_system'; +import * as migration_20260916_185544_construction_timestamp_model from './20260916_185544_construction_timestamp_model'; +import * as migration_20260916_220224_add_map_labels_and_styling from './20260916_220224_add_map_labels_and_styling'; +import * as migration_20260917_023028_add_node_and_zone_resources from './20260917_023028_add_node_and_zone_resources'; +import * as migration_20260917_112258_add_zone_political_types from './20260917_112258_add_zone_political_types'; +import * as migration_20260917_225116_add_zone_other_type from './20260917_225116_add_zone_other_type'; +import * as migration_20260918_052751_add_production_system from './20260918_052751_add_production_system'; +import * as migration_20260918_054722_add_labor_construction_speed from './20260918_054722_add_labor_construction_speed'; +import * as migration_20260918_061857_add_module_slots from './20260918_061857_add_module_slots'; +import * as migration_20260918_064326_add_compound_parent from './20260918_064326_add_compound_parent'; +import * as migration_20260918_070328_add_blueprint_aura from './20260918_070328_add_blueprint_aura'; +import * as migration_20260918_170318_add_imminent_reminder_marker from './20260918_170318_add_imminent_reminder_marker'; +import * as migration_20260918_180851_add_operation_ledger from './20260918_180851_add_operation_ledger'; +import * as migration_20260918_194842_add_operation_allocation from './20260918_194842_add_operation_allocation'; +import * as migration_20260918_222549_add_operation_readiness from './20260918_222549_add_operation_readiness'; +import * as migration_20260920_044743_add_zone_pressure from './20260920_044743_add_zone_pressure'; export const migrations = [ { up: migration_20260820_004157.up, down: migration_20260820_004157.down, - name: "20260820_004157", + name: '20260820_004157', }, { up: migration_20260825_220000.up, down: migration_20260825_220000.down, - name: "20260825_220000", + name: '20260825_220000', }, { up: migration_20260826_050000_repair_shims_auxiliary_tables.up, down: migration_20260826_050000_repair_shims_auxiliary_tables.down, - name: "20260826_050000_repair_shims_auxiliary_tables", + name: '20260826_050000_repair_shims_auxiliary_tables', }, { up: migration_20260826_060000_add_game_servers_event_target.up, down: migration_20260826_060000_add_game_servers_event_target.down, - name: "20260826_060000_add_game_servers_event_target", + name: '20260826_060000_add_game_servers_event_target', }, { up: migration_20260827_005757.up, down: migration_20260827_005757.down, - name: "20260827_005757", + name: '20260827_005757', }, { up: migration_20260827_022334_add_eod_minesweeper_best_flags.up, down: migration_20260827_022334_add_eod_minesweeper_best_flags.down, - name: "20260827_022334_add_eod_minesweeper_best_flags", + name: '20260827_022334_add_eod_minesweeper_best_flags', }, { up: migration_20260827_213857_add_evaluations_collection.up, down: migration_20260827_213857_add_evaluations_collection.down, - name: "20260827_213857_add_evaluations_collection", + name: '20260827_213857_add_evaluations_collection', }, { up: migration_20260827_233224_add_mission_completed_at.up, down: migration_20260827_233224_add_mission_completed_at.down, - name: "20260827_233224_add_mission_completed_at", + name: '20260827_233224_add_mission_completed_at', }, { up: migration_20260828_011500_add_background_texture_preference.up, down: migration_20260828_011500_add_background_texture_preference.down, - name: "20260828_011500_add_background_texture_preference", + name: '20260828_011500_add_background_texture_preference', }, { up: migration_20260828_041615_add_campaign_mode.up, down: migration_20260828_041615_add_campaign_mode.down, - name: "20260828_041615_add_campaign_mode", + name: '20260828_041615_add_campaign_mode', }, { up: migration_20260828_044506.up, down: migration_20260828_044506.down, - name: "20260828_044506", + name: '20260828_044506', }, { up: migration_20260831_142503.up, down: migration_20260831_142503.down, - name: "20260831_142503", + name: '20260831_142503', }, { up: migration_20260831_180233_assignment_transfers.up, down: migration_20260831_180233_assignment_transfers.down, - name: "20260831_180233_assignment_transfers", + name: '20260831_180233_assignment_transfers', }, { up: migration_20260901_014006_add_assignment_transfer_event_target.up, down: migration_20260901_014006_add_assignment_transfer_event_target.down, - name: "20260901_014006_add_assignment_transfer_event_target", + name: '20260901_014006_add_assignment_transfer_event_target', }, { up: migration_20260901_213108_add_ticket_votes_and_edit_history.up, down: migration_20260901_213108_add_ticket_votes_and_edit_history.down, - name: "20260901_213108_add_ticket_votes_and_edit_history", + name: '20260901_213108_add_ticket_votes_and_edit_history', }, { up: migration_20260901_222200_add_admin_page_permissions.up, down: migration_20260901_222200_add_admin_page_permissions.down, - name: "20260901_222200_add_admin_page_permissions", + name: '20260901_222200_add_admin_page_permissions', }, { up: migration_20260902_195336_add_medal_backgrounds.up, down: migration_20260902_195336_add_medal_backgrounds.down, - name: "20260902_195336_add_medal_backgrounds", + name: '20260902_195336_add_medal_backgrounds', }, { up: migration_20260903_035544.up, down: migration_20260903_035544.down, - name: "20260903_035544", + name: '20260903_035544', }, { up: migration_20260903_044047.up, down: migration_20260903_044047.down, - name: "20260903_044047", + name: '20260903_044047', }, { up: migration_20260903_053419.up, down: migration_20260903_053419.down, - name: "20260903_053419", + name: '20260903_053419', }, { up: migration_20260903_060000_add_radio_mode_stats.up, down: migration_20260903_060000_add_radio_mode_stats.down, - name: "20260903_060000_add_radio_mode_stats", + name: '20260903_060000_add_radio_mode_stats', }, { up: migration_20260903_061000_add_radio_incorrect_counts.up, down: migration_20260903_061000_add_radio_incorrect_counts.down, - name: "20260903_061000_add_radio_incorrect_counts", + name: '20260903_061000_add_radio_incorrect_counts', }, { up: migration_20260903_062000_add_aim_trainer_stats.up, down: migration_20260903_062000_add_aim_trainer_stats.down, - name: "20260903_062000_add_aim_trainer_stats", + name: '20260903_062000_add_aim_trainer_stats', }, { up: migration_20260904_230838_add_wiki_collections.up, down: migration_20260904_230838_add_wiki_collections.down, - name: "20260904_230838_add_wiki_collections", + name: '20260904_230838_add_wiki_collections', }, { up: migration_20260905_183940_base_management.up, down: migration_20260905_183940_base_management.down, - name: "20260905_183940_base_management", + name: '20260905_183940_base_management', }, { up: migration_20260905_195456_labor_headcount.up, down: migration_20260905_195456_labor_headcount.down, - name: "20260905_195456_labor_headcount", + name: '20260905_195456_labor_headcount', }, { up: migration_20260905_210310_labor_classifications.up, down: migration_20260905_210310_labor_classifications.down, - name: "20260905_210310_labor_classifications", + name: '20260905_210310_labor_classifications', }, { up: migration_20260905_213824.up, down: migration_20260905_213824.down, - name: "20260905_213824", + name: '20260905_213824', }, { up: migration_20260905_215658.up, down: migration_20260905_215658.down, - name: "20260905_215658", + name: '20260905_215658', }, { up: migration_20260906_045502.up, down: migration_20260906_045502.down, - name: "20260906_045502", + name: '20260906_045502', }, { up: migration_20260906_050900_add_evaluation_reminders_field.up, down: migration_20260906_050900_add_evaluation_reminders_field.down, - name: "20260906_050900_add_evaluation_reminders_field", + name: '20260906_050900_add_evaluation_reminders_field', }, { up: migration_20260906_061451_add_wiki_template_css.up, down: migration_20260906_061451_add_wiki_template_css.down, - name: "20260906_061451_add_wiki_template_css", + name: '20260906_061451_add_wiki_template_css', }, { up: migration_20260906_063753_add_personal_excerpt_richtext.up, down: migration_20260906_063753_add_personal_excerpt_richtext.down, - name: "20260906_063753_add_personal_excerpt_richtext", + name: '20260906_063753_add_personal_excerpt_richtext', }, { up: migration_20260906_065405_add_wiki_template_html.up, down: migration_20260906_065405_add_wiki_template_html.down, - name: "20260906_065405_add_wiki_template_html", + name: '20260906_065405_add_wiki_template_html', }, { up: migration_20260906_100908_add_market_economy_state.up, down: migration_20260906_100908_add_market_economy_state.down, - name: "20260906_100908_add_market_economy_state", + name: '20260906_100908_add_market_economy_state', }, { up: migration_20260906_165837_add_market_state_event_target.up, down: migration_20260906_165837_add_market_state_event_target.down, - name: "20260906_165837_add_market_state_event_target", + name: '20260906_165837_add_market_state_event_target', }, { up: migration_20260906_202925_add_voice_submissions.up, down: migration_20260906_202925_add_voice_submissions.down, - name: "20260906_202925_add_voice_submissions", + name: '20260906_202925_add_voice_submissions', }, { up: migration_20260907_012326_add_missions_created_by.up, down: migration_20260907_012326_add_missions_created_by.down, - name: "20260907_012326_add_missions_created_by", + name: '20260907_012326_add_missions_created_by', }, { up: migration_20260907_013724_make_missions_campaign_optional.up, down: migration_20260907_013724_make_missions_campaign_optional.down, - name: "20260907_013724_make_missions_campaign_optional", + name: '20260907_013724_make_missions_campaign_optional', }, { up: migration_20260907_041051_add_voice_script_spoiler.up, down: migration_20260907_041051_add_voice_script_spoiler.down, - name: "20260907_041051_add_voice_script_spoiler", + name: '20260907_041051_add_voice_script_spoiler', }, { up: migration_20260907_043339_add_voice_script_description.up, down: migration_20260907_043339_add_voice_script_description.down, - name: "20260907_043339_add_voice_script_description", + name: '20260907_043339_add_voice_script_description', }, { up: migration_20260907_044934_add_missions_discord_modlist_hash.up, down: migration_20260907_044934_add_missions_discord_modlist_hash.down, - name: "20260907_044934_add_missions_discord_modlist_hash", + name: '20260907_044934_add_missions_discord_modlist_hash', }, { up: migration_20260907_083010_add_voice_submission_description.up, down: migration_20260907_083010_add_voice_submission_description.down, - name: "20260907_083010_add_voice_submission_description", + name: '20260907_083010_add_voice_submission_description', }, { up: migration_20260907_090245_add_mission_ready_reminder_fields.up, down: migration_20260907_090245_add_mission_ready_reminder_fields.down, - name: "20260907_090245_add_mission_ready_reminder_fields", + name: '20260907_090245_add_mission_ready_reminder_fields', }, { up: migration_20260907_120754_add_story_beats.up, down: migration_20260907_120754_add_story_beats.down, - name: "20260907_120754_add_story_beats", + name: '20260907_120754_add_story_beats', }, { up: migration_20260907_124024_convert_story_beats_body_to_lexical.up, down: migration_20260907_124024_convert_story_beats_body_to_lexical.down, - name: "20260907_124024_convert_story_beats_body_to_lexical", + name: '20260907_124024_convert_story_beats_body_to_lexical', }, { up: migration_20260908_152021_add_opord_recall_minigame_stats.up, down: migration_20260908_152021_add_opord_recall_minigame_stats.down, - name: "20260908_152021_add_opord_recall_minigame_stats", + name: '20260908_152021_add_opord_recall_minigame_stats', }, { up: migration_20260908_172241_add_custom_minigame_collections.up, down: migration_20260908_172241_add_custom_minigame_collections.down, - name: "20260908_172241_add_custom_minigame_collections", + name: '20260908_172241_add_custom_minigame_collections', }, { up: migration_20260908_193107_add_creator_xp_bank_field.up, down: migration_20260908_193107_add_creator_xp_bank_field.down, - name: "20260908_193107_add_creator_xp_bank_field", + name: '20260908_193107_add_creator_xp_bank_field', }, { up: migration_20260908_194435_add_expose_edge_mines_field.up, down: migration_20260908_194435_add_expose_edge_mines_field.down, - name: "20260908_194435_add_expose_edge_mines_field", + name: '20260908_194435_add_expose_edge_mines_field', }, { up: migration_20260909_153427_add_opord_recall_best_times.up, down: migration_20260909_153427_add_opord_recall_best_times.down, - name: "20260909_153427_add_opord_recall_best_times", + name: '20260909_153427_add_opord_recall_best_times', }, { up: migration_20260909_223955_add_voice_script_draft_status.up, down: migration_20260909_223955_add_voice_script_draft_status.down, - name: "20260909_223955_add_voice_script_draft_status", + name: '20260909_223955_add_voice_script_draft_status', }, { up: migration_20260910_221018_make_missions_codename_optional.up, down: migration_20260910_221018_make_missions_codename_optional.down, - name: "20260910_221018_make_missions_codename_optional", + name: '20260910_221018_make_missions_codename_optional', }, { up: migration_20260910_222518_add_dashboard_layout_preference.up, down: migration_20260910_222518_add_dashboard_layout_preference.down, - name: "20260910_222518_add_dashboard_layout_preference", + name: '20260910_222518_add_dashboard_layout_preference', }, { up: migration_20260911_044754_add_poker_minigame_stats.up, down: migration_20260911_044754_add_poker_minigame_stats.down, - name: "20260911_044754_add_poker_minigame_stats", + name: '20260911_044754_add_poker_minigame_stats', }, { up: migration_20260911_052147_add_ribbon_submissions.up, down: migration_20260911_052147_add_ribbon_submissions.down, - name: "20260911_052147_add_ribbon_submissions", + name: '20260911_052147_add_ribbon_submissions', }, { up: migration_20260911_201559_add_award_advancement_series.up, down: migration_20260911_201559_add_award_advancement_series.down, - name: "20260911_201559_add_award_advancement_series", + name: '20260911_201559_add_award_advancement_series', }, { up: migration_20260912_051752_add_rank_promotion_ceiling.up, down: migration_20260912_051752_add_rank_promotion_ceiling.down, - name: "20260912_051752_add_rank_promotion_ceiling", + name: '20260912_051752_add_rank_promotion_ceiling', }, { up: migration_20260912_071740_add_blackjack_minigame_stats.up, down: migration_20260912_071740_add_blackjack_minigame_stats.down, - name: "20260912_071740_add_blackjack_minigame_stats", + name: '20260912_071740_add_blackjack_minigame_stats', }, { up: migration_20260912_231219_add_discord_cancelled_at.up, down: migration_20260912_231219_add_discord_cancelled_at.down, - name: "20260912_231219_add_discord_cancelled_at", + name: '20260912_231219_add_discord_cancelled_at', }, { up: migration_20260914_153046_add_chip_bank.up, down: migration_20260914_153046_add_chip_bank.down, - name: "20260914_153046_add_chip_bank", + name: '20260914_153046_add_chip_bank', }, { up: migration_20260914_171412_add_respawn_tickets.up, down: migration_20260914_171412_add_respawn_tickets.down, - name: "20260914_171412_add_respawn_tickets", + name: '20260914_171412_add_respawn_tickets', }, { up: migration_20260916_083158_add_game_map_system.up, down: migration_20260916_083158_add_game_map_system.down, - name: "20260916_083158_add_game_map_system", + name: '20260916_083158_add_game_map_system', }, { up: migration_20260916_185544_construction_timestamp_model.up, down: migration_20260916_185544_construction_timestamp_model.down, - name: "20260916_185544_construction_timestamp_model", + name: '20260916_185544_construction_timestamp_model', }, { up: migration_20260916_220224_add_map_labels_and_styling.up, down: migration_20260916_220224_add_map_labels_and_styling.down, - name: "20260916_220224_add_map_labels_and_styling", + name: '20260916_220224_add_map_labels_and_styling', }, { up: migration_20260917_023028_add_node_and_zone_resources.up, down: migration_20260917_023028_add_node_and_zone_resources.down, - name: "20260917_023028_add_node_and_zone_resources", + name: '20260917_023028_add_node_and_zone_resources', }, { up: migration_20260917_112258_add_zone_political_types.up, down: migration_20260917_112258_add_zone_political_types.down, - name: "20260917_112258_add_zone_political_types", + name: '20260917_112258_add_zone_political_types', + }, + { + up: migration_20260917_225116_add_zone_other_type.up, + down: migration_20260917_225116_add_zone_other_type.down, + name: '20260917_225116_add_zone_other_type', + }, + { + up: migration_20260918_052751_add_production_system.up, + down: migration_20260918_052751_add_production_system.down, + name: '20260918_052751_add_production_system', + }, + { + up: migration_20260918_054722_add_labor_construction_speed.up, + down: migration_20260918_054722_add_labor_construction_speed.down, + name: '20260918_054722_add_labor_construction_speed', + }, + { + up: migration_20260918_061857_add_module_slots.up, + down: migration_20260918_061857_add_module_slots.down, + name: '20260918_061857_add_module_slots', + }, + { + up: migration_20260918_064326_add_compound_parent.up, + down: migration_20260918_064326_add_compound_parent.down, + name: '20260918_064326_add_compound_parent', + }, + { + up: migration_20260918_070328_add_blueprint_aura.up, + down: migration_20260918_070328_add_blueprint_aura.down, + name: '20260918_070328_add_blueprint_aura', }, { up: migration_20260918_170318_add_imminent_reminder_marker.up, down: migration_20260918_170318_add_imminent_reminder_marker.down, - name: "20260918_170318_add_imminent_reminder_marker", + name: '20260918_170318_add_imminent_reminder_marker', + }, + { + up: migration_20260918_180851_add_operation_ledger.up, + down: migration_20260918_180851_add_operation_ledger.down, + name: '20260918_180851_add_operation_ledger', + }, + { + up: migration_20260918_194842_add_operation_allocation.up, + down: migration_20260918_194842_add_operation_allocation.down, + name: '20260918_194842_add_operation_allocation', + }, + { + up: migration_20260918_222549_add_operation_readiness.up, + down: migration_20260918_222549_add_operation_readiness.down, + name: '20260918_222549_add_operation_readiness', + }, + { + up: migration_20260920_044743_add_zone_pressure.up, + down: migration_20260920_044743_add_zone_pressure.down, + name: '20260920_044743_add_zone_pressure' }, ]; diff --git a/src/payload-generated-schema.ts b/src/payload-generated-schema.ts index bce2d4b..d183e07 100644 --- a/src/payload-generated-schema.ts +++ b/src/payload-generated-schema.ts @@ -657,6 +657,14 @@ export const enum_structures_staff_positions_position_type = pgEnum( "enum_structures_staff_positions_position_type", ["administrative", "technical", "other"], ); +export const enum_structures_module_options_effects_type = pgEnum( + "enum_structures_module_options_effects_type", + ["capacity_mass", "production_multiplier", "storage_slots"], +); +export const enum_structures_module_options_category = pgEnum( + "enum_structures_module_options_category", + ["production", "logistics", "defense", "utility"], +); export const enum_structures_approval_status = pgEnum("enum_structures_approval_status", [ "in_progress", "ready_for_review", @@ -673,6 +681,10 @@ export const enum_structures_terrain_type = pgEnum("enum_structures_terrain_type "land", "water", ]); +export const enum_structures_aura_effect_type = pgEnum("enum_structures_aura_effect_type", [ + "production_multiplier", + "capacity_mass", +]); export const enum_structures_function_type = pgEnum("enum_structures_function_type", [ "producer", "storage", @@ -838,6 +850,7 @@ export const enum_map_zones_type = pgEnum("enum_map_zones_type", [ "land", "territory", "border", + "other", ]); export const enum_narrative_events_triggers_type = pgEnum("enum_narrative_events_triggers_type", [ "manual", @@ -990,6 +1003,76 @@ export const game_structures_staff_positions = pgTable( ], ); +export const game_structures_production_inputs = pgTable( + "game_structures_production_inputs", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + resource: integer("resource_id") + .notNull() + .references(() => resources.id, { + onDelete: "set null", + }), + amountPerHour: numeric("amount_per_hour", { mode: "number" }).notNull().default(0), + }, + (columns) => [ + index("game_structures_production_inputs_order_idx").on(columns._order), + index("game_structures_production_inputs_parent_id_idx").on(columns._parentID), + index("game_structures_production_inputs_resource_idx").on(columns.resource), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [game_structures.id], + name: "game_structures_production_inputs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const game_structures_production_outputs = pgTable( + "game_structures_production_outputs", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + resource: integer("resource_id") + .notNull() + .references(() => resources.id, { + onDelete: "set null", + }), + amountPerHour: numeric("amount_per_hour", { mode: "number" }).notNull().default(0), + }, + (columns) => [ + index("game_structures_production_outputs_order_idx").on(columns._order), + index("game_structures_production_outputs_parent_id_idx").on(columns._parentID), + index("game_structures_production_outputs_resource_idx").on(columns.resource), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [game_structures.id], + name: "game_structures_production_outputs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const game_structures_installed_modules = pgTable( + "game_structures_installed_modules", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + name: varchar("name").notNull(), + installedAt: timestamp("installed_at", { mode: "string", withTimezone: true, precision: 3 }), + }, + (columns) => [ + index("game_structures_installed_modules_order_idx").on(columns._order), + index("game_structures_installed_modules_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [game_structures.id], + name: "game_structures_installed_modules_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const game_structures_stored_resources = pgTable( "game_structures_stored_resources", { @@ -1075,9 +1158,22 @@ export const game_structures = pgTable( precision: 3, }), maintenanceCost: numeric("maintenance_cost", { mode: "number" }).default(0), + productionPaused: boolean("production_paused").default(false), + lastProductionAt: timestamp("last_production_at", { + mode: "string", + withTimezone: true, + precision: 3, + }), + productionStallReason: varchar("production_stall_reason"), coordinates: geometryColumn("coordinates"), labelVisible: boolean("label_visible").default(true), labelPriority: numeric("label_priority", { mode: "number" }).default(0), + parentStructure: integer("parent_structure_id").references( + (): AnyPgColumn => game_structures.id, + { + onDelete: "set null", + }, + ), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }) .defaultNow() .notNull(), @@ -1089,6 +1185,7 @@ export const game_structures = pgTable( index("game_structures_type_idx").on(columns.type), index("game_structures_faction_idx").on(columns.faction), index("game_structures_map_idx").on(columns.map), + index("game_structures_parent_structure_idx").on(columns.parentStructure), index("game_structures_updated_at_idx").on(columns.updatedAt), index("game_structures_created_at_idx").on(columns.createdAt), ], @@ -1294,6 +1391,7 @@ export const labor_classifications = pgTable( key: varchar("key").notNull(), defaultUnitSalary: numeric("default_unit_salary", { mode: "number" }), description: varchar("description"), + buildEfficiency: numeric("build_efficiency", { mode: "number" }).default(1), availableHeadcount: numeric("available_headcount", { mode: "number" }).default(0), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }) .defaultNow() @@ -3612,6 +3710,122 @@ export const structures_staff_positions = pgTable( ], ); +export const structures_production_inputs = pgTable( + "structures_production_inputs", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + resource: integer("resource_id") + .notNull() + .references(() => resources.id, { + onDelete: "set null", + }), + amountPerHour: numeric("amount_per_hour", { mode: "number" }).notNull().default(0), + }, + (columns) => [ + index("structures_production_inputs_order_idx").on(columns._order), + index("structures_production_inputs_parent_id_idx").on(columns._parentID), + index("structures_production_inputs_resource_idx").on(columns.resource), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [structures.id], + name: "structures_production_inputs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const structures_production_outputs = pgTable( + "structures_production_outputs", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + resource: integer("resource_id") + .notNull() + .references(() => resources.id, { + onDelete: "set null", + }), + amountPerHour: numeric("amount_per_hour", { mode: "number" }).notNull().default(0), + }, + (columns) => [ + index("structures_production_outputs_order_idx").on(columns._order), + index("structures_production_outputs_parent_id_idx").on(columns._parentID), + index("structures_production_outputs_resource_idx").on(columns.resource), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [structures.id], + name: "structures_production_outputs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const structures_module_options_effects = pgTable( + "structures_module_options_effects", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + type: enum_structures_module_options_effects_type("type").notNull(), + value: numeric("value", { mode: "number" }).notNull(), + }, + (columns) => [ + index("structures_module_options_effects_order_idx").on(columns._order), + index("structures_module_options_effects_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [structures_module_options.id], + name: "structures_module_options_effects_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const structures_module_options_materials = pgTable( + "structures_module_options_materials", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + resource: integer("resource_id") + .notNull() + .references(() => resources.id, { + onDelete: "set null", + }), + amount: numeric("amount", { mode: "number" }).notNull(), + }, + (columns) => [ + index("structures_module_options_materials_order_idx").on(columns._order), + index("structures_module_options_materials_parent_id_idx").on(columns._parentID), + index("structures_module_options_materials_resource_idx").on(columns.resource), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [structures_module_options.id], + name: "structures_module_options_materials_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const structures_module_options = pgTable( + "structures_module_options", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + name: varchar("name").notNull(), + category: enum_structures_module_options_category("category").notNull().default("utility"), + description: varchar("description"), + }, + (columns) => [ + index("structures_module_options_order_idx").on(columns._order), + index("structures_module_options_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [structures.id], + name: "structures_module_options_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const structures_auto_generated_resources = pgTable( "structures_auto_generated_resources", { @@ -3695,6 +3909,7 @@ export const structures = pgTable( constructionDurationMinutes: numeric("construction_duration_minutes", { mode: "number", }).notNull(), + constructionCrewRequired: numeric("construction_crew_required", { mode: "number" }).default(0), requiresUpgrade: boolean("requires_upgrade"), upgradesInto: integer("upgrades_into_id").references((): AnyPgColumn => structures.id, { onDelete: "set null", @@ -3703,6 +3918,10 @@ export const structures = pgTable( terrainType: enum_structures_terrain_type("terrain_type").notNull(), sellPrice: numeric("sell_price", { mode: "number" }), maintenanceCost: numeric("maintenance_cost", { mode: "number" }).default(0), + moduleSlots: numeric("module_slots", { mode: "number" }).default(0), + aura_effectType: enum_structures_aura_effect_type("aura_effect_type"), + aura_value: numeric("aura_value", { mode: "number" }), + aura_rangeMeters: numeric("aura_range_meters", { mode: "number" }).default(0), functionType: enum_structures_function_type("function_type"), maxCapacityMass: numeric("max_capacity_mass", { mode: "number" }), restrictToAllowed: boolean("restrict_to_allowed").default(false), @@ -6512,6 +6731,46 @@ export const relations_game_structures_staff_positions = relations( }), }), ); +export const relations_game_structures_production_inputs = relations( + game_structures_production_inputs, + ({ one }) => ({ + _parentID: one(game_structures, { + fields: [game_structures_production_inputs._parentID], + references: [game_structures.id], + relationName: "productionInputs", + }), + resource: one(resources, { + fields: [game_structures_production_inputs.resource], + references: [resources.id], + relationName: "resource", + }), + }), +); +export const relations_game_structures_production_outputs = relations( + game_structures_production_outputs, + ({ one }) => ({ + _parentID: one(game_structures, { + fields: [game_structures_production_outputs._parentID], + references: [game_structures.id], + relationName: "productionOutputs", + }), + resource: one(resources, { + fields: [game_structures_production_outputs.resource], + references: [resources.id], + relationName: "resource", + }), + }), +); +export const relations_game_structures_installed_modules = relations( + game_structures_installed_modules, + ({ one }) => ({ + _parentID: one(game_structures, { + fields: [game_structures_installed_modules._parentID], + references: [game_structures.id], + relationName: "installedModules", + }), + }), +); export const relations_game_structures_stored_resources = relations( game_structures_stored_resources, ({ one }) => ({ @@ -6564,6 +6823,20 @@ export const relations_game_structures = relations(game_structures, ({ one, many staffPositions: many(game_structures_staff_positions, { relationName: "staffPositions", }), + productionInputs: many(game_structures_production_inputs, { + relationName: "productionInputs", + }), + productionOutputs: many(game_structures_production_outputs, { + relationName: "productionOutputs", + }), + installedModules: many(game_structures_installed_modules, { + relationName: "installedModules", + }), + parentStructure: one(game_structures, { + fields: [game_structures.parentStructure], + references: [game_structures.id], + relationName: "parentStructure", + }), storedResources: many(game_structures_stored_resources, { relationName: "storedResources", }), @@ -7575,6 +7848,77 @@ export const relations_structures_staff_positions = relations( }), }), ); +export const relations_structures_production_inputs = relations( + structures_production_inputs, + ({ one }) => ({ + _parentID: one(structures, { + fields: [structures_production_inputs._parentID], + references: [structures.id], + relationName: "productionInputs", + }), + resource: one(resources, { + fields: [structures_production_inputs.resource], + references: [resources.id], + relationName: "resource", + }), + }), +); +export const relations_structures_production_outputs = relations( + structures_production_outputs, + ({ one }) => ({ + _parentID: one(structures, { + fields: [structures_production_outputs._parentID], + references: [structures.id], + relationName: "productionOutputs", + }), + resource: one(resources, { + fields: [structures_production_outputs.resource], + references: [resources.id], + relationName: "resource", + }), + }), +); +export const relations_structures_module_options_effects = relations( + structures_module_options_effects, + ({ one }) => ({ + _parentID: one(structures_module_options, { + fields: [structures_module_options_effects._parentID], + references: [structures_module_options.id], + relationName: "effects", + }), + }), +); +export const relations_structures_module_options_materials = relations( + structures_module_options_materials, + ({ one }) => ({ + _parentID: one(structures_module_options, { + fields: [structures_module_options_materials._parentID], + references: [structures_module_options.id], + relationName: "materials", + }), + resource: one(resources, { + fields: [structures_module_options_materials.resource], + references: [resources.id], + relationName: "resource", + }), + }), +); +export const relations_structures_module_options = relations( + structures_module_options, + ({ one, many }) => ({ + _parentID: one(structures, { + fields: [structures_module_options._parentID], + references: [structures.id], + relationName: "moduleOptions", + }), + effects: many(structures_module_options_effects, { + relationName: "effects", + }), + materials: many(structures_module_options_materials, { + relationName: "materials", + }), + }), +); export const relations_structures_auto_generated_resources = relations( structures_auto_generated_resources, ({ one }) => ({ @@ -7666,6 +8010,15 @@ export const relations_structures = relations(structures, ({ one, many }) => ({ staffPositions: many(structures_staff_positions, { relationName: "staffPositions", }), + productionInputs: many(structures_production_inputs, { + relationName: "productionInputs", + }), + productionOutputs: many(structures_production_outputs, { + relationName: "productionOutputs", + }), + moduleOptions: many(structures_module_options, { + relationName: "moduleOptions", + }), autoGeneratedResources: many(structures_auto_generated_resources, { relationName: "autoGeneratedResources", }), @@ -8829,9 +9182,12 @@ type DatabaseSchema = { enum_vehicles_transport_mode: typeof enum_vehicles_transport_mode; enum_vehicles_armor_rating: typeof enum_vehicles_armor_rating; enum_structures_staff_positions_position_type: typeof enum_structures_staff_positions_position_type; + enum_structures_module_options_effects_type: typeof enum_structures_module_options_effects_type; + enum_structures_module_options_category: typeof enum_structures_module_options_category; enum_structures_approval_status: typeof enum_structures_approval_status; enum_structures_category: typeof enum_structures_category; enum_structures_terrain_type: typeof enum_structures_terrain_type; + enum_structures_aura_effect_type: typeof enum_structures_aura_effect_type; enum_structures_function_type: typeof enum_structures_function_type; enum_shipments_status: typeof enum_shipments_status; enum_bank_accounts_account_type: typeof enum_bank_accounts_account_type; @@ -8878,6 +9234,9 @@ type DatabaseSchema = { game_hard_resources: typeof game_hard_resources; game_structures_labor_requirements: typeof game_structures_labor_requirements; game_structures_staff_positions: typeof game_structures_staff_positions; + game_structures_production_inputs: typeof game_structures_production_inputs; + game_structures_production_outputs: typeof game_structures_production_outputs; + game_structures_installed_modules: typeof game_structures_installed_modules; game_structures_stored_resources: typeof game_structures_stored_resources; game_structures_void_storage: typeof game_structures_void_storage; game_structures: typeof game_structures; @@ -8953,6 +9312,11 @@ type DatabaseSchema = { structures_upkeep: typeof structures_upkeep; structures_labor_requirements: typeof structures_labor_requirements; structures_staff_positions: typeof structures_staff_positions; + structures_production_inputs: typeof structures_production_inputs; + structures_production_outputs: typeof structures_production_outputs; + structures_module_options_effects: typeof structures_module_options_effects; + structures_module_options_materials: typeof structures_module_options_materials; + structures_module_options: typeof structures_module_options; structures_auto_generated_resources: typeof structures_auto_generated_resources; structures_allowed_storage: typeof structures_allowed_storage; structures_prohibited_storage: typeof structures_prohibited_storage; @@ -9026,6 +9390,9 @@ type DatabaseSchema = { relations_game_hard_resources: typeof relations_game_hard_resources; relations_game_structures_labor_requirements: typeof relations_game_structures_labor_requirements; relations_game_structures_staff_positions: typeof relations_game_structures_staff_positions; + relations_game_structures_production_inputs: typeof relations_game_structures_production_inputs; + relations_game_structures_production_outputs: typeof relations_game_structures_production_outputs; + relations_game_structures_installed_modules: typeof relations_game_structures_installed_modules; relations_game_structures_stored_resources: typeof relations_game_structures_stored_resources; relations_game_structures_void_storage: typeof relations_game_structures_void_storage; relations_game_structures: typeof relations_game_structures; @@ -9101,6 +9468,11 @@ type DatabaseSchema = { relations_structures_upkeep: typeof relations_structures_upkeep; relations_structures_labor_requirements: typeof relations_structures_labor_requirements; relations_structures_staff_positions: typeof relations_structures_staff_positions; + relations_structures_production_inputs: typeof relations_structures_production_inputs; + relations_structures_production_outputs: typeof relations_structures_production_outputs; + relations_structures_module_options_effects: typeof relations_structures_module_options_effects; + relations_structures_module_options_materials: typeof relations_structures_module_options_materials; + relations_structures_module_options: typeof relations_structures_module_options; relations_structures_auto_generated_resources: typeof relations_structures_auto_generated_resources; relations_structures_allowed_storage: typeof relations_structures_allowed_storage; relations_structures_prohibited_storage: typeof relations_structures_prohibited_storage; diff --git a/src/payload-types.ts b/src/payload-types.ts index 97c080c..86c26e3 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -130,6 +130,11 @@ export interface Config { 'arma-sync-events': ArmaSyncEvent; 'arma-commands': ArmaCommand; 'respawn-tickets': RespawnTicket; + 'operation-events': OperationEvent; + 'operation-effects': OperationEffect; + 'operation-reservations': OperationReservation; + 'operation-readiness': OperationReadiness; + 'zone-pressure': ZonePressure; 'custom-minefields': CustomMinefield; 'custom-minefield-scores': CustomMinefieldScore; 'custom-radio-tests': CustomRadioTest; @@ -212,6 +217,11 @@ export interface Config { 'arma-sync-events': ArmaSyncEventsSelect | ArmaSyncEventsSelect; 'arma-commands': ArmaCommandsSelect | ArmaCommandsSelect; 'respawn-tickets': RespawnTicketsSelect | RespawnTicketsSelect; + 'operation-events': OperationEventsSelect | OperationEventsSelect; + 'operation-effects': OperationEffectsSelect | OperationEffectsSelect; + 'operation-reservations': OperationReservationsSelect | OperationReservationsSelect; + 'operation-readiness': OperationReadinessSelect | OperationReadinessSelect; + 'zone-pressure': ZonePressureSelect | ZonePressureSelect; 'custom-minefields': CustomMinefieldsSelect | CustomMinefieldsSelect; 'custom-minefield-scores': CustomMinefieldScoresSelect | CustomMinefieldScoresSelect; 'custom-radio-tests': CustomRadioTestsSelect | CustomRadioTestsSelect; @@ -402,6 +412,48 @@ export interface GameStructure { id?: string | null; }[] | null; + productionInputs?: + | { + resource: number | Resource; + /** + * Units processed per real hour while running and staffed. + */ + amountPerHour: number; + id?: string | null; + }[] + | null; + productionOutputs?: + | { + resource: number | Resource; + /** + * Units processed per real hour while running and staffed. + */ + amountPerHour: number; + id?: string | null; + }[] + | null; + /** + * Managed by the install/uninstall module actions. + */ + installedModules?: + | { + name: string; + installedAt?: string | null; + id?: string | null; + }[] + | null; + /** + * When checked the structure stops producing until unchecked. + */ + productionPaused?: boolean | null; + /** + * Last game tick that ran this structure's recipe. + */ + lastProductionAt?: string | null; + /** + * Why production is not running: no_labor, missing_inputs, storage_full. Empty = running. + */ + productionStallReason?: string | null; /** * Map meters [x, y] on the structure's game map (not geographic degrees). * @@ -417,6 +469,10 @@ export interface GameStructure { * Label priority for clustering (0-100). Higher wins when structures overlap at low zoom; ties break by stored mass. */ labelPriority?: number | null; + /** + * Set when this building is part of a compound: its storage pools into the hub, which carries the compound's map label and ribbon. + */ + parentStructure?: (number | null) | GameStructure; storedResources?: | { resource: number | Resource; @@ -502,6 +558,10 @@ export interface Structure { * How many real minutes it takes to complete construction of this structure after materials are delivered and building starts. */ constructionDurationMinutes: number; + /** + * Effective crew needed for the listed build time. 0 builds at full speed with no labor. Understaffed sites build proportionally slower. + */ + constructionCrewRequired?: number | null; /** * What research must be done before this can be built. */ @@ -598,6 +658,71 @@ export interface Structure { id?: string | null; }[] | null; + /** + * Default recipe copied into newly created game-structures of this type. Empty = no recipe. + */ + productionInputs?: + | { + resource: number | Resource; + /** + * Units processed per real hour while running and staffed. + */ + amountPerHour: number; + id?: string | null; + }[] + | null; + /** + * Default recipe copied into newly created game-structures of this type. Empty = no recipe. + */ + productionOutputs?: + | { + resource: number | Resource; + /** + * Units processed per real hour while running and staffed. + */ + amountPerHour: number; + id?: string | null; + }[] + | null; + /** + * How many modules can be installed in structures of this type. 0 = no module support. + */ + moduleSlots?: number | null; + /** + * Modules that can be installed into structures of this type. + */ + moduleOptions?: + | { + name: string; + category: 'production' | 'logistics' | 'defense' | 'utility'; + description?: string | null; + effects: { + type: 'capacity_mass' | 'production_multiplier' | 'storage_slots'; + /** + * capacity_mass: extra kg of storage. storage_slots: extra grid slots. production_multiplier: output boost as a fraction (0.25 = +25%). + */ + value: number; + id?: string | null; + }[]; + materials: { + resource: number | Resource; + amount: number; + id?: string | null; + }[]; + id?: string | null; + }[] + | null; + /** + * Projected onto nearby operational structures (neighbors only, not itself). + */ + aura?: { + /** + * production_multiplier: boosts the neighbor's production output (value 0.25 = +25%). capacity_mass: raises the neighbor's storage capacity (value in kg). + */ + effectType?: ('production_multiplier' | 'capacity_mass') | null; + value?: number | null; + rangeMeters?: number | null; + }; /** * The app will use this type to determine what processes should run for this structure type. */ @@ -899,6 +1024,10 @@ export interface LaborClassification { */ defaultUnitSalary?: number | null; description?: string | null; + /** + * Construction speed this trade contributes per worker while building structures (1 = a full worker). + */ + buildEfficiency?: number | null; /** * How many workers of this classification are currently available to hire across the unit. Hiring consumes from this pool; releasing staff returns them. */ @@ -1751,6 +1880,31 @@ export interface Role { | 'arma-commands:update' | 'arma-commands:delete' | 'admin:arma-commands:manage' + | 'operation-events:create' + | 'operation-events:read' + | 'operation-events:update' + | 'operation-events:delete' + | 'admin:operation-events:manage' + | 'operation-effects:create' + | 'operation-effects:read' + | 'operation-effects:update' + | 'operation-effects:delete' + | 'admin:operation-effects:manage' + | 'operation-reservations:create' + | 'operation-reservations:read' + | 'operation-reservations:update' + | 'operation-reservations:delete' + | 'admin:operation-reservations:manage' + | 'operation-readiness:create' + | 'operation-readiness:read' + | 'operation-readiness:update' + | 'operation-readiness:delete' + | 'admin:operation-readiness:manage' + | 'zone-pressure:create' + | 'zone-pressure:read' + | 'zone-pressure:update' + | 'zone-pressure:delete' + | 'admin:zone-pressure:manage' | 'game-rules:read' | 'game-rules:update' | 'shims:read' @@ -3829,9 +3983,9 @@ export interface MapZone { description?: string | null; map: number | Map; /** - * Water zones block land-blueprint placement. Land zones are informational; default terrain is buildable land. Territory and Country Border are political boundaries (informational). + * Water zones block land-blueprint placement. Land zones are informational; default terrain is buildable land. Territory and Country Border are political boundaries (informational). Other is for generic areas such as named compounds. */ - type: 'water' | 'land' | 'territory' | 'border'; + type: 'water' | 'land' | 'territory' | 'border' | 'other'; /** * Polygon fill as hex (e.g. #38bdf8). Empty = default color for the type. */ @@ -3841,7 +3995,7 @@ export interface MapZone { */ strokeColor?: string | null; /** - * Fill opacity 0-1. Empty = default (0.25 water, 0.08 land, 0.1 territory, 0.06 border). + * Fill opacity 0-1. Empty = default (0.25 water, 0.08 land, 0.1 territory, 0.06 border, 0.08 other). */ fillOpacity?: number | null; /** @@ -4106,6 +4260,311 @@ export interface RespawnTicket { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-events". + */ +export interface OperationEvent { + id: number; + /** + * The immutable raw sync event this record was derived from. + */ + sourceEvent: number | ArmaSyncEvent; + /** + * Mirror of the raw event's server-prefixed id (serverId:eventId). + */ + eventId: string; + /** + * Operation identity from the event payload, or "unknown". + */ + operationId: string; + /** + * Event type as received. Supported: operation.start, operation.end, operation.objective, operation.extraction, operation.inventory, player.kill. Unknown types are kept as dead-letter records. + */ + type: string; + /** + * Event contract version from the payload (default 1). + */ + version: number; + /** + * Validation outcome. Only validated events derive effects. + */ + status: 'validated' | 'rejected' | 'dead-letter'; + /** + * Rejection/dead-letter reason: { code, message }. + */ + error?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + /** + * SHA-256 of the stable-stringified raw payload. + */ + payloadHash: string; + actor?: (number | null) | User; + server?: (number | null) | GameServer; + mission?: (number | null) | Mission; + occurredAt: string; + validatedAt?: string | null; + reconciliationNotes?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-effects". + */ +export interface OperationEffect { + id: number; + /** + * The validated operation event this effect derives from. + */ + operationEvent: number | OperationEvent; + /** + * The raw source event this effect derives from. + */ + sourceEvent: number | ArmaSyncEvent; + operationId: string; + /** + * Idempotency key: `${eventId}:${effectType}`. + */ + effectKey: string; + effectType: + | 'operation.started' + | 'operation.ended' + | 'operation.objective-updated' + | 'operation.extraction-recorded' + | 'operation.inventory-recorded'; + status: 'applied' | 'pending' | 'failed' | 'reversed'; + payload?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + /** + * Set when this effect reverses another effect. + */ + reversalOf?: (number | null) | OperationEffect; + /** + * Set when this effect has been reversed. + */ + reversedBy?: (number | null) | OperationEffect; + reconciliationNotes?: string | null; + appliedAt?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-reservations". + */ +export interface OperationReservation { + id: number; + /** + * Idempotency key for the allocation request. Retries with the same key are no-ops. + */ + reservationKey: string; + /** + * Operation identity this allocation belongs to. + */ + operationId: string; + /** + * The mission these assets are allocated to, when known. + */ + mission?: (number | null) | Mission; + /** + * reserved is the only non-terminal state; every terminal state is settled exactly once. + */ + status: 'reserved' | 'settled' | 'cancelled' | 'expired' | 'no-show'; + /** + * Reserved unit members. + */ + personnel?: + | { + user: number | User; + /** + * Optional role/slot label. + */ + slot?: string | null; + id?: string | null; + }[] + | null; + /** + * Reserved deployed vehicles. + */ + vehicles?: + | { + vehicle: number | GameVehicle; + id?: string | null; + }[] + | null; + /** + * Reserved resources (drawn from the origin structure). + */ + cargo?: + | { + resource: number | Resource; + amount: number; + id?: string | null; + }[] + | null; + /** + * Treasury budget earmarked for the operation. + */ + budget?: { + account?: (number | null) | BankAccount; + amount?: number | null; + }; + /** + * Structure the reserved cargo/vehicles are drawn from. + */ + origin?: (number | null) | GameStructure; + /** + * Structure the cargo is bound for (storage rules checked at reserve time). + */ + destination?: (number | null) | GameStructure; + /** + * When the reservation lapses; the expiry sweeper settles it as expired. + */ + expiresAt?: string | null; + createdBy?: (number | null) | User; + settledAt?: string | null; + /** + * Provenance: the operation effect that drove this settlement, when effect-driven. + */ + settledByEffect?: (number | null) | OperationEffect; + /** + * Deterministic settlement record: outcome, reason, consumed and returned amounts, actor, effect, timestamp. + */ + settlement?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-readiness". + */ +export interface OperationReadiness { + id: number; + /** + * Who the aggregate is for: a specific user, or a whole role. + */ + subjectType: 'user' | 'role'; + /** + * Id of the subject (user id for user-scoped; null for role-scoped). + */ + subjectId?: number | null; + /** + * Human-readable label for the subject (role name or username). Display only. + */ + subjectLabel?: string | null; + /** + * Start of the explicit time window this aggregate covers. + */ + windowStart: string; + /** + * End of the time window. + */ + windowEnd?: string | null; + /** + * Optional human label for the window (e.g. an ISO week). + */ + windowLabel?: string | null; + /** + * Optional operation identity the window's data is attributed to. + */ + operationId?: string | null; + /** + * Readiness calculation model version. + */ + calculationVersion: string; + /** + * Advisory-only. Never used to gate, punish, or rank players against one another. + */ + nature: 'advisory'; + /** + * Weighted 0-100 readiness score over present contributing categories. + */ + readinessScore?: number | null; + /** + * Weighted 0-100 planning-confidence sub-score from pre-op signals. + */ + planningConfidenceScore?: number | null; + /** + * Structured per-category breakdown ({ category, weight, score, inputCount }). No evaluator data. + */ + contributingCategories?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + /** + * Total component inputs consumed by the aggregate. + */ + inputCount?: number | null; + /** + * Human-readable explanation enumerating contributing categories and weights. Never contains evaluator names, ids, or comments. + */ + explanation?: string | null; + /** + * When the aggregate was last computed. + */ + recomputedAt?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "zone-pressure". + */ +export interface ZonePressure { + id: number; + /** + * The zone this pressure applies to. + */ + zone: number | MapZone; + /** + * The faction whose activity drives this pressure. + */ + faction?: (number | null) | Faction; + operationId: string; + /** + * The mission the operation was scoped to (causal AAR link). + */ + mission?: (number | null) | Mission; + /** + * The settled operation effect that produced this delta (idempotency key). + */ + sourceEffect: number | OperationEffect; + /** + * Signed pressure delta: hostile gains positive, friendly control negative. + */ + delta: number; + note?: string | null; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "custom-minefields". @@ -5386,6 +5845,96 @@ export interface PayloadMcpApiKey { */ delete?: boolean | null; }; + operationEvents?: { + /** + * Allow clients to find operation-events. + */ + find?: boolean | null; + /** + * Allow clients to create operation-events. + */ + create?: boolean | null; + /** + * Allow clients to update operation-events. + */ + update?: boolean | null; + /** + * Allow clients to delete operation-events. + */ + delete?: boolean | null; + }; + operationEffects?: { + /** + * Allow clients to find operation-effects. + */ + find?: boolean | null; + /** + * Allow clients to create operation-effects. + */ + create?: boolean | null; + /** + * Allow clients to update operation-effects. + */ + update?: boolean | null; + /** + * Allow clients to delete operation-effects. + */ + delete?: boolean | null; + }; + operationReservations?: { + /** + * Allow clients to find operation-reservations. + */ + find?: boolean | null; + /** + * Allow clients to create operation-reservations. + */ + create?: boolean | null; + /** + * Allow clients to update operation-reservations. + */ + update?: boolean | null; + /** + * Allow clients to delete operation-reservations. + */ + delete?: boolean | null; + }; + operationReadiness?: { + /** + * Allow clients to find operation-readiness. + */ + find?: boolean | null; + /** + * Allow clients to create operation-readiness. + */ + create?: boolean | null; + /** + * Allow clients to update operation-readiness. + */ + update?: boolean | null; + /** + * Allow clients to delete operation-readiness. + */ + delete?: boolean | null; + }; + zonePressure?: { + /** + * Allow clients to find zone-pressure. + */ + find?: boolean | null; + /** + * Allow clients to create zone-pressure. + */ + create?: boolean | null; + /** + * Allow clients to update zone-pressure. + */ + update?: boolean | null; + /** + * Allow clients to delete zone-pressure. + */ + delete?: boolean | null; + }; customMinefields?: { /** * Allow clients to find custom-minefields. @@ -5737,6 +6286,26 @@ export interface PayloadLockedDocument { relationTo: 'respawn-tickets'; value: number | RespawnTicket; } | null) + | ({ + relationTo: 'operation-events'; + value: number | OperationEvent; + } | null) + | ({ + relationTo: 'operation-effects'; + value: number | OperationEffect; + } | null) + | ({ + relationTo: 'operation-reservations'; + value: number | OperationReservation; + } | null) + | ({ + relationTo: 'operation-readiness'; + value: number | OperationReadiness; + } | null) + | ({ + relationTo: 'zone-pressure'; + value: number | ZonePressure; + } | null) | ({ relationTo: 'custom-minefields'; value: number | CustomMinefield; @@ -5872,9 +6441,34 @@ export interface GameStructuresSelect { enforcedSalary?: T; id?: T; }; + productionInputs?: + | T + | { + resource?: T; + amountPerHour?: T; + id?: T; + }; + productionOutputs?: + | T + | { + resource?: T; + amountPerHour?: T; + id?: T; + }; + installedModules?: + | T + | { + name?: T; + installedAt?: T; + id?: T; + }; + productionPaused?: T; + lastProductionAt?: T; + productionStallReason?: T; coordinates?: T; labelVisible?: T; labelPriority?: T; + parentStructure?: T; storedResources?: | T | { @@ -5983,6 +6577,7 @@ export interface LaborClassificationsSelect { key?: T; defaultUnitSalary?: T; description?: T; + buildEfficiency?: T; availableHeadcount?: T; updatedAt?: T; createdAt?: T; @@ -6854,6 +7449,7 @@ export interface StructuresSelect { id?: T; }; constructionDurationMinutes?: T; + constructionCrewRequired?: T; requiredTech?: T; requiresUpgrade?: T; upgradesInto?: T; @@ -6899,6 +7495,50 @@ export interface StructuresSelect { enforcedSalary?: T; id?: T; }; + productionInputs?: + | T + | { + resource?: T; + amountPerHour?: T; + id?: T; + }; + productionOutputs?: + | T + | { + resource?: T; + amountPerHour?: T; + id?: T; + }; + moduleSlots?: T; + moduleOptions?: + | T + | { + name?: T; + category?: T; + description?: T; + effects?: + | T + | { + type?: T; + value?: T; + id?: T; + }; + materials?: + | T + | { + resource?: T; + amount?: T; + id?: T; + }; + id?: T; + }; + aura?: + | T + | { + effectType?: T; + value?: T; + rangeMeters?: T; + }; functionType?: T; canProduce?: T; autoGeneratedResources?: @@ -7536,6 +8176,130 @@ export interface RespawnTicketsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-events_select". + */ +export interface OperationEventsSelect { + sourceEvent?: T; + eventId?: T; + operationId?: T; + type?: T; + version?: T; + status?: T; + error?: T; + payloadHash?: T; + actor?: T; + server?: T; + mission?: T; + occurredAt?: T; + validatedAt?: T; + reconciliationNotes?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-effects_select". + */ +export interface OperationEffectsSelect { + operationEvent?: T; + sourceEvent?: T; + operationId?: T; + effectKey?: T; + effectType?: T; + status?: T; + payload?: T; + reversalOf?: T; + reversedBy?: T; + reconciliationNotes?: T; + appliedAt?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-reservations_select". + */ +export interface OperationReservationsSelect { + reservationKey?: T; + operationId?: T; + mission?: T; + status?: T; + personnel?: + | T + | { + user?: T; + slot?: T; + id?: T; + }; + vehicles?: + | T + | { + vehicle?: T; + id?: T; + }; + cargo?: + | T + | { + resource?: T; + amount?: T; + id?: T; + }; + budget?: + | T + | { + account?: T; + amount?: T; + }; + origin?: T; + destination?: T; + expiresAt?: T; + createdBy?: T; + settledAt?: T; + settledByEffect?: T; + settlement?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "operation-readiness_select". + */ +export interface OperationReadinessSelect { + subjectType?: T; + subjectId?: T; + subjectLabel?: T; + windowStart?: T; + windowEnd?: T; + windowLabel?: T; + operationId?: T; + calculationVersion?: T; + nature?: T; + readinessScore?: T; + planningConfidenceScore?: T; + contributingCategories?: T; + inputCount?: T; + explanation?: T; + recomputedAt?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "zone-pressure_select". + */ +export interface ZonePressureSelect { + zone?: T; + faction?: T; + operationId?: T; + mission?: T; + sourceEffect?: T; + delta?: T; + note?: T; + updatedAt?: T; + createdAt?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "custom-minefields_select". @@ -8129,6 +8893,46 @@ export interface PayloadMcpApiKeysSelect { update?: T; delete?: T; }; + operationEvents?: + | T + | { + find?: T; + create?: T; + update?: T; + delete?: T; + }; + operationEffects?: + | T + | { + find?: T; + create?: T; + update?: T; + delete?: T; + }; + operationReservations?: + | T + | { + find?: T; + create?: T; + update?: T; + delete?: T; + }; + operationReadiness?: + | T + | { + find?: T; + create?: T; + update?: T; + delete?: T; + }; + zonePressure?: + | T + | { + find?: T; + create?: T; + update?: T; + delete?: T; + }; customMinefields?: | T | {