Class: Textus::Infra::Store::AuditLog

Inherits:
Base
  • Object
show all
Defined in:
lib/textus/infra/store/audit_log.rb

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from Textus::Infra::Store::Base

Instance Method Details

#append(role:, verb:, key:, etag_before: nil, etag_after: nil, correlation_id: nil) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/textus/infra/store/audit_log.rb', line 5

def append(role:, verb:, key:, etag_before: nil, etag_after: nil, correlation_id: nil)
  table(:audit_events).insert(
    ts: Time.now.utc.iso8601,
    role:, verb:, key:,
    etag_before:, etag_after:, correlation_id:
  )
end

#last_writer(key) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/textus/infra/store/audit_log.rb', line 32

def last_writer(key)
  row = table(:audit_events)
        .where(key:, verb: %w[put delete key_delete])
        .order(Sequel.desc(:seq))
        .first
  result(row)
end

#latestObject



24
25
26
# File 'lib/textus/infra/store/audit_log.rb', line 24

def latest
  result(table(:audit_events).order(Sequel.desc(:seq)).first) || { seq: 0 }
end

#list(seq_since: nil, key: nil, role: nil, verb: nil, correlation_id: nil, limit: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/textus/infra/store/audit_log.rb', line 13

def list(seq_since: nil, key: nil, role: nil, verb: nil, correlation_id: nil, limit: nil)
  dataset = table(:audit_events)
  dataset = dataset.where { seq > seq_since } if seq_since
  dataset = dataset.where(key:) if key
  dataset = dataset.where(role:) if role
  dataset = dataset.where(verb:) if verb
  dataset = dataset.where(correlation_id:) if correlation_id
  dataset = dataset.limit(limit) if limit
  results(dataset.order(:seq).all)
end

#min_availableObject



28
29
30
# File 'lib/textus/infra/store/audit_log.rb', line 28

def min_available
  result(table(:audit_events).order(:seq).first)&.dig(:seq)
end