XYOracleNetwork/sdk-diviner-nodejs

View on GitHub
src/payment/repository/dynammodb/spend-table.ts

Summary

Maintainability
B
6 hrs
Test Coverage
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Table } from './table'
import { DynamoDB } from 'aws-sdk'

export class SpendTable extends Table {
  constructor(tableName = 'xyo-diviner-spent', region = 'us-east-1') {
    super(tableName, region)

    this.createTableInput = {
      AttributeDefinitions: [
        {
          AttributeName: 'SpendKey',
          AttributeType: 'S'
        }
      ],
      KeySchema: [
        {
          AttributeName: 'SpendKey',
          KeyType: 'HASH'
        }
      ],
      ProvisionedThroughput: {
        ReadCapacityUnits: 2,
        WriteCapacityUnits: 2
      },
      TableName: tableName
    }
  }

  public async putItem(key: string): Promise<void> {
    return new Promise<void>((resolve: any, reject: any) => {
      try {
        const params: DynamoDB.Types.PutItemInput = {
          Item: {
            SpendKey: {
              S: key
            }
          },
          TableName: this.tableName
        }
        this.dynamodb.putItem(
          params,
          (err: any, data: DynamoDB.Types.PutItemOutput) => {
            if (err) {
              reject(err)
            }
            resolve()
          }
        )
      } catch (ex) {
        this.logError(ex)
        reject(ex)
      }
    })
  }

  public async getItem(key: string): Promise<any> {
    return new Promise<boolean>((resolve: any, reject: any) => {
      try {
        const params: DynamoDB.Types.GetItemInput = {
          Key: {
            SpendKey: {
              S: key
            }
          },
          ReturnConsumedCapacity: 'TOTAL',
          TableName: this.tableName
        }
        this.dynamodb.getItem(
          params,
          (err: any, data: DynamoDB.Types.GetItemOutput) => {
            if (err) {
              reject(err)
            }

            if (data && data.Item) {
              const result = data.Item.SpendKey.S
              resolve(result)
              return
            }
            resolve()
          }
        )
      } catch (ex) {
        this.logError(ex)
        reject(ex)
      }
    })
  }
}