Class: WolfCore::NoSqlDbInstanceDataSource

Inherits:
Object
  • Object
show all
Defined in:
lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client:) ⇒ NoSqlDbInstanceDataSource



16
17
18
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 16

def initialize(client:)
  @client = client
end

Class Attribute Details

.instanceObject (readonly)

Returns the value of attribute instance.



13
14
15
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 13

def instance
  @instance
end

Class Method Details

.init(region: "us-east-1") ⇒ Object



5
6
7
8
9
10
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 5

def self.init(region: "us-east-1")
  return @instance if @instance

  dynamodb_client = Aws::DynamoDB::Client.new(region: region)
  @instance = new(client: dynamodb_client)
end

Instance Method Details

#get_item(table_name:, key:) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 30

def get_item(table_name:, key:)
  Result.try do
    get_params = {
      table_name: table_name,
      key: key
    }
    item = @client.get_item(get_params).item
    Result.success(data: { item: item })
  end
end

#get_item_by_index(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 41

def get_item_by_index(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil)
  Result.try do
    query(
      table_name: table_name,
      key_condition_expression: key_condition_expression,
      expression_attribute_values: expression_attribute_values,
      index_name: index_name,
      limit: 1
    ).fold do |data|
      items = data.items
      Result.success(data: { item: items.first })
    end
  end
end

#put_item(table_name:, item:) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 20

def put_item(table_name:, item:)
  Result.try do
    response = @client.put_item({
                                  table_name: table_name,
                                  item: item
                                })
    Result.success(data: { response: response })
  end
end

#query(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil, limit: nil) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/wolf_core/infrastructure/no_sql_db_instance_data_source.rb', line 56

def query(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil, limit: nil)
  Result.try do
    query_params = {
      table_name: table_name,
      key_condition_expression: key_condition_expression,
      expression_attribute_values: expression_attribute_values
    }
    query_params[:index_name] = index_name if index_name
    query_params[:limit] = limit if limit

    items = @client.query(query_params).items
    Result.success(data: { items: items })
  end
end