feat(api): expose rule export endpoints (#1602)

* feat(api): expose rule export endpoints

* fix(api): tighten rule export contracts

* fix(api): document balance sheet auth errors

* test(api): align rule API key fixtures

* Update docs/api/openapi.yaml

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>

* Quick win

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
ghost
2026-05-01 11:47:06 -06:00
committed by GitHub
parent 352c301e4b
commit 783309188f
11 changed files with 795 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
# frozen_string_literal: true
json.id action.id
json.action_type action.action_type
json.value action.value
json.created_at action.created_at.iso8601
json.updated_at action.updated_at.iso8601

View File

@@ -0,0 +1,17 @@
# frozen_string_literal: true
json.id condition.id
json.condition_type condition.condition_type
json.operator condition.operator
json.value condition.value
if condition.compound?
json.sub_conditions condition.sub_conditions do |sub_condition|
json.partial! "api/v1/rules/condition", condition: sub_condition
end
else
json.sub_conditions []
end
json.created_at condition.created_at.iso8601
json.updated_at condition.updated_at.iso8601

View File

@@ -0,0 +1,15 @@
# frozen_string_literal: true
json.id rule.id
json.name rule.name
json.resource_type rule.resource_type
json.active rule.active
json.effective_date rule.effective_date&.iso8601
json.conditions rule.conditions.select { |condition| condition.parent_id.nil? } do |condition|
json.partial! "api/v1/rules/condition", condition: condition
end
json.actions rule.actions do |action|
json.partial! "api/v1/rules/action", action: action
end
json.created_at rule.created_at.iso8601
json.updated_at rule.updated_at.iso8601

View File

@@ -0,0 +1,14 @@
# frozen_string_literal: true
json.data @rules do |rule|
json.partial! "api/v1/rules/rule", rule: rule
end
json.meta do
json.current_page @pagy.page
json.next_page @pagy.next
json.prev_page @pagy.prev
json.total_pages @pagy.pages
json.total_count @pagy.count
json.per_page @per_page
end

View File

@@ -0,0 +1,5 @@
# frozen_string_literal: true
json.data do
json.partial! "api/v1/rules/rule", rule: @rule
end