ecoportal-api-graphql 1.3.5 → 1.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/.ai-assistance/bridge/CLAUDE.md +338 -0
  3. data/.ai-assistance/bridge/archive/.gitkeep +0 -0
  4. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.inbox.md +29 -0
  5. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.outbox.md +18 -0
  6. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.inbox.md +42 -0
  7. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.outbox.md +115 -0
  8. data/.ai-assistance/bridge/context/gemini-review-prompt.txt +48 -0
  9. data/.ai-assistance/bridge/context/gemini-review-response.md +104 -0
  10. data/.ai-assistance/bridge/context/project.md +42 -0
  11. data/.ai-assistance/bridge/inbox/.gitkeep +0 -0
  12. data/.ai-assistance/bridge/outbox/.gitkeep +0 -0
  13. data/.ai-assistance/bridge/outbox/request-for-standards-discovery.md +48 -0
  14. data/.ai-assistance/bridge/queue/.gitkeep +1 -0
  15. data/.ai-assistance/capabilities/CLAUDE.md +27 -0
  16. data/.ai-assistance/capabilities/assumptions-log.md +80 -0
  17. data/.ai-assistance/capabilities/code.md +47 -0
  18. data/.ai-assistance/capabilities/connectors.md +37 -0
  19. data/.ai-assistance/capabilities/cowork.md +55 -0
  20. data/.ai-assistance/code/OVERVIEW.md +155 -0
  21. data/.ai-assistance/code/data_fields.md +242 -0
  22. data/.ai-assistance/code/dependencies.md +151 -0
  23. data/.ai-assistance/code/diff_as_input.md +234 -0
  24. data/.ai-assistance/code/diff_service_deep_dive.md +192 -0
  25. data/.ai-assistance/code/ecoPortal_architecture/00_overview_and_index.md +55 -0
  26. data/.ai-assistance/code/ecoPortal_architecture/01_terminology_dictionary.md +181 -0
  27. data/.ai-assistance/code/ecoPortal_architecture/02_data_model.md +192 -0
  28. data/.ai-assistance/code/ecoPortal_architecture/03_api_layers.md +147 -0
  29. data/.ai-assistance/code/ecoPortal_architecture/04_graphql_queries_mutations.md +277 -0
  30. data/.ai-assistance/code/ecoPortal_architecture/05_page_workflows.md +200 -0
  31. data/.ai-assistance/code/ecoPortal_architecture/06_search_and_filters.md +228 -0
  32. data/.ai-assistance/code/ecoPortal_architecture/07_data_fields.md +197 -0
  33. data/.ai-assistance/code/ecoPortal_architecture/08_stages_sections.md +243 -0
  34. data/.ai-assistance/code/ecoPortal_architecture/09_people_contractors_locations.md +196 -0
  35. data/.ai-assistance/code/ecoPortal_architecture/10_forces_workflow_builder.md +132 -0
  36. data/.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md +187 -0
  37. data/.ai-assistance/code/ecoPortal_architecture/12_ai_documentation_sources_gaps.md +236 -0
  38. data/.ai-assistance/code/ecoPortal_architecture/13_ai_infrastructure.md +183 -0
  39. data/.ai-assistance/code/ecoportal_schema_reference.md +240 -0
  40. data/.ai-assistance/code/graphql_domain_knowledge.md +230 -0
  41. data/.ai-assistance/code/refactoring/datafield-readwrite-shape-asymmetry.md +71 -0
  42. data/.ai-assistance/code/refactoring/opportunities.md +251 -0
  43. data/.ai-assistance/code/schema_analysis.md +321 -0
  44. data/.ai-assistance/code/search_filters.md +868 -0
  45. data/.ai-assistance/code/spec_coverage.md +73 -0
  46. data/.ai-assistance/code/workflow-command-guide.md +438 -0
  47. data/.ai-assistance/code/workflow-space.md +353 -0
  48. data/.ai-assistance/conventions/CLAUDE.md +30 -0
  49. data/.ai-assistance/conventions/code-working-tree-protocol.md +199 -0
  50. data/.ai-assistance/conventions/gitignore-rules.md +42 -0
  51. data/.ai-assistance/conventions/permission-guidance.md +120 -0
  52. data/.ai-assistance/integrations/README.md +70 -0
  53. data/.ai-assistance/integrations/gitkraken-mcp.md +107 -0
  54. data/.ai-assistance/integrations/gitlab-mcp.md +123 -0
  55. data/.ai-assistance/integrations/local-git.md +60 -0
  56. data/.ai-assistance/local_paths.example.md +17 -0
  57. data/.ai-assistance/projects/TODO.md +97 -0
  58. data/.ai-assistance/projects/api-v2-to-graphql-migration/DECISIONS.md +168 -0
  59. data/.ai-assistance/projects/api-v2-to-graphql-migration/INTENT.md +60 -0
  60. data/.ai-assistance/projects/api-v2-to-graphql-migration/TODO.md +267 -0
  61. data/.ai-assistance/projects/api-v2-to-graphql-migration/UPSTREAM.md +53 -0
  62. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/csv-template-pipeline-design.md +102 -0
  63. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/cutover-usecase-gap-audit.md +139 -0
  64. data/.ai-assistance/projects/dynamic-model-generation/INTENT.md +93 -0
  65. data/.ai-assistance/projects/eco-helpers-compat/INTENT.md +244 -0
  66. data/.ai-assistance/projects/eco-helpers-compat/MIGRATION_GUIDE.md +266 -0
  67. data/.ai-assistance/projects/eco-helpers-compat/TODO.md +86 -0
  68. data/.ai-assistance/projects/ecoportal-api-v2-doublemodel-review/INTENT.md +101 -0
  69. data/.ai-assistance/projects/graphql-agent/GAP_ANALYSIS.md +177 -0
  70. data/.ai-assistance/projects/ooze-graphql-native-migration/DECISIONS.md +161 -0
  71. data/.ai-assistance/projects/ooze-graphql-native-migration/INTENT.md +125 -0
  72. data/.ai-assistance/projects/ooze-graphql-native-migration/RISKS.md +126 -0
  73. data/.ai-assistance/projects/ooze-graphql-native-migration/TODO.md +256 -0
  74. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-06-30-cutover-workflow-deep-review.md +122 -0
  75. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-07-01-forces-via-workflow-commands-miss-rca.md +148 -0
  76. data/.ai-assistance/projects/page-model/DECISIONS.md +245 -0
  77. data/.ai-assistance/projects/page-model/TODO.md +190 -0
  78. data/.ai-assistance/projects/search-filter-builder/INTENT.md +107 -0
  79. data/.ai-assistance/projects/search-filter-builder/TODO.md +131 -0
  80. data/.ai-assistance/projects/template-maintenance/DESIGN.md +134 -0
  81. data/.ai-assistance/projects/workflow-space/TODO.md +213 -0
  82. data/.ai-assistance/reinstall-claude-desktop-windows.md +136 -0
  83. data/.ai-assistance/scripts/CLAUDE.md +150 -0
  84. data/.ai-assistance/scripts/bridge-init.sh +86 -0
  85. data/.ai-assistance/scripts/bridge-status.sh +44 -0
  86. data/.ai-assistance/scripts/capabilities-check.ts +104 -0
  87. data/.ai-assistance/scripts/check-outbox.sh +43 -0
  88. data/.ai-assistance/scripts/dep_graph.rb +91 -0
  89. data/.ai-assistance/scripts/lock-acquire.sh +103 -0
  90. data/.ai-assistance/scripts/lock-multi.sh +124 -0
  91. data/.ai-assistance/scripts/lock-queue.sh +94 -0
  92. data/.ai-assistance/scripts/setup-mcps.test.ts +188 -0
  93. data/.ai-assistance/scripts/setup-mcps.ts +234 -0
  94. data/.ai-assistance/scripts/task-complete.ts +74 -0
  95. data/.ai-assistance/scripts/task-create.ts +75 -0
  96. data/.ai-assistance/scripts/task-read.ts +125 -0
  97. data/.ai-assistance/scripts/token-logger.js +220 -0
  98. data/.ai-assistance/scripts/token-report.ts +158 -0
  99. data/.ai-assistance/scripts/token-session-start.js +66 -0
  100. data/.ai-assistance/skills/ai-instructions/SKILL.md +48 -0
  101. data/.ai-assistance/skills/code-specs/SKILL.md +69 -0
  102. data/.ai-assistance/skills/corporate-policies/SKILL.md +201 -0
  103. data/.ai-assistance/skills/dep-graph/SKILL.md +139 -0
  104. data/.ai-assistance/skills/ep-ai-manager/SKILL.md +417 -0
  105. data/.ai-assistance/skills/gemini-assist/SKILL.md +63 -0
  106. data/.ai-assistance/skills/gemini-assist/gemini-mcp-server.js +205 -0
  107. data/.ai-assistance/skills/gemini-assist/gemini_ask.py +1 -0
  108. data/.ai-assistance/skills/gemini-assist/gemini_ask.rb +240 -0
  109. data/.ai-assistance/skills/gemini-assist/prompts/cycle_end_review.txt +25 -0
  110. data/.ai-assistance/skills/graphql-schema-analysis/SKILL.md +261 -0
  111. data/.ai-assistance/skills/project-cycle/SKILL.md +177 -0
  112. data/.ai-assistance/skills/refactor/SKILL.md +62 -0
  113. data/.ai-assistance/skills/rubocop/SKILL.md +93 -0
  114. data/.ai-assistance/skills/ruby-scripting/SKILL.md +215 -0
  115. data/.ai-assistance/skills/spec-generation/SKILL.md +72 -0
  116. data/.ai-assistance/standards-version.json +21 -0
  117. data/.ai-assistance/token-budget.json +32 -0
  118. data/.ai-assistance/version.json +39 -0
  119. data/.claude/settings.json +146 -0
  120. data/.env.example +18 -0
  121. data/.gitattributes +15 -0
  122. data/.gitignore +13 -0
  123. data/.rubocop.yml +121 -97
  124. data/CHANGELOG.md +673 -477
  125. data/CLAUDE.md +232 -0
  126. data/Gemfile +30 -6
  127. data/Rakefile +90 -38
  128. data/docs/worklog.md +574 -0
  129. data/ecoportal-api-graphql.gemspec +40 -40
  130. data/lib/ecoportal/api/common/graphql/CLAUDE.md +36 -0
  131. data/lib/ecoportal/api/common/graphql/client.rb +1 -1
  132. data/lib/ecoportal/api/common/graphql/http_client.rb +35 -3
  133. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +28 -0
  134. data/lib/ecoportal/api/common/graphql/model/as_input.rb +8 -5
  135. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +3 -1
  136. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +31 -23
  137. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +54 -1
  138. data/lib/ecoportal/api/graphql/CLAUDE.md +37 -0
  139. data/lib/ecoportal/api/graphql/base/CLAUDE.md +50 -0
  140. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -0
  141. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -0
  142. data/lib/ecoportal/api/graphql/base/force/binding.rb +19 -0
  143. data/lib/ecoportal/api/graphql/base/force/binding_collection.rb +62 -0
  144. data/lib/ecoportal/api/graphql/base/force/collection.rb +47 -0
  145. data/lib/ecoportal/api/graphql/base/force.rb +65 -0
  146. data/lib/ecoportal/api/graphql/base/kickstand/job.rb +17 -0
  147. data/lib/ecoportal/api/graphql/base/kickstand/workflow.rb +18 -0
  148. data/lib/ecoportal/api/graphql/base/kickstand.rb +13 -0
  149. data/lib/ecoportal/api/graphql/base/page/basic.rb +38 -0
  150. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -0
  151. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -0
  152. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -0
  153. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +112 -0
  154. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +28 -0
  155. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +54 -0
  156. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -0
  157. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +25 -0
  158. data/lib/ecoportal/api/graphql/base/page/data_field/gauge.rb +19 -0
  159. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -0
  160. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +24 -0
  161. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -0
  162. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -0
  163. data/lib/ecoportal/api/graphql/base/page/data_field/number.rb +20 -0
  164. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +35 -0
  165. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -0
  166. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -0
  167. data/lib/ecoportal/api/graphql/base/page/data_field/select.rb +41 -0
  168. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -0
  169. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -0
  170. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -0
  171. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -0
  172. data/lib/ecoportal/api/graphql/base/page/data_field.rb +137 -12
  173. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +68 -14
  174. data/lib/ecoportal/api/graphql/base/page/phased.rb +1 -0
  175. data/lib/ecoportal/api/graphql/base/page/section.rb +36 -0
  176. data/lib/ecoportal/api/graphql/base/page/section_collection.rb +79 -0
  177. data/lib/ecoportal/api/graphql/base/page.rb +2 -0
  178. data/lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb +17 -0
  179. data/lib/ecoportal/api/graphql/base/pages_workflow/callback_type.rb +28 -0
  180. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change.rb +17 -0
  181. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change_message.rb +15 -0
  182. data/lib/ecoportal/api/graphql/base/pages_workflow/command_es_change.rb +17 -0
  183. data/lib/ecoportal/api/graphql/base/pages_workflow/command_interface.rb +36 -0
  184. data/lib/ecoportal/api/graphql/base/pages_workflow/email_config.rb +18 -0
  185. data/lib/ecoportal/api/graphql/base/pages_workflow/escalation_level.rb +19 -0
  186. data/lib/ecoportal/api/graphql/base/pages_workflow/in_system_config.rb +16 -0
  187. data/lib/ecoportal/api/graphql/base/pages_workflow/mailbox_field_selection.rb +17 -0
  188. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -0
  189. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -0
  190. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/create_page.rb +21 -0
  191. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -0
  192. data/lib/ecoportal/api/graphql/base/pages_workflow/people_field_selection.rb +17 -0
  193. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -0
  194. data/lib/ecoportal/api/graphql/base/pages_workflow/register_field.rb +17 -0
  195. data/lib/ecoportal/api/graphql/base/pages_workflow/task_config_selection.rb +17 -0
  196. data/lib/ecoportal/api/graphql/base/pages_workflow/time_delay_config.rb +16 -0
  197. data/lib/ecoportal/api/graphql/base/pages_workflow/trigger_interface.rb +26 -0
  198. data/lib/ecoportal/api/graphql/base/pages_workflow/triggers/conditional_logic.rb +17 -0
  199. data/lib/ecoportal/api/graphql/base/pages_workflow/user_selection.rb +16 -0
  200. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -0
  201. data/lib/ecoportal/api/graphql/base/preset_view.rb +17 -0
  202. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -0
  203. data/lib/ecoportal/api/graphql/base/register.rb +18 -0
  204. data/lib/ecoportal/api/graphql/base.rb +11 -0
  205. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +65 -0
  206. data/lib/ecoportal/api/graphql/builder/kickstand.rb +73 -0
  207. data/lib/ecoportal/api/graphql/builder/page.rb +210 -41
  208. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -0
  209. data/lib/ecoportal/api/graphql/builder/register.rb +27 -19
  210. data/lib/ecoportal/api/graphql/builder/template.rb +80 -0
  211. data/lib/ecoportal/api/graphql/builder.rb +2 -0
  212. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +107 -0
  213. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -0
  214. data/lib/ecoportal/api/graphql/compat/pages.rb +212 -0
  215. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -0
  216. data/lib/ecoportal/api/graphql/compat/response.rb +35 -0
  217. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -0
  218. data/lib/ecoportal/api/graphql/compat/stage_collection.rb +70 -0
  219. data/lib/ecoportal/api/graphql/compat/stage_view.rb +76 -0
  220. data/lib/ecoportal/api/graphql/compat.rb +17 -0
  221. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -0
  222. data/lib/ecoportal/api/graphql/concerns/deprecation.rb +20 -0
  223. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +21 -28
  224. data/lib/ecoportal/api/graphql/concerns/page_compat.rb +51 -0
  225. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -0
  226. data/lib/ecoportal/api/graphql/concerns.rb +4 -0
  227. data/lib/ecoportal/api/graphql/connection/page.rb +11 -0
  228. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +13 -0
  229. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -0
  230. data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -0
  231. data/lib/ecoportal/api/graphql/connection.rb +4 -0
  232. data/lib/ecoportal/api/graphql/file_upload/client.rb +181 -0
  233. data/lib/ecoportal/api/graphql/file_upload.rb +10 -0
  234. data/lib/ecoportal/api/graphql/fragment/action.rb +1 -1
  235. data/lib/ecoportal/api/graphql/fragment/action_category.rb +1 -1
  236. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +1 -1
  237. data/lib/ecoportal/api/graphql/fragment/force.rb +30 -0
  238. data/lib/ecoportal/api/graphql/fragment/location_draft.rb +2 -2
  239. data/lib/ecoportal/api/graphql/fragment/location_node.rb +1 -1
  240. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +1 -1
  241. data/lib/ecoportal/api/graphql/fragment/page.rb +85 -0
  242. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +395 -0
  243. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -0
  244. data/lib/ecoportal/api/graphql/fragment/pages_workflow.rb +172 -0
  245. data/lib/ecoportal/api/graphql/fragment/pagination.rb +1 -1
  246. data/lib/ecoportal/api/graphql/fragment.rb +37 -27
  247. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +25 -0
  248. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -0
  249. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -0
  250. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -0
  251. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -0
  252. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -0
  253. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -0
  254. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -0
  255. data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -0
  256. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -0
  257. data/lib/ecoportal/api/graphql/input/page/update.rb +140 -0
  258. data/lib/ecoportal/api/graphql/input/page.rb +26 -0
  259. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -0
  260. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -0
  261. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -0
  262. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -0
  263. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -0
  264. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -0
  265. data/lib/ecoportal/api/graphql/input/register.rb +13 -0
  266. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -0
  267. data/lib/ecoportal/api/graphql/input/search_conf.rb +367 -0
  268. data/lib/ecoportal/api/graphql/input/variable_binding.rb +20 -0
  269. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -0
  270. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -0
  271. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -0
  272. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -0
  273. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -0
  274. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -0
  275. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +18 -0
  276. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -0
  277. data/lib/ecoportal/api/graphql/input/workflow_command/add_gauge_field_stop.rb +19 -0
  278. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -0
  280. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -0
  281. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -0
  282. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -0
  283. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -0
  284. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -0
  285. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -0
  286. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -0
  287. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -0
  288. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -0
  289. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -0
  290. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -0
  291. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -0
  292. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -0
  293. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -0
  294. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -0
  295. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -0
  296. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -0
  297. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -0
  298. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -0
  299. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -0
  300. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -0
  301. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -0
  302. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -0
  303. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -0
  304. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -0
  305. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -0
  306. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -0
  307. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -0
  308. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -0
  309. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -0
  310. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -0
  311. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -0
  312. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -0
  313. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -0
  314. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -0
  315. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -0
  316. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -0
  317. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -0
  318. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -0
  319. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -0
  320. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -0
  321. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -0
  322. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -0
  323. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -0
  324. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -0
  325. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -0
  326. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -0
  327. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -0
  328. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -0
  329. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -0
  330. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -0
  331. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -0
  332. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -0
  333. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -0
  334. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -0
  335. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -0
  336. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -0
  337. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -0
  338. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -0
  339. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -0
  340. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -0
  341. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -0
  342. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -0
  343. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -0
  344. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -0
  345. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -0
  346. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -0
  347. data/lib/ecoportal/api/graphql/input/workflow_command/remove_gauge_field_stop.rb +17 -0
  348. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_field_config.rb +17 -0
  349. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -0
  350. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -0
  351. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -0
  352. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -0
  353. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -0
  354. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -0
  355. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -0
  356. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -0
  357. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -0
  358. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -0
  359. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -0
  360. data/lib/ecoportal/api/graphql/input/workflow_command/remove_select_field_option.rb +17 -0
  361. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -0
  362. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -0
  363. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -0
  364. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -0
  365. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -0
  366. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -0
  367. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -0
  368. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -0
  369. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -0
  370. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -0
  371. data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -0
  372. data/lib/ecoportal/api/graphql/input.rb +8 -0
  373. data/lib/ecoportal/api/graphql/interface/base_page.rb +100 -58
  374. data/lib/ecoportal/api/graphql/interface/location_structure/nodes.rb +27 -28
  375. data/lib/ecoportal/api/graphql/logic/base_model.rb +2 -0
  376. data/lib/ecoportal/api/graphql/logic/base_query.rb +45 -2
  377. data/lib/ecoportal/api/graphql/logic/input.rb +15 -0
  378. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -0
  379. data/lib/ecoportal/api/graphql/model/organization.rb +65 -55
  380. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -0
  381. data/lib/ecoportal/api/graphql/model/page/phased.rb +82 -20
  382. data/lib/ecoportal/api/graphql/model/page.rb +1 -0
  383. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -0
  384. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -0
  385. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -0
  386. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -0
  387. data/lib/ecoportal/api/graphql/model/register.rb +10 -0
  388. data/lib/ecoportal/api/graphql/model.rb +8 -0
  389. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -0
  390. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -0
  391. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -0
  392. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_jobs.rb +43 -0
  393. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_workflows.rb +43 -0
  394. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_job.rb +39 -0
  395. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_workflow.rb +39 -0
  396. data/lib/ecoportal/api/graphql/mutation/kickstand/start_job.rb +39 -0
  397. data/lib/ecoportal/api/graphql/mutation/kickstand/start_workflow.rb +39 -0
  398. data/lib/ecoportal/api/graphql/mutation/kickstand/stop_workflow.rb +39 -0
  399. data/lib/ecoportal/api/graphql/mutation/kickstand.rb +18 -0
  400. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +3 -3
  401. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +2 -2
  402. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +2 -2
  403. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +3 -3
  404. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +3 -3
  405. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -0
  406. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -0
  407. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +40 -0
  408. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -0
  409. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +40 -0
  410. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -0
  411. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +40 -0
  412. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +69 -0
  413. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +51 -0
  414. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +40 -0
  415. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -0
  416. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -0
  417. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -0
  418. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -0
  419. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -0
  420. data/lib/ecoportal/api/graphql/mutation/page/update_variable_bindings.rb +44 -0
  421. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -0
  422. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -0
  423. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +35 -0
  424. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -0
  425. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -0
  426. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -0
  427. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -0
  428. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -0
  429. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -0
  430. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -0
  431. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -0
  432. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -0
  433. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -0
  434. data/lib/ecoportal/api/graphql/mutation/template/create.rb +39 -0
  435. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -0
  436. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +43 -0
  437. data/lib/ecoportal/api/graphql/mutation/template/publish.rb +39 -0
  438. data/lib/ecoportal/api/graphql/mutation/template/unpublish.rb +39 -0
  439. data/lib/ecoportal/api/graphql/mutation/template/update.rb +43 -0
  440. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +43 -0
  441. data/lib/ecoportal/api/graphql/mutation/template.rb +18 -0
  442. data/lib/ecoportal/api/graphql/mutation.rb +8 -0
  443. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -0
  444. data/lib/ecoportal/api/graphql/payload/execute_workflow_commands.rb +36 -0
  445. data/lib/ecoportal/api/graphql/payload/force_commands.rb +31 -0
  446. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +36 -0
  447. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +36 -0
  448. data/lib/ecoportal/api/graphql/payload/kickstand/job.rb +13 -0
  449. data/lib/ecoportal/api/graphql/payload/kickstand/workflow.rb +13 -0
  450. data/lib/ecoportal/api/graphql/payload/kickstand.rb +15 -0
  451. data/lib/ecoportal/api/graphql/payload/location_structure/draft/create.rb +33 -34
  452. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +21 -0
  453. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -0
  454. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -0
  455. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -0
  456. data/lib/ecoportal/api/graphql/payload/page/draft.rb +13 -0
  457. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -0
  458. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -0
  459. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -0
  460. data/lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb +13 -0
  461. data/lib/ecoportal/api/graphql/payload/page.rb +19 -0
  462. data/lib/ecoportal/api/graphql/payload/preset_view.rb +11 -0
  463. data/lib/ecoportal/api/graphql/payload/register.rb +11 -0
  464. data/lib/ecoportal/api/graphql/payload/template/create.rb +13 -0
  465. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +13 -0
  466. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +13 -0
  467. data/lib/ecoportal/api/graphql/payload/template/publish.rb +13 -0
  468. data/lib/ecoportal/api/graphql/payload/template/unpublish.rb +13 -0
  469. data/lib/ecoportal/api/graphql/payload/template/update.rb +13 -0
  470. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +13 -0
  471. data/lib/ecoportal/api/graphql/payload/template.rb +18 -0
  472. data/lib/ecoportal/api/graphql/payload.rb +11 -0
  473. data/lib/ecoportal/api/graphql/query/action.rb +1 -1
  474. data/lib/ecoportal/api/graphql/query/action_categories.rb +1 -1
  475. data/lib/ecoportal/api/graphql/query/actions.rb +2 -2
  476. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +1 -1
  477. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -0
  478. data/lib/ecoportal/api/graphql/query/location_structure/draft.rb +2 -2
  479. data/lib/ecoportal/api/graphql/query/location_structure.rb +1 -1
  480. data/lib/ecoportal/api/graphql/query/location_structures.rb +1 -1
  481. data/lib/ecoportal/api/graphql/query/page.rb +45 -0
  482. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -0
  483. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +43 -0
  484. data/lib/ecoportal/api/graphql/query/pages.rb +59 -0
  485. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +59 -0
  486. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -0
  487. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -0
  488. data/lib/ecoportal/api/graphql/query/templates.rb +53 -0
  489. data/lib/ecoportal/api/graphql/query.rb +11 -0
  490. data/lib/ecoportal/api/graphql.rb +60 -2
  491. data/lib/ecoportal/api/graphql_version.rb +5 -5
  492. data/scripts/auto-worker-scheduler.sh +386 -0
  493. data/tests/contractor_entity_create.rb +19 -19
  494. data/tests/contractor_entity_udpate.rb +20 -20
  495. data/tests/dump_page_model.rb +74 -0
  496. data/tests/loc_structure_get.rb +1 -2
  497. data/tests/loc_structure_update.rb +51 -51
  498. data/tests/loc_structures_get.rb +15 -15
  499. metadata +436 -5
@@ -0,0 +1,251 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Input
5
+ class WorkflowCommand
6
+ SCHEMA_VERSION = '20260605'.freeze
7
+
8
+ COMMAND_MAP = {
9
+ # Page-level
10
+ editPage: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditPage',
11
+ editPageCreatorPermissions: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditPageCreatorPermissions',
12
+ # Stage structural
13
+ addStage: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddStage',
14
+ removeStage: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveStage',
15
+ editStage: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditStage',
16
+ moveStage: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::MoveStage',
17
+ # Stage permissions
18
+ editCreatorPermissions: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditCreatorPermissions',
19
+ editRestrictCommentTagging: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditRestrictCommentTagging',
20
+ addCommentTaggingUserGroup: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddCommentTaggingUserGroup',
21
+ removeCommentTaggingUserGroup: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveCommentTaggingUserGroup',
22
+ editRestrictTaskAssignment: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditRestrictTaskAssignment',
23
+ addTaskAssignmentUserGroup: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddTaskAssignmentUserGroup',
24
+ removeTaskAssignmentUserGroup: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveTaskAssignmentUserGroup',
25
+ addStageTag: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddStageTag',
26
+ removeStageTag: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveStageTag',
27
+ # Section
28
+ addSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddSection',
29
+ removeSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveSection',
30
+ addStageSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddStageSection',
31
+ removeStageSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveStageSection',
32
+ editSectionHeader: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditSectionHeader',
33
+ collapseSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::CollapseSection',
34
+ expandSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::ExpandSection',
35
+ reorderSection: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::ReorderSection',
36
+ # Task
37
+ addTask: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddTask',
38
+ removeTask: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveTask',
39
+ editTaskDue: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditTaskDue',
40
+ removeTaskDue: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveTaskDue',
41
+ removeTaskPriorityLevel: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveTaskPriorityLevel',
42
+ editRequiredSignOffs: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditRequiredSignOffs',
43
+ # Strategy (default)
44
+ addDefaultStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddDefaultStrategy',
45
+ editDefaultStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditDefaultStrategy',
46
+ removeDefaultStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveDefaultStrategy',
47
+ addDefaultDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddDefaultDirectStrategyUser',
48
+ removeDefaultDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveDefaultDirectStrategyUser',
49
+ # Strategy (task)
50
+ addStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddStrategy',
51
+ editStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditStrategy',
52
+ removeStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveStrategy',
53
+ addDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddDirectStrategyUser',
54
+ removeDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveDirectStrategyUser',
55
+ # Strategy (operation)
56
+ addOperationStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddOperationStrategy',
57
+ editOperationStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditOperationStrategy',
58
+ removeOperationStrategy: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveOperationStrategy',
59
+ addOperationDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddOperationDirectStrategyUser',
60
+ removeOperationDirectStrategyUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveOperationDirectStrategyUser',
61
+ # Callbacks
62
+ addWorkflowCallback: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddWorkflowCallback',
63
+ removeCallback: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveCallback',
64
+ editTrigger: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditTrigger',
65
+ # Operations
66
+ addOperation: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddOperation',
67
+ editOperation: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditOperation',
68
+ removeOperation: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveOperation',
69
+ # Recipients
70
+ addRecipientUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddRecipientUser',
71
+ removeRecipientUser: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveRecipientUser',
72
+ addRecipientPeopleField: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddRecipientPeopleField',
73
+ removeRecipientPeopleField: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveRecipientPeopleField',
74
+ addRecipientTaskConfig: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddRecipientTaskConfig',
75
+ removeRecipientTaskConfig: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveRecipientTaskConfig',
76
+ addRecipientActionType: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddRecipientActionType',
77
+ removeRecipientActionType: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveRecipientActionType',
78
+ addRecipientFilter: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddRecipientFilter',
79
+ removeRecipientFilter: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveRecipientFilter',
80
+ # Scheduled
81
+ addScheduledCallback: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddScheduledCallback',
82
+ editScheduledCallback: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditScheduledCallback',
83
+ removeScheduledCallback: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveScheduledCallback',
84
+ addScheduledCallbackAction: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddScheduledCallbackAction',
85
+ editReminder: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditReminder',
86
+ addActionTag: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddActionTag',
87
+ removeActionTag: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveActionTag',
88
+ # Fields structural
89
+ addField: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddField',
90
+ moveField: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::MoveField',
91
+ removeField: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveField',
92
+ # Field config
93
+ editFieldConfiguration: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditFieldConfiguration',
94
+ # Select options
95
+ addSelectFieldOption: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddSelectFieldOption',
96
+ editSelectFieldOption: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditSelectFieldOption',
97
+ removeSelectFieldOption: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveSelectFieldOption',
98
+ # Gauge stops
99
+ addGaugeFieldStop: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddGaugeFieldStop',
100
+ editGaugeFieldStop: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditGaugeFieldStop',
101
+ removeGaugeFieldStop: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveGaugeFieldStop',
102
+ # Linked fields
103
+ addLinkedFieldConfig: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddLinkedFieldConfig',
104
+ editLinkedFieldConfig: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditLinkedFieldConfig',
105
+ removeLinkedFieldConfig: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveLinkedFieldConfig',
106
+ # Forces
107
+ addForce: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddForce',
108
+ removeForce: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveForce',
109
+ editForce: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditForce',
110
+ reorderForces: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::ReorderForces',
111
+ addBinding: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddBinding',
112
+ editBinding: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditBinding',
113
+ removeBinding: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveBinding',
114
+ addLinkedHelper: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::AddLinkedHelper',
115
+ editLinkedHelper: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::EditLinkedHelper',
116
+ removeLinkedHelper: 'Ecoportal::API::GraphQL::Input::WorkflowCommand::RemoveLinkedHelper'
117
+ }.freeze
118
+
119
+ def self.build(command_key, **kwargs)
120
+ validate_key!(command_key)
121
+ sub_mod = Object.const_get(COMMAND_MAP[command_key])
122
+ { command_key => sub_mod.build(**kwargs) }
123
+ end
124
+
125
+ def self.valid_key?(key)
126
+ COMMAND_MAP.key?(key)
127
+ end
128
+
129
+ def self.build_commands(commands_spec)
130
+ commands_spec.map do |spec|
131
+ if spec.keys.size == 1 && COMMAND_MAP.key?(spec.keys.first)
132
+ build(spec.keys.first, **spec.values.first)
133
+ else
134
+ spec
135
+ end
136
+ end
137
+ end
138
+
139
+ private_class_method def self.validate_key!(key)
140
+ return if COMMAND_MAP.key?(key)
141
+
142
+ raise ArgumentError, "Unknown WorkflowCommandInput key: #{key}. Valid keys: #{COMMAND_MAP.keys.join(', ')}"
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ require_relative 'workflow_command/edit_page'
151
+ require_relative 'workflow_command/edit_page_creator_permissions'
152
+ require_relative 'workflow_command/add_stage'
153
+ require_relative 'workflow_command/remove_stage'
154
+ require_relative 'workflow_command/edit_stage'
155
+ require_relative 'workflow_command/move_stage'
156
+ require_relative 'workflow_command/edit_creator_permissions'
157
+ require_relative 'workflow_command/edit_restrict_comment_tagging'
158
+ require_relative 'workflow_command/add_comment_tagging_user_group'
159
+ require_relative 'workflow_command/remove_comment_tagging_user_group'
160
+ require_relative 'workflow_command/edit_restrict_task_assignment'
161
+ require_relative 'workflow_command/add_task_assignment_user_group'
162
+ require_relative 'workflow_command/remove_task_assignment_user_group'
163
+ require_relative 'workflow_command/add_stage_tag'
164
+ require_relative 'workflow_command/remove_stage_tag'
165
+ require_relative 'workflow_command/add_section'
166
+ require_relative 'workflow_command/remove_section'
167
+ require_relative 'workflow_command/add_stage_section'
168
+ require_relative 'workflow_command/remove_stage_section'
169
+ require_relative 'workflow_command/edit_section_header'
170
+ require_relative 'workflow_command/collapse_section'
171
+ require_relative 'workflow_command/expand_section'
172
+ require_relative 'workflow_command/reorder_section'
173
+ require_relative 'workflow_command/add_task'
174
+ require_relative 'workflow_command/remove_task'
175
+ require_relative 'workflow_command/edit_task_due'
176
+ require_relative 'workflow_command/remove_task_due'
177
+ require_relative 'workflow_command/remove_task_priority_level'
178
+ require_relative 'workflow_command/edit_required_sign_offs'
179
+ require_relative 'workflow_command/add_default_strategy'
180
+ require_relative 'workflow_command/edit_default_strategy'
181
+ require_relative 'workflow_command/remove_default_strategy'
182
+ require_relative 'workflow_command/add_default_direct_strategy_user'
183
+ require_relative 'workflow_command/remove_default_direct_strategy_user'
184
+ require_relative 'workflow_command/add_strategy'
185
+ require_relative 'workflow_command/edit_strategy'
186
+ require_relative 'workflow_command/remove_strategy'
187
+ require_relative 'workflow_command/add_direct_strategy_user'
188
+ require_relative 'workflow_command/remove_direct_strategy_user'
189
+ require_relative 'workflow_command/add_operation_strategy'
190
+ require_relative 'workflow_command/edit_operation_strategy'
191
+ require_relative 'workflow_command/remove_operation_strategy'
192
+ require_relative 'workflow_command/add_operation_direct_strategy_user'
193
+ require_relative 'workflow_command/remove_operation_direct_strategy_user'
194
+ require_relative 'workflow_command/add_workflow_callback'
195
+ require_relative 'workflow_command/remove_callback'
196
+ require_relative 'workflow_command/edit_trigger'
197
+ require_relative 'workflow_command/add_operation'
198
+ require_relative 'workflow_command/edit_operation'
199
+ require_relative 'workflow_command/remove_operation'
200
+ require_relative 'workflow_command/add_recipient_user'
201
+ require_relative 'workflow_command/remove_recipient_user'
202
+ require_relative 'workflow_command/add_recipient_people_field'
203
+ require_relative 'workflow_command/remove_recipient_people_field'
204
+ require_relative 'workflow_command/add_recipient_task_config'
205
+ require_relative 'workflow_command/remove_recipient_task_config'
206
+ require_relative 'workflow_command/add_recipient_action_type'
207
+ require_relative 'workflow_command/remove_recipient_action_type'
208
+ require_relative 'workflow_command/add_recipient_filter'
209
+ require_relative 'workflow_command/remove_recipient_filter'
210
+ require_relative 'workflow_command/add_scheduled_callback'
211
+ require_relative 'workflow_command/edit_scheduled_callback'
212
+ require_relative 'workflow_command/remove_scheduled_callback'
213
+ require_relative 'workflow_command/add_scheduled_callback_action'
214
+ require_relative 'workflow_command/edit_reminder'
215
+ require_relative 'workflow_command/add_action_tag'
216
+ require_relative 'workflow_command/remove_action_tag'
217
+ require_relative 'workflow_command/add_field'
218
+ require_relative 'workflow_command/move_field'
219
+ require_relative 'workflow_command/remove_field'
220
+ require_relative 'workflow_command/edit_field_configuration'
221
+ require_relative 'workflow_command/add_select_field_option'
222
+ require_relative 'workflow_command/edit_select_field_option'
223
+ require_relative 'workflow_command/remove_select_field_option'
224
+ require_relative 'workflow_command/add_gauge_field_stop'
225
+ require_relative 'workflow_command/edit_gauge_field_stop'
226
+ require_relative 'workflow_command/remove_gauge_field_stop'
227
+ require_relative 'workflow_command/add_linked_field_config'
228
+ require_relative 'workflow_command/edit_linked_field_config'
229
+ require_relative 'workflow_command/remove_linked_field_config'
230
+ require_relative 'workflow_command/add_force'
231
+ require_relative 'workflow_command/remove_force'
232
+ require_relative 'workflow_command/edit_force'
233
+ require_relative 'workflow_command/reorder_forces'
234
+ require_relative 'workflow_command/add_binding'
235
+ require_relative 'workflow_command/edit_binding'
236
+ require_relative 'workflow_command/remove_binding'
237
+ require_relative 'workflow_command/add_linked_helper'
238
+ require_relative 'workflow_command/edit_linked_helper'
239
+ require_relative 'workflow_command/remove_linked_helper'
240
+ require_relative 'workflow_command/field_config/contractor_entities'
241
+ require_relative 'workflow_command/field_config/cross_reference'
242
+ require_relative 'workflow_command/field_config/date'
243
+ require_relative 'workflow_command/field_config/gauge'
244
+ require_relative 'workflow_command/field_config/image_gallery'
245
+ require_relative 'workflow_command/field_config/location_field'
246
+ require_relative 'workflow_command/field_config/people'
247
+ require_relative 'workflow_command/field_config/plain_text'
248
+ require_relative 'workflow_command/field_config/rich_text'
249
+ require_relative 'workflow_command/field_config/select'
250
+ require_relative 'workflow_command/field_config/signature'
251
+ require_relative 'workflow_command/field_config/table'
@@ -14,3 +14,11 @@ require_relative 'input/search'
14
14
  require_relative 'input/location_structure'
15
15
  require_relative 'input/contractor_entity'
16
16
  require_relative 'input/action'
17
+ require_relative 'input/page'
18
+ require_relative 'input/delta_input'
19
+ require_relative 'input/search_conf'
20
+
21
+ require_relative 'input/register'
22
+ require_relative 'input/preset_view'
23
+ require_relative 'input/workflow_command'
24
+ require_relative 'input/variable_binding'
@@ -1,58 +1,100 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Interface
5
- class BasePage < Logic::BaseModel
6
- passkey :id
7
- passthrough :name, :uid
8
- passthrough :icon
9
-
10
- class_resolver :location_node_class, 'Ecoportal::API::GraphQL::Interface::LocationStructure::Node'
11
- class_resolver :user_class, 'Ecoportal::API::GraphQL::Base::User'
12
- # class_resolver :force_class, 'Ecoportal::API::GraphQL::Base::Force'
13
- # class_resolver :task_class, 'Ecoportal::API::GraphQL::Interface::Task'
14
- # class_resolver :theme_class, 'Ecoportal::API::GraphQL::Base::Theme'
15
- # class_resolver :template_class, 'Ecoportal::API::GraphQL::Base::Template'
16
- # class_resolver :register_class, 'Ecoportal::API::GraphQL::Base::Register'
17
- class_resolver :organization_class, 'Ecoportal::API::GraphQL::Base::Organization'
18
-
19
- passthrough :autoSelectedLocations
20
- embeds_many :locations, klass: :location_node_class, read_only: true
21
- embeds_many :allLocations, klass: :location_node_class, read_only: true
22
- passarray :otherTags, :baseTags
23
-
24
- # embeds_one :state, klass: 'BasePage::StateEnum', read_only: true
25
- passthrough :state
26
- # embeds_one :taskPriority, klass: 'BasePage::TaskPriorityEnum', read_only: true
27
- passthrough :taskPriority
28
-
29
-
30
- passthrough :patchVer
31
-
32
- passboolean :archived
33
- passdate :archivedAt
34
-
35
- passthrough :timeZone
36
- passdate :createdAt, :updatedAt
37
- passthrough :creatorName, :lastUpdatedByName
38
- # embeds_one :creator, klass: :user_class, read_only: true
39
-
40
- passboolean :hasForces
41
- # embeds_many :forces, klass: :force_class
42
-
43
- # embeds_many :tasks, klass: :task_class, read_only: true
44
- # embeds_many :activeTasks, klass: :task_class, read_only: true
45
-
46
- # embeds_one :theme, klass: :theme_class
47
-
48
- passthrough :sourceTemplateId
49
- # embeds_one :template, klass: :template_class, read_only: true
50
- # embeds_many :registers, klass: :register_class, read_only: true
51
- # embeds_one :organization, klass: :organization_class, read_only: true
52
-
53
- passboolean :inSystemPagesEnabled, :printingEnabled
54
- end
55
- end
56
- end
57
- end
58
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Interface
5
+ class BasePage < Logic::BaseModel
6
+ include Concerns::PageCompat
7
+ include Concerns::DataFieldAccess
8
+
9
+ passkey :id
10
+ passthrough :name, :uid
11
+ passthrough :icon
12
+
13
+ class_resolver :location_node_class, 'Ecoportal::API::GraphQL::Interface::LocationStructure::Node'
14
+ class_resolver :user_class, 'Ecoportal::API::GraphQL::Base::User'
15
+ # class_resolver :force_class, 'Ecoportal::API::GraphQL::Base::Force'
16
+ # class_resolver :task_class, 'Ecoportal::API::GraphQL::Interface::Task'
17
+ # class_resolver :theme_class, 'Ecoportal::API::GraphQL::Base::Theme'
18
+ # class_resolver :template_class, 'Ecoportal::API::GraphQL::Base::Template'
19
+ # class_resolver :register_class, 'Ecoportal::API::GraphQL::Base::Register'
20
+ class_resolver :organization_class, 'Ecoportal::API::GraphQL::Base::Organization'
21
+
22
+ passthrough :autoSelectedLocations
23
+ embeds_many :locations, klass: :location_node_class, read_only: true
24
+ embeds_many :allLocations, klass: :location_node_class, read_only: true
25
+ passarray :otherTags, :baseTags
26
+
27
+ # Page-level location assignment. Locations are set on the PAGE (UpdatePageInput.page
28
+ # .locations = [LocationInput{id}]) — NOT via the location data field (LocationFieldInput
29
+ # has no value). The `locations` embed above is read_only, so write the raw doc here so
30
+ # as_update serialises it under PAGE_FIELD_KEYS (:locations).
31
+ def location_ids
32
+ Array(doc['locations']).map { |l| l.is_a?(Hash) ? l['id'] : l }.compact
33
+ end
34
+
35
+ def location_ids=(ids)
36
+ doc['locations'] = Array(ids).map { |id_val| { 'id' => id_val } }
37
+ end
38
+
39
+ # embeds_one :state, klass: 'BasePage::StateEnum', read_only: true
40
+ passthrough :state
41
+ # embeds_one :taskPriority, klass: 'BasePage::TaskPriorityEnum', read_only: true
42
+ passthrough :taskPriority
43
+
44
+
45
+ passthrough :patchVer
46
+
47
+ passboolean :draft, :archived
48
+ passdate :archivedAt
49
+ passthrough :externalId
50
+
51
+ passthrough :timeZone
52
+ passdate :createdAt, :updatedAt
53
+ passthrough :creatorName, :lastUpdatedByName
54
+ # embeds_one :creator, klass: :user_class, read_only: true
55
+
56
+ passboolean :hasForces
57
+
58
+ # Returns a Force::Collection wrapping the page's forces array.
59
+ # Forces are only populated when the query includes the ForceFields fragment
60
+ # (e.g. via Query::PageWithForces — used by OozeRedirect::ForceCompat).
61
+ # Returns an empty collection when forces were not queried.
62
+ def forces
63
+ @forces ||= Base::Force::Collection.new(doc['forces'] || [])
64
+ end
65
+
66
+ # embeds_many :tasks, klass: :task_class, read_only: true
67
+ # embeds_many :activeTasks, klass: :task_class, read_only: true
68
+
69
+ # embeds_one :theme, klass: :theme_class
70
+
71
+ passthrough :sourceTemplateId
72
+
73
+ # Compat marker (not a server field). Compat::Pages#get_new records the source
74
+ # template id here when it builds a draft from a template — the read fragment does
75
+ # NOT fetch sourceTemplateId, so the model can't recover it from the doc. Lets the
76
+ # dry-run know this is a never-saved CREATE draft (a built draft DOES carry a
77
+ # patchVer, so patchVer-nil alone can't detect it) and supplies the templateId for
78
+ # the CreateFromTemplateInput preview. nil for fetched/persisted pages.
79
+ attr_accessor :_compat_source_template_id
80
+
81
+ # embeds_one :template, klass: :template_class, read_only: true
82
+ # embeds_many :registers, klass: :register_class, read_only: true
83
+ # embeds_one :organization, klass: :organization_class, read_only: true
84
+
85
+ passboolean :inSystemPagesEnabled, :printingEnabled
86
+ passboolean :hasSmartFields, :contentShareable, :enableEmailOut
87
+ passthrough :totalReferencesCount, :mouldCounter
88
+
89
+ class_resolver :pages_workflow_class, 'Ecoportal::API::GraphQL::Model::PagesWorkflow'
90
+
91
+ def workflow
92
+ return nil unless (raw = doc['workflow'])
93
+
94
+ @workflow ||= pages_workflow_class.new(raw)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,28 +1,27 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Interface
5
- module LocationStructure
6
- class Nodes < Logic::BaseModel
7
- extend Helpers::LocationsTree
8
-
9
- root!
10
-
11
- class_resolver :location_node_class, Node
12
-
13
- embeds_many :nodes, klass: :location_node_class, order_key: :weight
14
-
15
- def draft?
16
- false
17
- end
18
-
19
- def treeify
20
- self.class.treeify(nodes)
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
28
-
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Interface
5
+ module LocationStructure
6
+ class Nodes < Logic::BaseModel
7
+ extend Helpers::LocationsTree
8
+
9
+ root!
10
+
11
+ class_resolver :location_node_class, Node
12
+
13
+ embeds_many :nodes, klass: :location_node_class, order_key: :weight
14
+
15
+ def draft?
16
+ false
17
+ end
18
+
19
+ def treeify
20
+ self.class.treeify(nodes)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -3,6 +3,8 @@ module Ecoportal
3
3
  class GraphQL
4
4
  module Logic
5
5
  class BaseModel < Ecoportal::API::Common::GraphQL::Model
6
+ include Ecoportal::API::GraphQL::Concerns::SnakeCamelAccess
7
+
6
8
  class << self
7
9
  attr_accessor :client
8
10
  end
@@ -8,6 +8,8 @@ module Ecoportal
8
8
  inheritable_attrs :accepted_params, :param_defaults
9
9
 
10
10
  DETAIL_ERRORS = [
11
+ Ecoportal::API::Common::GraphQL::ResponseError,
12
+ Ecoportal::API::Common::Client::Error::UnexpectedServerError,
11
13
  Faraday::ParsingError,
12
14
  Graphlient::Errors::FaradayServerError,
13
15
  Graphlient::Errors::GraphQLError,
@@ -110,12 +112,31 @@ module Ecoportal
110
112
  raise "This method should be implemented in the child class #{self.class}"
111
113
  end
112
114
 
115
+ # Types that should be passed through as-is as GraphQL variable values.
116
+ # Anything else that responds to to_h is treated as a serialisable value object.
117
+ VARIABLE_PRIMITIVES = [
118
+ ::NilClass, ::TrueClass, ::FalseClass,
119
+ ::Integer, ::Float, ::String, ::Symbol,
120
+ ::Hash, ::Array
121
+ ].freeze
122
+ private_constant :VARIABLE_PRIMITIVES
123
+
124
+ def normalize_variables(kargs)
125
+ kargs.transform_values do |v|
126
+ VARIABLE_PRIMITIVES.any? { |t| v.is_a?(t) } || !v.respond_to?(:to_h) ? v : v.to_h
127
+ end
128
+ end
129
+
113
130
  def graphql_query(path: self.path, raw_response: {}, **kargs, &block)
114
131
  default_params = self.class.param_defaults.dup
115
- query_params = self.class.slice_params(default_params.merge(kargs))
132
+ query_params = self.class.slice_params(normalize_variables(default_params.merge(kargs)))
133
+
134
+ query_str = client.to_query_string(&block)
135
+ fragment_str = assemble_fragments(query_str)
136
+ full_query = fragment_str.empty? ? query_str : "#{query_str}\n\n#{fragment_str}"
116
137
 
117
138
  request(*path) do
118
- client.query(**query_params, &block).tap do |response|
139
+ client.http_client.execute(full_query, variables: query_params).tap do |response|
119
140
  raw_response[:data] = response
120
141
  end
121
142
  end
@@ -132,6 +153,28 @@ module Ecoportal
132
153
  wrap_response(response, path)
133
154
  end
134
155
 
156
+ # Resolves all fragment spreads in query_str, recursively following
157
+ # spreads inside assembled fragment bodies until no new names are found.
158
+ # Names that don't resolve to a registered fragment are skipped safely.
159
+ def assemble_fragments(query_str)
160
+ tried = {}
161
+ assembled = {}
162
+ pending = query_str.scan(/\.\.\.(\w+)/).flatten.map(&:to_sym).uniq
163
+
164
+ until (unresolved = pending.reject { |n| tried.key?(n) }).empty?
165
+ unresolved.each do |name|
166
+ tried[name] = true
167
+ frag = Ecoportal::API::GraphQL::Fragment.assemble(name)
168
+ next if frag.empty?
169
+
170
+ assembled[name] = frag
171
+ pending |= frag.scan(/\.\.\.(\w+)/).flatten.map(&:to_sym)
172
+ end
173
+ end
174
+
175
+ assembled.values.join("\n\n")
176
+ end
177
+
135
178
  def wrap_response(response, path = [])
136
179
  # we use the Hash, because fragments are persmissioned
137
180
  # see Use of Fragments at https://github.com/ashkan18/graphlient/tree/master?tab=readme-ov-file#use-of-fragments
@@ -4,6 +4,21 @@ module Ecoportal
4
4
  module Logic
5
5
  class Input < Logic::BaseModel
6
6
  passthrough :clientMutationId
7
+
8
+ class << self
9
+ # Builds a mutation input hash from a model's diff.
10
+ # Subclasses override this to reshape fields (e.g. array → IdDiffInput).
11
+ # @param model [Common::GraphQL::Model] the subject model.
12
+ # @return [Hash, nil] the mutation input hash, or nil when there are no changes.
13
+ def from_model(model, client_mutation_id: '')
14
+ diff = model.as_update
15
+ return nil if diff.nil?
16
+
17
+ diff[:patchVer] = model.patchVer if model.respond_to?(:patchVer) && !model.patchVer.nil?
18
+ diff[:clientMutationId] = client_mutation_id unless client_mutation_id.to_s.empty?
19
+ diff
20
+ end
21
+ end
7
22
  end
8
23
  end
9
24
  end
@@ -0,0 +1,10 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Model
5
+ class AiSummaryVersion < Base::AiSummaryVersion
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end