ecoportal-api-graphql 2.0.0 → 3.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 (393) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +793 -14
  3. data/LICENSE +21 -21
  4. data/README.gem.md +53 -0
  5. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  6. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  7. data/lib/ecoportal/api/common/graphql/client.rb +107 -69
  8. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  9. data/lib/ecoportal/api/common/graphql/http_client.rb +124 -8
  10. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -54
  11. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -49
  12. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -188
  13. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -295
  15. data/lib/ecoportal/api/common/graphql/model/diffable/leaf_diff_service.rb +1 -1
  16. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  17. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  18. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  19. data/lib/ecoportal/api/common/graphql.rb +16 -16
  20. data/lib/ecoportal/api/common.graphql.rb +8 -8
  21. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  22. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +1 -1
  23. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  24. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  25. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -16
  26. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  27. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  28. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  29. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  30. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  31. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -9
  32. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -18
  33. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -29
  34. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +1 -1
  35. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +1 -1
  36. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -23
  37. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -24
  38. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +160 -12
  39. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -8
  40. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -9
  41. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -17
  42. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -26
  43. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -9
  44. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -17
  45. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -9
  46. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -21
  47. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +51 -0
  48. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -15
  49. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -48
  50. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  51. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -39
  52. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -27
  53. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -30
  54. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -34
  55. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -35
  56. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  57. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -23
  58. data/lib/ecoportal/api/graphql/base/register.rb +1 -1
  59. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  60. data/lib/ecoportal/api/graphql/base/temp_image.rb +28 -0
  61. data/lib/ecoportal/api/graphql/base/template/change_log_entry.rb +118 -0
  62. data/lib/ecoportal/api/graphql/base/template.rb +2 -0
  63. data/lib/ecoportal/api/graphql/base.rb +1 -0
  64. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  65. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  66. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  67. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -84
  68. data/lib/ecoportal/api/graphql/builder/register.rb +49 -49
  69. data/lib/ecoportal/api/graphql/builder/template.rb +37 -4
  70. data/lib/ecoportal/api/graphql/builder/template_builder.rb +21 -2
  71. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +1 -1
  72. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -23
  73. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -84
  74. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -33
  75. data/lib/ecoportal/api/graphql/compat.rb +17 -17
  76. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -71
  77. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -68
  78. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -60
  79. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -11
  80. data/lib/ecoportal/api/graphql/connection/template_change_log.rb +19 -0
  81. data/lib/ecoportal/api/graphql/connection.rb +1 -0
  82. data/lib/ecoportal/api/graphql/diff/change.rb +7 -2
  83. data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +19 -1
  84. data/lib/ecoportal/api/graphql/diff/version_diff.rb +13 -6
  85. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  86. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  87. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  88. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  89. data/lib/ecoportal/api/graphql/error.rb +12 -12
  90. data/lib/ecoportal/api/graphql/file_upload/client.rb +140 -35
  91. data/lib/ecoportal/api/graphql/file_upload.rb +10 -10
  92. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  93. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  94. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  95. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  96. data/lib/ecoportal/api/graphql/fragment/page.rb +1 -0
  97. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +10 -3
  98. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -15
  99. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  100. data/lib/ecoportal/api/graphql/fragment/permissions.rb +0 -2
  101. data/lib/ecoportal/api/graphql/fragment/template_change_log.rb +102 -0
  102. data/lib/ecoportal/api/graphql/fragment.rb +1 -0
  103. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  104. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  105. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  106. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  107. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  108. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  109. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  110. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -16
  111. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  112. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  113. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  114. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  115. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  116. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  117. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  118. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  119. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +21 -13
  120. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  121. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  122. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  123. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  124. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -14
  125. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -13
  126. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -13
  127. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -18
  128. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -13
  129. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -13
  130. data/lib/ecoportal/api/graphql/input/page/review_task.rb +27 -14
  131. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -14
  132. data/lib/ecoportal/api/graphql/input/page/update.rb +109 -6
  133. data/lib/ecoportal/api/graphql/input/page.rb +26 -26
  134. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -18
  135. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -16
  136. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +1 -1
  137. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -14
  138. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -18
  139. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -15
  140. data/lib/ecoportal/api/graphql/input/register.rb +13 -13
  141. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  142. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -234
  143. data/lib/ecoportal/api/graphql/input/search_conf.rb +1 -1
  144. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  145. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  146. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -18
  147. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -18
  148. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -18
  149. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -18
  150. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -18
  151. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -18
  152. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +10 -9
  153. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -18
  154. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -23
  155. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -18
  156. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -18
  157. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -18
  158. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -18
  159. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -18
  160. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -18
  161. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -18
  162. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -18
  163. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -18
  164. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -23
  165. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -18
  166. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -18
  167. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +25 -19
  168. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -18
  169. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -18
  170. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -18
  171. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -18
  172. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -18
  173. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -18
  174. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -18
  175. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -18
  176. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -18
  177. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -18
  178. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +7 -2
  179. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +21 -18
  180. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -19
  181. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -19
  182. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -18
  183. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -18
  184. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -18
  185. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -18
  186. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -18
  187. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -18
  188. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -18
  189. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -22
  190. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -18
  191. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +23 -19
  192. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -18
  193. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -18
  194. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -18
  195. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_basic_settings.rb +7 -2
  196. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_container_uid.rb +1 -1
  197. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -18
  198. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -18
  199. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +28 -24
  200. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +8 -2
  201. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -20
  202. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -24
  203. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +8 -2
  204. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -20
  205. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -25
  206. data/lib/ecoportal/api/graphql/input/workflow_command/manage_copy_page_configuration.rb +47 -0
  207. data/lib/ecoportal/api/graphql/input/workflow_command/move_section_to_stage.rb +33 -0
  208. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -18
  209. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -18
  210. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -18
  211. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -18
  212. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -18
  213. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -18
  214. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -18
  215. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -18
  216. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -18
  217. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -18
  218. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -18
  219. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -18
  220. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -18
  221. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -18
  222. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -18
  223. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -18
  224. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -18
  225. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -18
  226. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -18
  227. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -18
  228. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -18
  229. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -18
  230. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -18
  231. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -18
  232. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -18
  233. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -18
  234. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -18
  235. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -18
  236. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -18
  237. data/lib/ecoportal/api/graphql/input/workflow_command.rb +5 -0
  238. data/lib/ecoportal/api/graphql/interface/base_page.rb +14 -0
  239. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  240. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  241. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  242. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -15
  243. data/lib/ecoportal/api/graphql/logic/base_query.rb +260 -193
  244. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  245. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  246. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  247. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  248. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  249. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  250. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  251. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  252. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -10
  253. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  254. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  255. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  256. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  257. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  258. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  259. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  260. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  261. data/lib/ecoportal/api/graphql/model/organization.rb +9 -0
  262. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -14
  263. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  264. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  265. data/lib/ecoportal/api/graphql/model/page/phased.rb +17 -0
  266. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  267. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -21
  268. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -20
  269. data/lib/ecoportal/api/graphql/model/permissions.rb +6 -0
  270. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -10
  271. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -10
  272. data/lib/ecoportal/api/graphql/model/register.rb +10 -10
  273. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  274. data/lib/ecoportal/api/graphql/model/temp_image.rb +10 -0
  275. data/lib/ecoportal/api/graphql/model/template/binding.rb +60 -0
  276. data/lib/ecoportal/api/graphql/model/template/change_log_entry.rb +19 -0
  277. data/lib/ecoportal/api/graphql/model/template/command_grouper.rb +107 -0
  278. data/lib/ecoportal/api/graphql/model/template/command_normalizer.rb +116 -0
  279. data/lib/ecoportal/api/graphql/model/template/command_synthesis.rb +262 -0
  280. data/lib/ecoportal/api/graphql/model/template/field.rb +68 -0
  281. data/lib/ecoportal/api/graphql/model/template/force.rb +65 -0
  282. data/lib/ecoportal/api/graphql/model/template/helper.rb +32 -0
  283. data/lib/ecoportal/api/graphql/model/template/instance.rb +202 -0
  284. data/lib/ecoportal/api/graphql/model/template/node.rb +78 -0
  285. data/lib/ecoportal/api/graphql/model/template/option.rb +49 -0
  286. data/lib/ecoportal/api/graphql/model/template/read.rb +164 -0
  287. data/lib/ecoportal/api/graphql/model/template/section.rb +82 -0
  288. data/lib/ecoportal/api/graphql/model/template/stage.rb +49 -0
  289. data/lib/ecoportal/api/graphql/model/template/staged_executor.rb +236 -0
  290. data/lib/ecoportal/api/graphql/model/template.rb +37 -1
  291. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  292. data/lib/ecoportal/api/graphql/model.rb +1 -0
  293. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  294. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  295. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  296. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  297. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +1 -1
  298. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +1 -1
  299. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -13
  300. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  301. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  302. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  303. data/lib/ecoportal/api/graphql/mutation/file_container/upload.rb +11 -4
  304. data/lib/ecoportal/api/graphql/mutation/image/upload.rb +88 -0
  305. data/lib/ecoportal/api/graphql/mutation/image.rb +14 -0
  306. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  307. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  308. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  309. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  310. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  311. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  312. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  313. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  314. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +1 -1
  315. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -40
  316. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +1 -1
  317. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -50
  318. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +1 -1
  319. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -43
  320. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +1 -1
  321. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +1 -1
  322. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +1 -1
  323. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +1 -1
  324. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -40
  325. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +1 -1
  326. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -40
  327. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -28
  328. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -35
  329. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +1 -1
  330. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -37
  331. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -35
  332. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -15
  333. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -35
  334. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +1 -1
  335. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -35
  336. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -14
  337. data/lib/ecoportal/api/graphql/mutation/template/create.rb +35 -3
  338. data/lib/ecoportal/api/graphql/mutation/template/update.rb +4 -2
  339. data/lib/ecoportal/api/graphql/mutation.rb +1 -0
  340. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  341. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  342. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  343. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  344. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -12
  345. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  346. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  347. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  348. data/lib/ecoportal/api/graphql/payload/images_upload.rb +14 -0
  349. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +2 -2
  350. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +2 -2
  351. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  352. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  353. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  354. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  355. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  356. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  357. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  358. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  359. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +1 -1
  360. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -13
  361. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -13
  362. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -13
  363. data/lib/ecoportal/api/graphql/payload/page/draft.rb +1 -1
  364. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +1 -1
  365. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -13
  366. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -13
  367. data/lib/ecoportal/api/graphql/payload/preset_view.rb +1 -1
  368. data/lib/ecoportal/api/graphql/payload/register.rb +1 -1
  369. data/lib/ecoportal/api/graphql/payload.rb +1 -0
  370. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  371. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  372. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  373. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  374. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -76
  375. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  376. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -47
  377. data/lib/ecoportal/api/graphql/query/pages.rb +59 -59
  378. data/lib/ecoportal/api/graphql/query/permissions.rb +1 -1
  379. data/lib/ecoportal/api/graphql/query/person_members.rb +76 -0
  380. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +1 -1
  381. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -83
  382. data/lib/ecoportal/api/graphql/query/template_change_log.rb +118 -0
  383. data/lib/ecoportal/api/graphql/query/templates.rb +53 -53
  384. data/lib/ecoportal/api/graphql/query.rb +2 -0
  385. data/lib/ecoportal/api/graphql_version.rb +1 -1
  386. data/lib/ecoportal/api-graphql.rb +10 -10
  387. metadata +45 -9
  388. data/README.md +0 -24
  389. data/lib/ecoportal/api/common/graphql/CLAUDE.md +0 -36
  390. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +0 -28
  391. data/lib/ecoportal/api/graphql/CLAUDE.md +0 -37
  392. data/lib/ecoportal/api/graphql/base/CLAUDE.md +0 -50
  393. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +0 -65
@@ -1,49 +1,49 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Builder
5
- class Register
6
- attr_reader :client
7
-
8
- def initialize(client)
9
- @client = client
10
- end
11
-
12
- # Register CRUD
13
- def create(**kargs, &block)
14
- createMutation.query(**kargs, &block)
15
- end
16
-
17
- def update(**kargs, &block)
18
- updateMutation.query(**kargs, &block)
19
- end
20
-
21
- def destroy(**kargs, &block)
22
- destroyMutation.query(**kargs, &block)
23
- end
24
-
25
- # Preset view sub-builder — list, create, update, permission, destroy
26
- def preset_view
27
- Register::PresetView.new(client)
28
- end
29
-
30
- private
31
-
32
- def createMutation
33
- Mutation::Register::Create.new(client)
34
- end
35
-
36
- def updateMutation
37
- Mutation::Register::Update.new(client)
38
- end
39
-
40
- def destroyMutation
41
- Mutation::Register::Destroy.new(client)
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
-
49
- require_relative 'register/preset_view'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Builder
5
+ class Register
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ # Register CRUD
13
+ def create(**kargs, &block)
14
+ createMutation.query(**kargs, &block)
15
+ end
16
+
17
+ def update(**kargs, &block)
18
+ updateMutation.query(**kargs, &block)
19
+ end
20
+
21
+ def destroy(**kargs, &block)
22
+ destroyMutation.query(**kargs, &block)
23
+ end
24
+
25
+ # Preset view sub-builder — list, create, update, permission, destroy
26
+ def preset_view
27
+ Register::PresetView.new(client)
28
+ end
29
+
30
+ private
31
+
32
+ def createMutation
33
+ Mutation::Register::Create.new(client)
34
+ end
35
+
36
+ def updateMutation
37
+ Mutation::Register::Update.new(client)
38
+ end
39
+
40
+ def destroyMutation
41
+ Mutation::Register::Destroy.new(client)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ require_relative 'register/preset_view'
@@ -9,12 +9,17 @@ module Ecoportal
9
9
  @client = client
10
10
  end
11
11
 
12
- def create(commands:, &block)
13
- createMutation.query(commands: commands, &block)
12
+ # @param register_id [String, nil] bind the new template to this register. Optional in
13
+ # the schema, but in practice REQUIRED for the create to be authorized at all — see
14
+ # the WHY in {Mutation::Template::Create}. Omitted when nil.
15
+ def create(commands:, register_id: nil, &block)
16
+ createMutation.query(commands: commands, register_id: register_id, &block)
14
17
  end
15
18
 
16
- def update(model, commands:, patch_ver: model.patchVer, &block)
17
- updateMutation.query(id: model.id, patch_ver: patch_ver, commands: commands, &block)
19
+ def update(model, commands:, patch_ver: model.patchVer, client_mutation_id: nil, &block)
20
+ kwargs = { id: model.id, patch_ver: patch_ver, commands: commands }
21
+ kwargs[:client_mutation_id] = client_mutation_id unless client_mutation_id.nil?
22
+ updateMutation.query(**kwargs, &block)
18
23
  end
19
24
 
20
25
  def publish(id:, &block)
@@ -58,6 +63,30 @@ module Ecoportal
58
63
  destroyRelatedPageMutation.query(template_id: template_id, id: id, patch_ver: patch_ver, &block)
59
64
  end
60
65
 
66
+ # TEMPLATE CHANGE LOG — who changed this template, what, and when. Newest first
67
+ # (server-side `_id: :desc`), paginated.
68
+ #
69
+ # api.template.change_log(id: template_page_id, first: 50) # => Connection
70
+ # api.template.change_log.each(id: template_page_id) { |e| ... } # auto-paginates
71
+ #
72
+ # ★ Two caveats, both silent — read `Base::Template::ChangeLogEntry` before relying on
73
+ # this: the connection is nil (not empty) unless the caller satisfies
74
+ # `Pages::TemplatePolicy#update_information?`, and only TEMPLATE_BUILDER-sourced
75
+ # commands appear (workflow-builder ones are on `Query::PagesWorkflowCommands`).
76
+ #
77
+ # Called with no arguments it returns the query object itself, so `#each` /`#map` and
78
+ # the rest of Enumerable are available — same idiom as the QueryIntegration queries on
79
+ # `Model::Organization`.
80
+ # @param detail [Boolean] when true, also select FIELD-LEVEL detail (what changed).
81
+ # Ignored when an explicit block is given -- the block wins, since it is the more
82
+ # specific instruction. Off by default so the common who/when read stays cheap.
83
+ def change_log(detail: false, **kargs, &block)
84
+ selection = block || (detail ? Query::TemplateChangeLog.detail_block : nil)
85
+ return changeLogQuery if kargs.empty? && !selection
86
+
87
+ changeLogQuery.query(**kargs, &selection)
88
+ end
89
+
61
90
  private
62
91
 
63
92
  def createMutation
@@ -91,6 +120,10 @@ module Ecoportal
91
120
  def destroyRelatedPageMutation
92
121
  Mutation::Template::DestroyRelatedPage.new(client)
93
122
  end
123
+
124
+ def changeLogQuery
125
+ Query::TemplateChangeLog.new(client)
126
+ end
94
127
  end
95
128
  end
96
129
  end
@@ -24,7 +24,12 @@ module Ecoportal
24
24
  # { field_type: 'PlainText', label: 'Description', column: 0,
25
25
  # description: 'ID:token' }, # addField (+ editFieldConfiguration for description)
26
26
  # { field_type: 'Select', label: 'Severity',
27
- # options: [ { label: 'Low', weight: 0 }, ... ], # addSelectFieldOption
27
+ # options: [ { label: 'Low', weight: 0, value: 'low' },
28
+ # { label: 'High', weight: 10, value: 'high' } ], # addSelectFieldOption
29
+ # # `value:` is REQUIRED per option (backend: AddSelectFieldOptionInput,
30
+ # # required: true) — it is the option's unique key (duplicate values within one
31
+ # # field are rejected), always sent as a String even for numeric select fields
32
+ # # (stored as an Integer server-side). A missing `value` raises ArgumentError.
28
33
  # config: { select: { multiple: false } } }, # editFieldConfiguration(byType:)
29
34
  # { field_type: 'Gauge', label: 'Risk',
30
35
  # stops: [ { threshold: 0, color: '#0f0' }, ... ], # addGaugeFieldStop
@@ -125,9 +130,23 @@ module Ecoportal
125
130
  add(:editFieldConfiguration, data_field_id: field_ph, description: description)
126
131
  end
127
132
 
133
+ # addSelectFieldOption requires `value` (backend: AddSelectFieldOptionInput, required: true
134
+ # — a real field distinct from label/weight, cast to a number server-side for numeric
135
+ # select fields). The DSL has no natural default for it (unlike label/weight, it is
136
+ # business data this builder cannot infer), so it MUST be supplied per option in the spec;
137
+ # a missing one raises rather than silently falling back to the label/weight (which would
138
+ # risk persisting the wrong stored value for a scored/numeric select field).
128
139
  def emit_options(field, field_ph)
129
140
  Array(field[:options]).each do |opt|
130
- add(:addSelectFieldOption, data_field_id: field_ph, label: opt[:label], weight: opt[:weight])
141
+ value = opt[:value]
142
+ if value.nil?
143
+ raise ArgumentError,
144
+ "TemplateBuilder: option '#{opt[:label]}' on field '#{field[:label]}' is " \
145
+ 'missing `value` (addSelectFieldOption requires it) — supply ' \
146
+ 'options: [{ label:, weight:, value: }, ...] in the spec'
147
+ end
148
+
149
+ add(:addSelectFieldOption, data_field_id: field_ph, label: opt[:label], value: value, weight: opt[:weight])
131
150
  end
132
151
  end
133
152
 
@@ -18,7 +18,7 @@ module Ecoportal
18
18
  # tag_filter passed through (same ES backend, same format)
19
19
  # register_filter passed through
20
20
  # and_filter / or_filter passed through
21
- # Operation/param shapes per .ai-assistance/code/search_filters.md.
21
+ # Operation/param shapes per the repo's internal docs
22
22
  class FilterTranslator
23
23
  class << self
24
24
  def to_graphql(filter)
@@ -1,23 +1,23 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Compat
5
- # Returned by Compat::Pages#create — mirrors the v2 reference object.
6
- # Scripts access .page_id and .active_stage_id after page creation.
7
- class PageReference
8
- attr_reader :page_id, :active_stage_id, :page
9
-
10
- def initialize(page)
11
- @page = page
12
- @page_id = page.id
13
- @active_stage_id = page.respond_to?(:current_stage_id) ? page.current_stage_id : nil
14
- end
15
-
16
- def success?
17
- !@page_id.nil?
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Compat
5
+ # Returned by Compat::Pages#create — mirrors the v2 reference object.
6
+ # Scripts access .page_id and .active_stage_id after page creation.
7
+ class PageReference
8
+ attr_reader :page_id, :active_stage_id, :page
9
+
10
+ def initialize(page)
11
+ @page = page
12
+ @page_id = page.id
13
+ @active_stage_id = page.respond_to?(:current_stage_id) ? page.current_stage_id : nil
14
+ end
15
+
16
+ def success?
17
+ !@page_id.nil?
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,84 +1,84 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Compat
5
- # v2-compatible registers API backed by GraphQL register search.
6
- # Scripts call: apiv2.registers.search(register_id, options) { |result| ... }
7
- #
8
- # With a block: yields each PreviewPage result (cursor-paginated).
9
- # Without a block (or only_first: true): returns a SearchResults object
10
- # with .total and .total_before_filtering.
11
- #
12
- # Filter translation:
13
- # v2 date_filter { lbound:, ubound: } → GraphQL date_filter { gte:, lte: }
14
- # v2 tag_filter { tags:, mode: } → passed through (same ES backend)
15
- # SearchConf filter objects → passed through directly
16
- class Registers
17
- def initialize(client)
18
- @client = client
19
- end
20
-
21
- # Options:
22
- # sort: 'created_at' | 'updated_at'
23
- # dir: 'asc' | 'desc'
24
- # query: String (full-text search)
25
- # filters: Array of filter objects or v2 filter hashes
26
- # batch_size: Integer (results per request, default 20)
27
- # include_archived: Boolean (default false)
28
- # only_first: Boolean — return after first page (no block needed)
29
- def search(register_id, options = {}, &block)
30
- conf = build_search_conf(options)
31
- first = options.fetch(:batch_size, 20)
32
- query = Query::RegisterPreviewPages.new(@client)
33
-
34
- args = {
35
- registerId: register_id,
36
- searchConf: conf.to_h,
37
- includeArchived: options.fetch(:include_archived, false),
38
- first: first
39
- }
40
-
41
- if block || !options[:only_first]
42
- # Block mode: yield each result, stop if only_first
43
- query.each(**args) do |result|
44
- block&.call(result)
45
- break if options[:only_first]
46
- end
47
- else
48
- # No-block mode: return SearchResults with .total etc.
49
- raw = query.query(**args)
50
- SearchResults.new(raw)
51
- end
52
- end
53
-
54
- private
55
-
56
- def build_search_conf(options)
57
- conf = Input::SearchConf.new
58
-
59
- if (sort_key = options[:sort])
60
- direction = options.fetch(:dir, 'desc').to_sym
61
- conf.sort(sort_key.to_sym, direction)
62
- end
63
-
64
- conf.query(options[:query]) if options[:query]
65
-
66
- Array(options[:filters]).compact.each do |filter|
67
- conf.filter(translate_filter(filter))
68
- end
69
-
70
- conf
71
- end
72
-
73
- # Translates a v2-style filter hash to a GraphQL-compatible filter hash.
74
- # SearchConf filter objects (respond to to_h and are not Hash) pass through.
75
- # v2 date_filter: lbound/ubound → gte/lte
76
- # Other v2 types (tag_filter etc.): passed through — same ES backend.
77
- def translate_filter(filter)
78
- FilterTranslator.to_graphql(filter)
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Compat
5
+ # v2-compatible registers API backed by GraphQL register search.
6
+ # Scripts call: apiv2.registers.search(register_id, options) { |result| ... }
7
+ #
8
+ # With a block: yields each PreviewPage result (cursor-paginated).
9
+ # Without a block (or only_first: true): returns a SearchResults object
10
+ # with .total and .total_before_filtering.
11
+ #
12
+ # Filter translation:
13
+ # v2 date_filter { lbound:, ubound: } → GraphQL date_filter { gte:, lte: }
14
+ # v2 tag_filter { tags:, mode: } → passed through (same ES backend)
15
+ # SearchConf filter objects → passed through directly
16
+ class Registers
17
+ def initialize(client)
18
+ @client = client
19
+ end
20
+
21
+ # Options:
22
+ # sort: 'created_at' | 'updated_at'
23
+ # dir: 'asc' | 'desc'
24
+ # query: String (full-text search)
25
+ # filters: Array of filter objects or v2 filter hashes
26
+ # batch_size: Integer (results per request, default 20)
27
+ # include_archived: Boolean (default false)
28
+ # only_first: Boolean — return after first page (no block needed)
29
+ def search(register_id, options = {}, &block)
30
+ conf = build_search_conf(options)
31
+ first = options.fetch(:batch_size, 20)
32
+ query = Query::RegisterPreviewPages.new(@client)
33
+
34
+ args = {
35
+ registerId: register_id,
36
+ searchConf: conf.to_h,
37
+ includeArchived: options.fetch(:include_archived, false),
38
+ first: first
39
+ }
40
+
41
+ if block || !options[:only_first]
42
+ # Block mode: yield each result, stop if only_first
43
+ query.each(**args) do |result|
44
+ block&.call(result)
45
+ break if options[:only_first]
46
+ end
47
+ else
48
+ # No-block mode: return SearchResults with .total etc.
49
+ raw = query.query(**args)
50
+ SearchResults.new(raw)
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def build_search_conf(options)
57
+ conf = Input::SearchConf.new
58
+
59
+ if (sort_key = options[:sort])
60
+ direction = options.fetch(:dir, 'desc').to_sym
61
+ conf.sort(sort_key.to_sym, direction)
62
+ end
63
+
64
+ conf.query(options[:query]) if options[:query]
65
+
66
+ Array(options[:filters]).compact.each do |filter|
67
+ conf.filter(translate_filter(filter))
68
+ end
69
+
70
+ conf
71
+ end
72
+
73
+ # Translates a v2-style filter hash to a GraphQL-compatible filter hash.
74
+ # SearchConf filter objects (respond to to_h and are not Hash) pass through.
75
+ # v2 date_filter: lbound/ubound → gte/lte
76
+ # Other v2 types (tag_filter etc.): passed through — same ES backend.
77
+ def translate_filter(filter)
78
+ FilterTranslator.to_graphql(filter)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,33 +1,33 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Compat
5
- # Wraps a GraphQL connection object to expose the v2-compatible search
6
- # result interface. eco-helpers scripts access:
7
- # search_results.total — filtered count
8
- # search_results.total_before_filtering — pre-filter count (approximated)
9
- # (also Enumerable for iteration)
10
- class SearchResults
11
- include Enumerable
12
-
13
- attr_reader :total, :total_before_filtering
14
-
15
- def initialize(connection)
16
- @total = connection.totalCount
17
- # GraphQL does not expose a pre-filter count — use the same value.
18
- @total_before_filtering = connection.totalCount
19
- @nodes = connection.nodes
20
- end
21
-
22
- def each(&block)
23
- @nodes.each(&block)
24
- end
25
-
26
- def empty?
27
- @nodes.empty?
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Compat
5
+ # Wraps a GraphQL connection object to expose the v2-compatible search
6
+ # result interface. eco-helpers scripts access:
7
+ # search_results.total — filtered count
8
+ # search_results.total_before_filtering — pre-filter count (approximated)
9
+ # (also Enumerable for iteration)
10
+ class SearchResults
11
+ include Enumerable
12
+
13
+ attr_reader :total, :total_before_filtering
14
+
15
+ def initialize(connection)
16
+ @total = connection.totalCount
17
+ # GraphQL does not expose a pre-filter count — use the same value.
18
+ @total_before_filtering = connection.totalCount
19
+ @nodes = connection.nodes
20
+ end
21
+
22
+ def each(&block)
23
+ @nodes.each(&block)
24
+ end
25
+
26
+ def empty?
27
+ @nodes.empty?
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,17 +1,17 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Compat
5
- end
6
- end
7
- end
8
- end
9
-
10
- require_relative 'compat/filter_translator'
11
- require_relative 'compat/stage_collection'
12
- require_relative 'compat/search_results'
13
- require_relative 'compat/page_reference'
14
- require_relative 'compat/response'
15
- require_relative 'compat/stage_view'
16
- require_relative 'compat/pages'
17
- require_relative 'compat/registers'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Compat
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'compat/filter_translator'
11
+ require_relative 'compat/stage_collection'
12
+ require_relative 'compat/search_results'
13
+ require_relative 'compat/page_reference'
14
+ require_relative 'compat/response'
15
+ require_relative 'compat/stage_view'
16
+ require_relative 'compat/pages'
17
+ require_relative 'compat/registers'