Model Requests

Single model requests you can execute on a DynamoStore.

General

Creation

All model requests are created by using the corresponding method on a DynamoStore instance. A new request instance for the related model/table will be returned.

Request Params

Every request instance contains the public params property where all params for the request are written to. You might want to use it for debugging purpose but are also able to write on it (eg. non-covered features).

Consumed Capacity

You might want to receive the consumed capacity which can be achieved by applying the returnConsumedCapacity('INDEXES' | 'TOTAL') method and the usage of execFullResponse() instead of exec().

Execution

All requests provide at least two execution methods:

  • exec() returns a promise which will resolve to the requested items or void if no items were requested

  • execFullResponse() returns a promise which will resolve to the full response DynamoDB returns, but response.Items are still mapped for you.

Get

technical api doc
get.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .get('wernerv')        // returns an instance of GetRequest
  .consistentRead(true)  // sets params.ConsistentRead = true
  .exec()                // returns a Promise<Person|null>
  .then(obj => console.log(obj))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html

Put

technical api doc
put.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

const objectToPut: Person = {
  id: 'vogelsw',
  name: 'Werner Hans Peter Vogels',
  yearOfBirth: 1958,
} // object literal or new Person(...)

new DynamoStore(Person)
  .put(objectToPut)
  .ifNotExists()
  .exec()
  .then(() => console.log('done'))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html

Update

technical api doc
update-simple.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { AnotherModel } from '../models'

const oneHourAgo = new Date(Date.now() - 1000 * 60 * 60)

new DynamoStore(AnotherModel)
  .update('myPartitionKey', 'mySortKey')
  .updateAttribute('propC').set('newValue')
  .updateAttribute('updated').set(new Date())
  .onlyIfAttribute('updated').lt(oneHourAgo)
  .exec()
  .then(() => console.log('done'))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html

Delete

technical api doc
delete.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .delete('vogelsw')
  .onlyIfAttribute('yearOfBirth').lte(1958)
  .exec()
  .then(() => console.log('done'))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html

Query

technical api doc
query.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { AnotherModel } from '../models'

new DynamoStore(AnotherModel)
  .query()
  .wherePartitionKey('2018-01')
  .whereSortKey().beginsWith('a')
  .execSingle()
  .then(r => console.log('first found item:', r))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

Scan

technical api doc
scan.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .scan()
  .whereAttribute('yearOfBirth').equals(1958)
  .execFetchAll()
  .then(res => console.log('ALL items with yearOfBirth == 1958', res))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

BatchGet

This is a special implementation from BatchGetRequest which only allows to read from a single table.

technical api doc
batch-get.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .batchGet([{ id: 'a' }, { id: 'b' }])
  .exec()
  .then(res => console.log('fetched items:', res))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html

BatchWrite

This is a special implementation from BatchWriteRequest which only allows to write to a single table

technical api doc
batch-write.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .batchWrite()
  .delete([{ id: 'a' }, { id: 'b' }])
  .put([{ id: 'vogelsw', name: 'Werner Hans Peter Vogels', yearOfBirth: 1958 }])
  .exec()
  .then(() => console.log('item a, b deleted; werner vogels added'))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html

TransactGet

This is a special implementation from TransactGetRequest which only allows to read from a single table.

technical api doc
transact-get.snippet.ts
import { DynamoStore } from '@shiftcoders/dynamo-easy'
import { Person } from '../models'

new DynamoStore(Person)
  .transactGet([{ id: 'a' }, { id: 'b' }])
  .exec()
  .then(() => console.log('transactionally read a and b'))
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html

Last updated

Was this helpful?