ecoportal-api-graphql 1.3.17 → 2.0.0

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 (466) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +384 -15
  3. data/LICENSE +21 -21
  4. data/README.md +24 -24
  5. data/lib/ecoportal/api/common/graphql/CLAUDE.md +36 -0
  6. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  7. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  8. data/lib/ecoportal/api/common/graphql/client.rb +69 -69
  9. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  10. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +28 -0
  11. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -54
  12. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -49
  13. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -188
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  15. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -295
  16. data/lib/ecoportal/api/common/graphql/model/diffable/leaf_diff_service.rb +97 -0
  17. data/lib/ecoportal/api/common/graphql/model/diffable.rb +1 -0
  18. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  19. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  20. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  21. data/lib/ecoportal/api/common/graphql.rb +16 -16
  22. data/lib/ecoportal/api/common.graphql.rb +8 -8
  23. data/lib/ecoportal/api/graphql/CLAUDE.md +37 -0
  24. data/lib/ecoportal/api/graphql/base/CLAUDE.md +50 -0
  25. data/lib/ecoportal/api/graphql/base/action.rb +1 -1
  26. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  27. data/lib/ecoportal/api/graphql/base/action_event.rb +23 -0
  28. data/lib/ecoportal/api/graphql/base/action_event_page.rb +16 -0
  29. data/lib/ecoportal/api/graphql/base/activity.rb +38 -0
  30. data/lib/ecoportal/api/graphql/base/activity_log.rb +38 -0
  31. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +13 -8
  32. data/lib/ecoportal/api/graphql/base/auth_log.rb +24 -0
  33. data/lib/ecoportal/api/graphql/base/authorization_result.rb +20 -0
  34. data/lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb +17 -5
  35. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  36. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  37. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -16
  38. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  39. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  40. data/lib/ecoportal/api/graphql/base/file_container.rb +12 -4
  41. data/lib/ecoportal/api/graphql/base/location_classification_type.rb +2 -0
  42. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  43. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  44. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  45. data/lib/ecoportal/api/graphql/base/location_structure.rb +3 -0
  46. data/lib/ecoportal/api/graphql/base/minimal_dashboard.rb +25 -0
  47. data/lib/ecoportal/api/graphql/base/organization.rb +2 -0
  48. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -9
  49. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -18
  50. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -29
  51. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +1 -1
  52. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +25 -2
  53. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +1 -1
  54. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -23
  55. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +46 -7
  56. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -24
  57. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +6 -3
  58. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -8
  59. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -9
  60. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +50 -12
  61. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -17
  62. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -26
  63. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -9
  64. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -17
  65. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -9
  66. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -21
  67. data/lib/ecoportal/api/graphql/base/page/data_field.rb +12 -18
  68. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -15
  69. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -48
  70. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  71. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -39
  72. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -27
  73. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -30
  74. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -34
  75. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -35
  76. data/lib/ecoportal/api/graphql/base/permissions.rb +15 -0
  77. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  78. data/lib/ecoportal/api/graphql/base/person_member_changelog.rb +23 -0
  79. data/lib/ecoportal/api/graphql/base/preset_view.rb +135 -0
  80. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -23
  81. data/lib/ecoportal/api/graphql/base/register.rb +6 -1
  82. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  83. data/lib/ecoportal/api/graphql/base.rb +9 -0
  84. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +65 -0
  85. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  86. data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +10 -0
  87. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  88. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  89. data/lib/ecoportal/api/graphql/builder/page.rb +0 -16
  90. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -84
  91. data/lib/ecoportal/api/graphql/builder/register.rb +49 -49
  92. data/lib/ecoportal/api/graphql/builder/template.rb +18 -0
  93. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +1 -1
  94. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -23
  95. data/lib/ecoportal/api/graphql/compat/pages.rb +7 -2
  96. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -84
  97. data/lib/ecoportal/api/graphql/compat/response.rb +14 -0
  98. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -33
  99. data/lib/ecoportal/api/graphql/compat.rb +17 -17
  100. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -71
  101. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -68
  102. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -60
  103. data/lib/ecoportal/api/graphql/concerns/threadable.rb +58 -0
  104. data/lib/ecoportal/api/graphql/concerns.rb +1 -0
  105. data/lib/ecoportal/api/graphql/connection/action.rb +1 -1
  106. data/lib/ecoportal/api/graphql/connection/action_category.rb +1 -1
  107. data/lib/ecoportal/api/graphql/connection/activity.rb +11 -0
  108. data/lib/ecoportal/api/graphql/connection/activity_log.rb +11 -0
  109. data/lib/ecoportal/api/graphql/connection/auth_log.rb +11 -0
  110. data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +1 -1
  111. data/lib/ecoportal/api/graphql/connection/minimal_dashboard.rb +11 -0
  112. data/lib/ecoportal/api/graphql/connection/page.rb +1 -1
  113. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +1 -1
  114. data/lib/ecoportal/api/graphql/connection/person_member.rb +1 -1
  115. data/lib/ecoportal/api/graphql/connection/person_member_changelog.rb +11 -0
  116. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -11
  117. data/lib/ecoportal/api/graphql/connection/preview_page.rb +1 -1
  118. data/lib/ecoportal/api/graphql/connection.rb +5 -0
  119. data/lib/ecoportal/api/graphql/diff/pairing/signals.rb +21 -1
  120. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  121. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  122. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  123. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  124. data/lib/ecoportal/api/graphql/error.rb +12 -12
  125. data/lib/ecoportal/api/graphql/file_upload/client.rb +198 -139
  126. data/lib/ecoportal/api/graphql/file_upload.rb +10 -10
  127. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  128. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  129. data/lib/ecoportal/api/graphql/fragment/activity.rb +84 -0
  130. data/lib/ecoportal/api/graphql/fragment/activity_log.rb +75 -0
  131. data/lib/ecoportal/api/graphql/fragment/auth_log.rb +29 -0
  132. data/lib/ecoportal/api/graphql/fragment/authorization_result.rb +14 -0
  133. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  134. data/lib/ecoportal/api/graphql/fragment/location_node.rb +1 -0
  135. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  136. data/lib/ecoportal/api/graphql/fragment/minimal_dashboard.rb +31 -0
  137. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +21 -0
  138. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -15
  139. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  140. data/lib/ecoportal/api/graphql/fragment/permissions.rb +98 -0
  141. data/lib/ecoportal/api/graphql/fragment/person_member_changelog.rb +33 -0
  142. data/lib/ecoportal/api/graphql/fragment.rb +7 -0
  143. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  144. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  145. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  146. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  147. data/lib/ecoportal/api/graphql/input/action/update.rb +12 -0
  148. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  149. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  150. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  151. data/lib/ecoportal/api/graphql/input/contractor_entity/manager_settings.rb +20 -0
  152. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +6 -27
  153. data/lib/ecoportal/api/graphql/input/contractor_entity.rb +1 -0
  154. data/lib/ecoportal/api/graphql/input/date_range.rb +16 -0
  155. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -16
  156. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  157. data/lib/ecoportal/api/graphql/input/location_structure/apply_commands.rb +2 -2
  158. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  159. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  160. data/lib/ecoportal/api/graphql/input/location_structure/draft/add_commands.rb +2 -2
  161. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  162. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  163. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  164. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  165. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  166. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +13 -13
  167. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  168. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  169. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  170. data/lib/ecoportal/api/graphql/input/location_structure/update_command.rb +6 -2
  171. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  172. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -14
  173. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -13
  174. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -13
  175. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -18
  176. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -13
  177. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -13
  178. data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -14
  179. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -14
  180. data/lib/ecoportal/api/graphql/input/page/update.rb +2 -2
  181. data/lib/ecoportal/api/graphql/input/page.rb +26 -26
  182. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -18
  183. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -16
  184. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +17 -2
  185. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -14
  186. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -18
  187. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -15
  188. data/lib/ecoportal/api/graphql/input/register.rb +13 -13
  189. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  190. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -234
  191. data/lib/ecoportal/api/graphql/input/search_conf.rb +1 -1
  192. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  193. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  194. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -18
  195. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -18
  196. data/lib/ecoportal/api/graphql/input/workflow_command/add_checklist_field_item.rb +19 -0
  197. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -18
  198. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -18
  199. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -18
  200. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -18
  201. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -18
  202. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -23
  203. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -18
  204. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -18
  205. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -18
  206. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -18
  207. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -18
  208. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -18
  209. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -18
  210. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -18
  211. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -18
  212. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -23
  213. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -18
  214. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -18
  215. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -19
  216. data/lib/ecoportal/api/graphql/input/workflow_command/add_smart_fill_config.rb +23 -0
  217. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +3 -2
  218. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -18
  219. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -18
  220. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -18
  221. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -18
  222. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -18
  223. data/lib/ecoportal/api/graphql/input/workflow_command/add_viewable_field.rb +45 -0
  224. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -18
  225. data/lib/ecoportal/api/graphql/input/workflow_command/archive_public_config.rb +19 -0
  226. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -18
  227. data/lib/ecoportal/api/graphql/input/workflow_command/create_public_config.rb +19 -0
  228. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -18
  229. data/lib/ecoportal/api/graphql/input/workflow_command/edit_checklist_field_item.rb +19 -0
  230. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -18
  231. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -18
  232. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +12 -2
  233. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -18
  234. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -19
  235. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -19
  236. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -18
  237. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -18
  238. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -18
  239. data/lib/ecoportal/api/graphql/input/workflow_command/edit_public_config.rb +19 -0
  240. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -18
  241. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -18
  242. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -18
  243. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -18
  244. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -22
  245. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -18
  246. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -19
  247. data/lib/ecoportal/api/graphql/input/workflow_command/edit_smart_fill_config.rb +21 -0
  248. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -18
  249. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -18
  250. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -18
  251. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_advanced_settings.rb +19 -0
  252. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_basic_settings.rb +27 -0
  253. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_container_uid.rb +45 -0
  254. data/lib/ecoportal/api/graphql/input/workflow_command/{edit_page_creator_permissions.rb → edit_template_creator_permissions.rb} +3 -2
  255. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_descriptions.rb +19 -0
  256. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -18
  257. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -18
  258. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/action_list.rb +31 -0
  259. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -24
  260. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +3 -1
  261. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +15 -2
  262. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/file.rb +21 -0
  263. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -20
  264. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +3 -2
  265. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -24
  266. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +27 -3
  267. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +3 -2
  268. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +3 -2
  269. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +3 -2
  270. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -20
  271. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -25
  272. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +3 -2
  273. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -18
  274. data/lib/ecoportal/api/graphql/input/workflow_command/move_viewable_field.rb +33 -0
  275. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -18
  276. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -18
  277. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -18
  278. data/lib/ecoportal/api/graphql/input/workflow_command/remove_checklist_field_item.rb +19 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -18
  280. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -18
  281. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -18
  282. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -18
  283. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -18
  284. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -18
  285. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -18
  286. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -18
  287. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -18
  288. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -18
  289. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -18
  290. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -18
  291. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -18
  292. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -18
  293. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -18
  294. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -18
  295. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -18
  296. data/lib/ecoportal/api/graphql/input/workflow_command/remove_smart_fill_config.rb +19 -0
  297. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -18
  298. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -18
  299. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -18
  300. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -18
  301. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -18
  302. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -18
  303. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -18
  304. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -18
  305. data/lib/ecoportal/api/graphql/input/workflow_command/remove_viewable_field.rb +21 -0
  306. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +3 -2
  307. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +3 -2
  308. data/lib/ecoportal/api/graphql/input/workflow_command.rb +43 -5
  309. data/lib/ecoportal/api/graphql/input.rb +1 -0
  310. data/lib/ecoportal/api/graphql/interface/base_page.rb +36 -3
  311. data/lib/ecoportal/api/graphql/interface/location_structure/command.rb +2 -1
  312. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  313. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  314. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  315. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -15
  316. data/lib/ecoportal/api/graphql/logic/base_query.rb +193 -193
  317. data/lib/ecoportal/api/graphql/logic/connection.rb +17 -0
  318. data/lib/ecoportal/api/graphql/logic/input.rb +127 -0
  319. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  320. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  321. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  322. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  323. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  324. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  325. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  326. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  327. data/lib/ecoportal/api/graphql/model/action_event.rb +14 -0
  328. data/lib/ecoportal/api/graphql/model/action_event_page.rb +10 -0
  329. data/lib/ecoportal/api/graphql/model/activity.rb +14 -0
  330. data/lib/ecoportal/api/graphql/model/activity_log.rb +31 -0
  331. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -10
  332. data/lib/ecoportal/api/graphql/model/auth_log.rb +11 -0
  333. data/lib/ecoportal/api/graphql/model/authorization_result.rb +12 -0
  334. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  335. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  336. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  337. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  338. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  339. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  340. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  341. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  342. data/lib/ecoportal/api/graphql/model/minimal_dashboard.rb +14 -0
  343. data/lib/ecoportal/api/graphql/model/organization.rb +27 -0
  344. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -14
  345. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  346. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  347. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  348. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -21
  349. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -20
  350. data/lib/ecoportal/api/graphql/model/permissions.rb +179 -0
  351. data/lib/ecoportal/api/graphql/model/person_member.rb +7 -0
  352. data/lib/ecoportal/api/graphql/model/person_member_changelog.rb +15 -0
  353. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -10
  354. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -10
  355. data/lib/ecoportal/api/graphql/model/register.rb +10 -10
  356. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  357. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  358. data/lib/ecoportal/api/graphql/model.rb +9 -0
  359. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  360. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  361. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  362. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  363. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +21 -11
  364. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +26 -11
  365. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -13
  366. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  367. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  368. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  369. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update_manager_settings.rb +37 -0
  370. data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +1 -0
  371. data/lib/ecoportal/api/graphql/mutation/file_container/upload.rb +78 -0
  372. data/lib/ecoportal/api/graphql/mutation/file_container.rb +15 -0
  373. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  374. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  375. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  376. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  377. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  378. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  379. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  380. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  381. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +1 -1
  382. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -40
  383. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +1 -1
  384. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -50
  385. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +1 -1
  386. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -43
  387. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +1 -1
  388. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +1 -1
  389. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +1 -1
  390. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +1 -1
  391. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -40
  392. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +1 -1
  393. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -40
  394. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -28
  395. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -35
  396. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +1 -1
  397. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -37
  398. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -35
  399. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -15
  400. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -35
  401. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +1 -1
  402. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -35
  403. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -14
  404. data/lib/ecoportal/api/graphql/mutation/template/update_related_page.rb +79 -0
  405. data/lib/ecoportal/api/graphql/mutation/template.rb +1 -0
  406. data/lib/ecoportal/api/graphql/mutation.rb +1 -1
  407. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  408. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  409. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  410. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  411. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -12
  412. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  413. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  414. data/lib/ecoportal/api/graphql/payload/contractor_entity/manager_settings.rb +20 -0
  415. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  416. data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +1 -0
  417. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  418. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  419. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  420. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  421. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  422. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  423. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  424. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  425. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +1 -1
  426. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -13
  427. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -13
  428. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -13
  429. data/lib/ecoportal/api/graphql/payload/page/draft.rb +1 -1
  430. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +1 -1
  431. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -13
  432. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -13
  433. data/lib/ecoportal/api/graphql/payload/preset_view.rb +1 -1
  434. data/lib/ecoportal/api/graphql/payload/register.rb +1 -1
  435. data/lib/ecoportal/api/graphql/payload/template/update_related_page.rb +15 -0
  436. data/lib/ecoportal/api/graphql/payload/template.rb +1 -0
  437. data/lib/ecoportal/api/graphql/payload/upload.rb +12 -0
  438. data/lib/ecoportal/api/graphql/payload.rb +1 -0
  439. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  440. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  441. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  442. data/lib/ecoportal/api/graphql/query/activity_logs.rb +78 -0
  443. data/lib/ecoportal/api/graphql/query/auth_logs.rb +51 -0
  444. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  445. data/lib/ecoportal/api/graphql/query/dashboard_search.rb +57 -0
  446. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -76
  447. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  448. data/lib/ecoportal/api/graphql/query/location_structure.rb +2 -0
  449. data/lib/ecoportal/api/graphql/query/location_structures.rb +2 -0
  450. data/lib/ecoportal/api/graphql/query/page.rb +6 -1
  451. data/lib/ecoportal/api/graphql/query/page_activities.rb +56 -0
  452. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -47
  453. data/lib/ecoportal/api/graphql/query/pages.rb +59 -59
  454. data/lib/ecoportal/api/graphql/query/permissions.rb +35 -0
  455. data/lib/ecoportal/api/graphql/query/person_member_changelogs.rb +53 -0
  456. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +1 -1
  457. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -83
  458. data/lib/ecoportal/api/graphql/query/templates.rb +53 -53
  459. data/lib/ecoportal/api/graphql/query.rb +6 -0
  460. data/lib/ecoportal/api/graphql_version.rb +1 -1
  461. data/lib/ecoportal/api-graphql.rb +10 -10
  462. metadata +78 -12
  463. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +0 -28
  464. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +0 -36
  465. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +0 -40
  466. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +0 -13
@@ -6,6 +6,12 @@ module Ecoportal
6
6
  include Concerns::PageCompat
7
7
  include Concerns::DataFieldAccess
8
8
 
9
+ # Page-level leaf arrays (`otherTags`, whole-set `locations`) are cascaded
10
+ # attributes the default DiffService cannot see. LeafDiffService diffs them
11
+ # inline (full-set replace) while still cascading into real nested models
12
+ # (e.g. a phased page's `stages`). See Diffable::LeafDiffService.
13
+ DIFF_CLASS = Ecoportal::API::Common::GraphQL::Model::Diffable::LeafDiffService
14
+
9
15
  passkey :id
10
16
  passthrough :name, :uid
11
17
  passthrough :icon
@@ -15,7 +21,6 @@ module Ecoportal
15
21
  # class_resolver :force_class, 'Ecoportal::API::GraphQL::Base::Force'
16
22
  # class_resolver :task_class, 'Ecoportal::API::GraphQL::Interface::Task'
17
23
  # class_resolver :theme_class, 'Ecoportal::API::GraphQL::Base::Theme'
18
- # class_resolver :template_class, 'Ecoportal::API::GraphQL::Base::Template'
19
24
  # class_resolver :register_class, 'Ecoportal::API::GraphQL::Base::Register'
20
25
  class_resolver :organization_class, 'Ecoportal::API::GraphQL::Base::Organization'
21
26
 
@@ -41,7 +46,6 @@ module Ecoportal
41
46
  # embeds_one :taskPriority, klass: 'BasePage::TaskPriorityEnum', read_only: true
42
47
  passthrough :taskPriority
43
48
 
44
-
45
49
  passthrough :patchVer
46
50
 
47
51
  passboolean :draft, :archived
@@ -78,7 +82,36 @@ module Ecoportal
78
82
  # the CreateFromTemplateInput preview. nil for fetched/persisted pages.
79
83
  attr_accessor :_compat_source_template_id
80
84
 
81
- # embeds_one :template, klass: :template_class, read_only: true
85
+ # The narrow `Template` type (NOT the template page — see Base::Template for the
86
+ # asymmetry). Populated only for template pages; nil for records. Carries
87
+ # `templateContainerUid`, the cross-version series key.
88
+ class_resolver :template_class, 'Ecoportal::API::GraphQL::Model::Template::Information'
89
+
90
+ # Deliberately NOT `embeds_one ..., read_only: true`, and this is not a style choice:
91
+ # `read_only` does not keep a mutated child out of the parent's diff. With `embeds_one`,
92
+ # `page.template.templateContainerUid = 'x'` yields
93
+ # `as_update => { id:, template: { templateContainerUid: 'x' } }` — but `UpdatePageInput`
94
+ # has NO `template` member, so that would push a key `updatePage` cannot accept. The
95
+ # only writer for the series key is the `editTemplateContainerUid` workflow command.
96
+ #
97
+ # So this follows the same on-demand read-only pattern as `#forces` above, over a COPY of
98
+ # the sub-doc: the returned model is a genuine dead end — writes to it cannot reach
99
+ # `doc`, cannot dirty the page, and cannot leak into an update.
100
+ def template
101
+ return nil unless (raw = doc['template'])
102
+
103
+ @template ||= template_class.new(
104
+ Ecoportal::API::Common::GraphQL::HashHelpers.deep_dup(raw)
105
+ )
106
+ end
107
+
108
+ # Convenience reader for the cross-version series key — nil unless this page is a
109
+ # template AND the read selected `template { templateContainerUid }` (CommonPageUnion
110
+ # does). Many versions may share one uid; only one may be published at a time.
111
+ def templateContainerUid
112
+ template&.templateContainerUid
113
+ end
114
+
82
115
  # embeds_many :registers, klass: :register_class, read_only: true
83
116
  # embeds_one :organization, klass: :organization_class, read_only: true
84
117
 
@@ -17,7 +17,8 @@ module Ecoportal
17
17
 
18
18
  def set_values(**kargs)
19
19
  kargs.each do |key, value|
20
- send(key, value) if respond_to?(key, true)
20
+ writer = "#{key}="
21
+ send(writer, value) if respond_to?(writer, true)
21
22
  end
22
23
 
23
24
  self
@@ -1,43 +1,43 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Interface
5
- module LocationStructure
6
- class Node < Logic::BaseModel
7
- root!
8
-
9
- class_resolver :location_classification_class, 'Ecoportal::API::GraphQL::Base::LocationClassificationType'
10
- class_resolver :location_node_class, self
11
-
12
- passkey :id
13
- passthrough :name
14
- embeds_many :classifications, klass: :location_classification_class
15
- passarray :classificationObjectIds
16
-
17
- passthrough :weight
18
-
19
- passboolean :archived
20
- passthrough :archivedToken
21
-
22
- passthrough :structureId
23
-
24
- embeds_one :parent, klass: :location_node_class, nullable: true
25
- passthrough :parentObjectId
26
-
27
- def parentId
28
- parent&.id
29
- end
30
- alias_method :parent_id, :parentId
31
-
32
- def parent_id_upcase
33
- parent_id&.upcase
34
- end
35
-
36
- embeds_many :ancestors, klass: :location_node_class, read_only: true
37
- embeds_many :children, klass: :location_node_class, read_only: true
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Interface
5
+ module LocationStructure
6
+ class Node < Logic::BaseModel
7
+ root!
8
+
9
+ class_resolver :location_classification_class, 'Ecoportal::API::GraphQL::Base::LocationClassificationType'
10
+ class_resolver :location_node_class, self
11
+
12
+ passkey :id
13
+ passthrough :name
14
+ embeds_many :classifications, klass: :location_classification_class
15
+ passarray :classificationObjectIds
16
+
17
+ passthrough :weight
18
+
19
+ passboolean :archived
20
+ passthrough :archivedToken
21
+
22
+ passthrough :structureId
23
+
24
+ embeds_one :parent, klass: :location_node_class, nullable: true
25
+ passthrough :parentObjectId
26
+
27
+ def parentId
28
+ parent&.id
29
+ end
30
+ alias_method :parent_id, :parentId
31
+
32
+ def parent_id_upcase
33
+ parent_id&.upcase
34
+ end
35
+
36
+ embeds_many :ancestors, klass: :location_node_class, read_only: true
37
+ embeds_many :children, klass: :location_node_class, read_only: true
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,14 +1,14 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Interface
5
- module LocationStructure
6
- end
7
- end
8
- end
9
- end
10
- end
11
-
12
- require_relative 'location_structure/node'
13
- require_relative 'location_structure/nodes'
14
- require_relative 'location_structure/command'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Interface
5
+ module LocationStructure
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'location_structure/node'
13
+ require_relative 'location_structure/nodes'
14
+ require_relative 'location_structure/command'
@@ -1,11 +1,11 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Interface
5
- end
6
- end
7
- end
8
- end
9
-
10
- require_relative 'interface/location_structure'
11
- require_relative 'interface/base_page'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Interface
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'interface/location_structure'
11
+ require_relative 'interface/base_page'
@@ -1,15 +1,15 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Logic
5
- class BaseModel < Ecoportal::API::Common::GraphQL::Model
6
- include Ecoportal::API::GraphQL::Concerns::SnakeCamelAccess
7
-
8
- class << self
9
- attr_accessor :client
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Logic
5
+ class BaseModel < Ecoportal::API::Common::GraphQL::Model
6
+ include Ecoportal::API::GraphQL::Concerns::SnakeCamelAccess
7
+
8
+ class << self
9
+ attr_accessor :client
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,193 +1,193 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Logic
5
- class BaseQuery
6
- include Ecoportal::API::Common::GraphQL::ClassHelpers
7
-
8
- inheritable_attrs :accepted_params, :param_defaults
9
-
10
- DETAIL_ERRORS = [
11
- Ecoportal::API::Common::GraphQL::ResponseError,
12
- Ecoportal::API::Common::Client::Error::UnexpectedServerError,
13
- Faraday::ParsingError,
14
- Graphlient::Errors::FaradayServerError,
15
- Graphlient::Errors::GraphQLError,
16
- Graphlient::Errors::ClientError
17
- ].freeze
18
-
19
- class << self
20
- def param_defaults
21
- @param_defaults ||= {}
22
- end
23
-
24
- def accepted_params(*keys, default: :unused)
25
- @accepted_params ||= []
26
- return @accepted_params if keys.empty?
27
-
28
- keys.map(&:to_sym).uniq.each do |key|
29
- @accepted_params |= [key]
30
- param_defaults[key] = default unless default == :unused
31
- end
32
-
33
- @accepted_params.push(*keys).tap(&:uniq!)
34
- @accepted_params
35
- end
36
-
37
- def clear_accepted_params
38
- @param_defaults = {}
39
- @accepted_params = []
40
- end
41
-
42
- def slice_params(kargs)
43
- kargs.slice(*accepted_params)
44
- end
45
-
46
- # Used to obtain the full `path` in the GraphQL query by using `base_path`
47
- # @note it is meant for reusability of queries from different end-points
48
- def field_name(str = nil)
49
- return @field_name unless str
50
-
51
- @field_name = nil
52
- @field_name = str.to_s if str
53
- @field_name
54
- end
55
-
56
- def base_path(path = :unused)
57
- return @base_path if path == :unused
58
-
59
- path ||= []
60
- path = path.to_s.split('.') if path.is_a?(String)
61
- path = path.map(&:to_s).compact
62
-
63
- @base_path = path
64
- end
65
- end
66
-
67
- include Ecoportal::API::Common::Concerns::Benchmarkable
68
-
69
- attr_reader :client, :base_path
70
-
71
- def initialize(client, path: nil, base_path: self.class.base_path)
72
- @path = path
73
- @base_path = base_path
74
- @client = client
75
- end
76
-
77
- # Resolves the `path` by using `path` or `base_path` + `class.field_name`.
78
- def path(field_name = self.class.field_name)
79
- result = @path
80
- result ||= default_path if respond_to?(:default_path, true)
81
- result ||= (base_path + [field_name]) if base_path && field_name
82
- result ||= [field_name]
83
- result
84
- end
85
-
86
- # Query rely that manages the different blocks.
87
- # @return [Class] an object of `response_class` with the results hanging from `path`.
88
- def query(path: self.path, raw_response: {}, **kargs, &block)
89
- print = !is_a?(Mutation)
90
-
91
- benchmarking("#{self.class}##{__method__}", print: print) do
92
- graphql_query(
93
- path: path,
94
- raw_response: raw_response,
95
- **kargs,
96
- &basic_block(&block)
97
- )
98
- end
99
- end
100
-
101
- def response_class
102
- raise "You should override this method in #{self.class}"
103
- end
104
-
105
- def access_point(path = [])
106
- path.last
107
- end
108
-
109
- private
110
-
111
- def basic_block
112
- raise "This method should be implemented in the child class #{self.class}"
113
- end
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
-
130
- def graphql_query(path: self.path, raw_response: {}, **kargs, &block)
131
- default_params = self.class.param_defaults.dup
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}"
137
-
138
- request(*path) do
139
- client.http_client.execute(full_query, variables: query_params).tap do |response|
140
- raw_response[:data] = response
141
- end
142
- end
143
- rescue *DETAIL_ERRORS => _err
144
- pp kargs
145
- puts "Internal Error with these params:\n"
146
- pp query_params
147
- pp block
148
- raise
149
- end
150
-
151
- def request(*path)
152
- response = yield
153
- wrap_response(response, path)
154
- end
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
-
178
- def wrap_response(response, path = [])
179
- # we use the Hash, because fragments are persmissioned
180
- # see Use of Fragments at https://github.com/ashkan18/graphlient/tree/master?tab=readme-ov-file#use-of-fragments
181
- unless (res = response.to_h.dig(*path.dup.unshift('data')))
182
- msg = "Complete failure on request. Path: #{path}\n#{response.to_h.pretty_inspect}"
183
- raise msg
184
- end
185
-
186
- data = Ecoportal::API::Common::GraphQL::HashHelpers.deep_dup(res)
187
- response_class.new(data)
188
- end
189
- end
190
- end
191
- end
192
- end
193
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Logic
5
+ class BaseQuery
6
+ include Ecoportal::API::Common::GraphQL::ClassHelpers
7
+
8
+ inheritable_attrs :accepted_params, :param_defaults
9
+
10
+ DETAIL_ERRORS = [
11
+ Ecoportal::API::Common::GraphQL::ResponseError,
12
+ Ecoportal::API::Common::Client::Error::UnexpectedServerError,
13
+ Faraday::ParsingError,
14
+ Graphlient::Errors::FaradayServerError,
15
+ Graphlient::Errors::GraphQLError,
16
+ Graphlient::Errors::ClientError
17
+ ].freeze
18
+
19
+ class << self
20
+ def param_defaults
21
+ @param_defaults ||= {}
22
+ end
23
+
24
+ def accepted_params(*keys, default: :unused)
25
+ @accepted_params ||= []
26
+ return @accepted_params if keys.empty?
27
+
28
+ keys.map(&:to_sym).uniq.each do |key|
29
+ @accepted_params |= [key]
30
+ param_defaults[key] = default unless default == :unused
31
+ end
32
+
33
+ @accepted_params.push(*keys).tap(&:uniq!)
34
+ @accepted_params
35
+ end
36
+
37
+ def clear_accepted_params
38
+ @param_defaults = {}
39
+ @accepted_params = []
40
+ end
41
+
42
+ def slice_params(kargs)
43
+ kargs.slice(*accepted_params)
44
+ end
45
+
46
+ # Used to obtain the full `path` in the GraphQL query by using `base_path`
47
+ # @note it is meant for reusability of queries from different end-points
48
+ def field_name(str = nil)
49
+ return @field_name unless str
50
+
51
+ @field_name = nil
52
+ @field_name = str.to_s if str
53
+ @field_name
54
+ end
55
+
56
+ def base_path(path = :unused)
57
+ return @base_path if path == :unused
58
+
59
+ path ||= []
60
+ path = path.to_s.split('.') if path.is_a?(String)
61
+ path = path.map(&:to_s).compact
62
+
63
+ @base_path = path
64
+ end
65
+ end
66
+
67
+ include Ecoportal::API::Common::Concerns::Benchmarkable
68
+
69
+ attr_reader :client, :base_path
70
+
71
+ def initialize(client, path: nil, base_path: self.class.base_path)
72
+ @path = path
73
+ @base_path = base_path
74
+ @client = client
75
+ end
76
+
77
+ # Resolves the `path` by using `path` or `base_path` + `class.field_name`.
78
+ def path(field_name = self.class.field_name)
79
+ result = @path
80
+ result ||= default_path if respond_to?(:default_path, true)
81
+ result ||= (base_path + [field_name]) if base_path && field_name
82
+ result ||= [field_name]
83
+ result
84
+ end
85
+
86
+ # Query rely that manages the different blocks.
87
+ # @return [Class] an object of `response_class` with the results hanging from `path`.
88
+ def query(path: self.path, raw_response: {}, **kargs, &block)
89
+ print = !is_a?(Mutation)
90
+
91
+ benchmarking("#{self.class}##{__method__}", print: print) do
92
+ graphql_query(
93
+ path: path,
94
+ raw_response: raw_response,
95
+ **kargs,
96
+ &basic_block(&block)
97
+ )
98
+ end
99
+ end
100
+
101
+ def response_class
102
+ raise "You should override this method in #{self.class}"
103
+ end
104
+
105
+ def access_point(path = [])
106
+ path.last
107
+ end
108
+
109
+ private
110
+
111
+ def basic_block
112
+ raise "This method should be implemented in the child class #{self.class}"
113
+ end
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
+
130
+ def graphql_query(path: self.path, raw_response: {}, **kargs, &block)
131
+ default_params = self.class.param_defaults.dup
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}"
137
+
138
+ request(*path) do
139
+ client.http_client.execute(full_query, variables: query_params).tap do |response|
140
+ raw_response[:data] = response
141
+ end
142
+ end
143
+ rescue *DETAIL_ERRORS => _err
144
+ pp kargs
145
+ puts "Internal Error with these params:\n"
146
+ pp query_params
147
+ pp block
148
+ raise
149
+ end
150
+
151
+ def request(*path)
152
+ response = yield
153
+ wrap_response(response, path)
154
+ end
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
+
178
+ def wrap_response(response, path = [])
179
+ # we use the Hash, because fragments are persmissioned
180
+ # see Use of Fragments at https://github.com/ashkan18/graphlient/tree/master?tab=readme-ov-file#use-of-fragments
181
+ unless (res = response.to_h.dig(*path.dup.unshift('data')))
182
+ msg = "Complete failure on request. Path: #{path}\n#{response.to_h.pretty_inspect}"
183
+ raise msg
184
+ end
185
+
186
+ data = Ecoportal::API::Common::GraphQL::HashHelpers.deep_dup(res)
187
+ response_class.new(data)
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -18,6 +18,23 @@ module Ecoportal
18
18
  embeds_many :nodes, klass: :node_class
19
19
  embeds_one :pageInfo, klass: Base::PageInfo
20
20
 
21
+ # Bind a connection subclass to its concrete node type.
22
+ #
23
+ # The base `embeds_many :nodes, klass: :node_class` builds a SINGLE dynamic
24
+ # `CollectionModel` ("nodes::node_class") that every subclass inherits and shares.
25
+ # The v2 collection layer memoizes the resolved class on that shared collection
26
+ # (items_klass.rb:62-63), so the FIRST connection instantiated in a process poisons
27
+ # every other connection's instance `nodes` typing (e.g. a MinimalDashboard connection
28
+ # returning AuthLog nodes). Declaring `embeds_many :nodes` per subclass with the concrete
29
+ # class gives each subclass its OWN collection ("nodes::Model::X") bound to a real Class —
30
+ # no shared symbol, nothing to memoize wrongly.
31
+ #
32
+ # Use `nodes_of Model::X` in a subclass instead of `class_resolver :node_class, Model::X`.
33
+ def self.nodes_of(klass)
34
+ class_resolver :node_class, klass
35
+ embeds_many :nodes, klass: klass
36
+ end
37
+
21
38
  def empty?
22
39
  count < 1
23
40
  end