class WolfCore::NoSqlDbInstanceDataSource
def self.init(region: "us-east-1")
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
def get_item(table_name:, key:)
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
def get_item_by_index(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil)
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
def initialize(client:)
def initialize(client:) @client = client end
def put_item(table_name:, item:)
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
def query(table_name:, key_condition_expression:, expression_attribute_values:, index_name: nil, limit: nil)
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