ecoportal-api-graphql 1.3.14 → 1.3.15

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ai-assistance/projects/TODO.md +170 -118
  3. data/.ai-assistance/skills/ai-instructions/SKILL.md +48 -48
  4. data/.ai-assistance/skills/code-specs/SKILL.md +69 -69
  5. data/.ai-assistance/skills/gemini-assist/SKILL.md +63 -63
  6. data/.ai-assistance/skills/project-cycle/SKILL.md +177 -177
  7. data/.ai-assistance/skills/refactor/SKILL.md +62 -62
  8. data/.ai-assistance/skills/spec-generation/SKILL.md +72 -72
  9. data/.gitlab-ci.yml +64 -12
  10. data/CHANGELOG.md +60 -0
  11. data/changelog.d/fixed-mr51-payload-item-mismatches.md +17 -0
  12. data/lib/ecoportal/api/common/graphql/http_client.rb +6 -0
  13. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -17
  14. data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
  15. data/lib/ecoportal/api/graphql/base/page.rb +17 -16
  16. data/lib/ecoportal/api/graphql/base/template.rb +35 -0
  17. data/lib/ecoportal/api/graphql/base.rb +2 -0
  18. data/lib/ecoportal/api/graphql/compat/response.rb +35 -35
  19. data/lib/ecoportal/api/graphql/file_upload/client.rb +21 -10
  20. data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
  21. data/lib/ecoportal/api/graphql/fragment/force.rb +14 -10
  22. data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
  23. data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
  24. data/lib/ecoportal/api/graphql/fragment.rb +3 -0
  25. data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
  26. data/lib/ecoportal/api/graphql/model/page.rb +16 -15
  27. data/lib/ecoportal/api/graphql/model/template.rb +15 -0
  28. data/lib/ecoportal/api/graphql/model.rb +2 -0
  29. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -45
  30. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -40
  31. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -40
  32. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -40
  33. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -40
  34. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -40
  35. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +7 -7
  36. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +8 -7
  37. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -40
  38. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -40
  39. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -40
  40. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -40
  41. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -35
  42. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -35
  43. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -36
  44. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -40
  45. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -13
  46. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -46
  47. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +1 -1
  48. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +1 -1
  49. data/lib/ecoportal/api/graphql/mutation.rb +20 -20
  50. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -21
  51. data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -13
  52. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -13
  53. data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
  54. data/lib/ecoportal/api/graphql/payload/page.rb +20 -19
  55. data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -11
  56. data/lib/ecoportal/api/graphql/payload/register.rb +15 -11
  57. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +1 -1
  58. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +1 -1
  59. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +1 -1
  60. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +9 -3
  61. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +9 -3
  62. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -78
  63. data/lib/ecoportal/api/graphql.rb +9 -5
  64. data/lib/ecoportal/api/graphql_version.rb +1 -1
  65. data/tests/dump_schema.rb +88 -0
  66. data/tests/validate_queries.rb +34 -12
  67. metadata +11 -1
@@ -1,40 +1,38 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Page
6
- class DeleteDraft < Logic::Mutation
7
- field_name :deleteDraftPage
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::Draft'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::DeleteDraft'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :DeleteDraftPageInput!) {
18
- deleteDraftPage(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors {
27
- details
28
- fullMessages
29
- }
30
- item {
31
- spread :PageFields
32
- }
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Page
6
+ class DeleteDraft < Logic::Mutation
7
+ field_name :deleteDraftPage
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::Draft'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::DeleteDraft'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :DeleteDraftPageInput!) {
18
+ deleteDraftPage(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors {
27
+ details
28
+ fullMessages
29
+ }
30
+ ok
31
+ }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -38,16 +38,16 @@ module Ecoportal
38
38
 
39
39
  private
40
40
 
41
+ # ★ Corrected 2026-07-30: `executeWorkflowCommands` takes exactly ONE argument,
42
+ # `input: ExecuteWorkflowCommandsInput!` (`{ clientMutationId, id!, patchVer!,
43
+ # commands! }`) — it never accepted flat `id`/`patchVer`/`commands` arguments, so this
44
+ # document was invalid and the mutation could not run. `#query` above already built
45
+ # the right `input` hash for the variables; only the rendered document was wrong.
41
46
  def basic_block(&block)
42
47
  payload_block = block || default_payload_block
43
48
  proc {
44
- mutation(id: :id!, patchVer: :int!, commands: :WorkflowCommandInput!) {
45
- executeWorkflowCommands(
46
- id: :id,
47
- patchVer: :patchVer,
48
- commands: :commands,
49
- &payload_block
50
- )
49
+ mutation(input: :ExecuteWorkflowCommandsInput!) {
50
+ executeWorkflowCommands(input: :input, &payload_block)
51
51
  }
52
52
  }
53
53
  end
@@ -20,16 +20,17 @@ module Ecoportal
20
20
 
21
21
  private
22
22
 
23
+ # ★ Corrected 2026-07-30: `executeWorkflowCommands` takes exactly ONE argument,
24
+ # `input: ExecuteWorkflowCommandsInput!` (`{ clientMutationId, id!, patchVer!,
25
+ # commands! }`) — it never accepted flat `id`/`patchVer`/`commands` arguments, so this
26
+ # document was invalid and the mutation could not run (this is the page-level command
27
+ # bus; `Mutation::Template::Update` is a different class and was always valid).
28
+ # `#query` above already built the right `input` hash for the variables.
23
29
  def basic_block(&block)
24
30
  payload_block = block || default_payload_block
25
31
  proc {
26
- mutation(id: :id!, patchVer: :int!, commands: :WorkflowCommandInput!) {
27
- executeWorkflowCommands(
28
- id: :id,
29
- patchVer: :patchVer,
30
- commands: :commands,
31
- &payload_block
32
- )
32
+ mutation(input: :ExecuteWorkflowCommandsInput!) {
33
+ executeWorkflowCommands(input: :input, &payload_block)
33
34
  }
34
35
  }
35
36
  end
@@ -1,40 +1,38 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Page
6
- class PublishDraft < Logic::Mutation
7
- field_name :publishDraftPage
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::Draft'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::PublishDraft'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :PublishDraftPageInput!) {
18
- publishDraftPage(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors {
27
- details
28
- fullMessages
29
- }
30
- item {
31
- spread :PageFields
32
- }
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Page
6
+ class PublishDraft < Logic::Mutation
7
+ field_name :publishDraftPage
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::Draft'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::PublishDraft'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :PublishDraftPageInput!) {
18
+ publishDraftPage(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors {
27
+ details
28
+ fullMessages
29
+ }
30
+ ok
31
+ }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,40 +1,40 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Page
6
- class RejectReviewTask < Logic::Mutation
7
- field_name :rejectReviewPageTask
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :RejectReviewPageTaskInput!) {
18
- rejectReviewPageTask(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors {
27
- details
28
- fullMessages
29
- }
30
- item {
31
- spread :PageFields
32
- }
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Page
6
+ class RejectReviewTask < Logic::Mutation
7
+ field_name :rejectReviewPageTask
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :RejectReviewPageTaskInput!) {
18
+ rejectReviewPageTask(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors {
27
+ details
28
+ fullMessages
29
+ }
30
+ item {
31
+ spread :PageTaskFields
32
+ }
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,40 +1,40 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Page
6
- class RestartReviewTask < Logic::Mutation
7
- field_name :restartReviewPageTask
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :RestartReviewPageTaskInput!) {
18
- restartReviewPageTask(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors {
27
- details
28
- fullMessages
29
- }
30
- item {
31
- spread :PageFields
32
- }
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Page
6
+ class RestartReviewTask < Logic::Mutation
7
+ field_name :restartReviewPageTask
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :RestartReviewPageTaskInput!) {
18
+ restartReviewPageTask(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors {
27
+ details
28
+ fullMessages
29
+ }
30
+ item {
31
+ spread :PageTaskFields
32
+ }
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,40 +1,40 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Page
6
- class UndoReviewTask < Logic::Mutation
7
- field_name :undoReviewPageTask
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :UndoReviewPageTaskInput!) {
18
- undoReviewPageTask(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors {
27
- details
28
- fullMessages
29
- }
30
- item {
31
- spread :PageFields
32
- }
33
- }
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Page
6
+ class UndoReviewTask < Logic::Mutation
7
+ field_name :undoReviewPageTask
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Page::ReviewTask'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Page::ReviewTask'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :UndoReviewPageTaskInput!) {
18
+ undoReviewPageTask(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors {
27
+ details
28
+ fullMessages
29
+ }
30
+ item {
31
+ spread :PageTaskFields
32
+ }
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,35 +1,34 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module PresetView
6
- class Destroy < Logic::Mutation
7
- field_name :destroyPresetView
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::PresetView'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::PresetView'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :DestroyPresetViewInput!) {
18
- destroyPresetView(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors { details fullMessages }
27
- item { id name }
28
- }
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module PresetView
6
+ class Destroy < Logic::Mutation
7
+ field_name :destroyPresetView
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::PresetView'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::PresetView'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :DestroyPresetViewInput!) {
18
+ destroyPresetView(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors { details fullMessages }
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,35 +1,35 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module Register
6
- class Destroy < Logic::Mutation
7
- field_name :destroyRegister
8
-
9
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Register'
10
- class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Register'
11
-
12
- private
13
-
14
- def basic_block(&block)
15
- payload_block = block || default_payload_block
16
- proc {
17
- mutation(input: :DestroyRegisterInput!) {
18
- destroyRegister(input: :input, &payload_block)
19
- }
20
- }
21
- end
22
-
23
- def default_payload_block
24
- proc {
25
- clientMutationId
26
- errors { details fullMessages }
27
- item { id name }
28
- }
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module Register
6
+ class Destroy < Logic::Mutation
7
+ field_name :destroyRegister
8
+
9
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::Register'
10
+ class_resolver :input_class, 'Ecoportal::API::GraphQL::Input::Register'
11
+
12
+ private
13
+
14
+ def basic_block(&block)
15
+ payload_block = block || default_payload_block
16
+ proc {
17
+ mutation(input: :DestroyRegisterInput!) {
18
+ destroyRegister(input: :input, &payload_block)
19
+ }
20
+ }
21
+ end
22
+
23
+ def default_payload_block
24
+ proc {
25
+ clientMutationId
26
+ errors { details fullMessages }
27
+ ok
28
+ }
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,36 +1,36 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Mutation
5
- module SmartFill
6
- # Enqueue AI generation for a SmartFill data field on a page.
7
- # Returns ok: true immediately — generation is asynchronous.
8
- # Poll the SmartFill field's status on the page to know when done.
9
- class Generate < Logic::Mutation
10
- field_name :smartFillGenerate
11
-
12
- class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::OkPayload'
13
-
14
- private
15
-
16
- def basic_block(&block)
17
- payload_block = block || default_payload_block
18
- proc {
19
- mutation(pageId: :id!, dataFieldId: :id!) {
20
- smartFillGenerate(pageId: :pageId, dataFieldId: :dataFieldId, &payload_block)
21
- }
22
- }
23
- end
24
-
25
- def default_payload_block
26
- proc {
27
- ok
28
- errors { details fullMessages }
29
- }
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ module SmartFill
6
+ # Enqueue AI generation for a SmartFill data field on a page.
7
+ # Returns ok: true immediately — generation is asynchronous.
8
+ # Poll the SmartFill field's status on the page to know when done.
9
+ class Generate < Logic::Mutation
10
+ field_name :smartFillGenerate
11
+
12
+ class_resolver :payload_class, 'Ecoportal::API::GraphQL::Payload::OkPayload'
13
+
14
+ private
15
+
16
+ def basic_block(&block)
17
+ payload_block = block || default_payload_block
18
+ proc {
19
+ mutation(pageId: :id!, dataFieldId: :id!) {
20
+ smartFillGenerate(pageId: :pageId, dataFieldId: :dataFieldId, &payload_block)
21
+ }
22
+ }
23
+ end
24
+
25
+ def default_payload_block
26
+ proc {
27
+ ok
28
+ errors { details fullMessages }
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end