Module: Legion::Extensions::Audit::Runners::ApprovalQueue

Extended by:
ApprovalQueue
Includes:
Helpers::Lex
Included in:
ApprovalQueue
Defined in:
lib/legion/extensions/audit/runners/approval_queue.rb

Instance Method Summary collapse

Instance Method Details

#approve(id:, reviewer_id:) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 32

def approve(id:, reviewer_id:, **)
  define_approval_queue_model
  record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id]
  return { success: false, reason: :not_found } unless record
  return { success: false, reason: :already_decided } unless record.status == 'pending'

  record.update(status: 'approved', reviewer_id: reviewer_id, reviewed_at: Time.now.utc)
  publish_event('approval_decided', record)

  resumed = resume_pipeline(record)
  { success: true, approval_id: id, status: 'approved', resumed: resumed }
end

#list_pending(tenant_id: nil, limit: 50) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 56

def list_pending(tenant_id: nil, limit: 50, **)
  define_approval_queue_model
  dataset = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue.where(status: 'pending').order(Sequel.desc(:created_at))
  dataset = dataset.where(tenant_id: tenant_id) if tenant_id
  dataset = dataset.limit(limit)
  { success: true, approvals: dataset.all.map(&:values), count: dataset.count }
end

#reject(id:, reviewer_id:) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 45

def reject(id:, reviewer_id:, **)
  define_approval_queue_model
  record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id]
  return { success: false, reason: :not_found } unless record
  return { success: false, reason: :already_decided } unless record.status == 'pending'

  record.update(status: 'rejected', reviewer_id: reviewer_id, reviewed_at: Time.now.utc)
  publish_event('approval_decided', record)
  { success: true, approval_id: id, status: 'rejected' }
end

#show_approval(id:) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 64

def show_approval(id:, **)
  define_approval_queue_model
  record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id]
  return { success: false, reason: :not_found } unless record

  { success: true, approval: record.values }
end

#submit(approval_type:, payload:, requester_id:, tenant_id: nil, resume_routing_key: nil, resume_exchange: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 11

def submit(approval_type:, payload:, requester_id:, tenant_id: nil,
           resume_routing_key: nil, resume_exchange: nil, **)
  define_approval_queue_model
  json_payload = json_dump({ data: payload })

  create_hash = {
    approval_type: approval_type,
    payload:       json_payload,
    requester_id:  requester_id,
    status:        'pending',
    tenant_id:     tenant_id,
    created_at:    Time.now.utc
  }
  create_hash[:resume_routing_key] = resume_routing_key if resume_routing_key
  create_hash[:resume_exchange] = resume_exchange if resume_exchange

  record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue.create(create_hash)
  publish_event('approval_needed', record)
  { success: true, approval_id: record.id, status: 'pending' }
end