@mu-ts/dynamodb
v2.0.1
Published
Nice sugarry layer over top of DynamoDB to make
Downloads
200
Readme
Objective
Nice sugarry layer over top of DynamoDB to make utilizing it quitea bit cleaner. Uses @aws-sdk library which is more moduarlized so your deploy sizes should be smaller.
This class also makes use of @mu-ts/serialization for some convenience behaviors while working with objects, like field encoding/encryption and uuid generation.
Class Decoration
Pretty straight forward, for any class you want associated to a table, decorate with @table. The first argument is the table name, the remaining arguments are the keys that make up the hash key for the table.
This example shows a composite key, as do the examples throughout, but to do a signle key you would just use a single attribute.
import { table } from '@mu-ts/dynamodb';
@serializable
@table(process.env.USER_TABLE_NAME)
class User {
@primaryKey
name: string;
@sortKey
age: number;
@encode('hex')
group?: string;
}
Command Functions
A handful of utilities for the common cases. Want more, create a merge request with your implementation.
Get an item.
import { getItem } from '@mu-ts/dynamodb';
const timmy: User = new User();
user.name = 'timmy'
const user: User = await getItem(timmy);
// or if no object.
const user: User = await getItem({name: 'timmy'}, 'the-table');
Put an item.
import { putItem } from '@mu-ts/dynamodb';
const timmy: User = new User();
user.name = 'timmy'
user.age = 15
user.group = 'super special'
const user: User = await putItem(user);
Delete an item.
import { deleteItem } from '@mu-ts/dynamodb';
const timmy: User = new User();
user.name = 'timmy'
user.age = 15
await deleteItem(timmy);
// or if no object
await deleteItem({name: 'timmy', age: 15}, 'table-to-delete-from');
Update an item
Uses the PutItem command which only updates specific attributes, for a record matching the corresponding hash key. If no hash key matches then a new item is created.
The value returned is a merging together of the values passed in as well as the old values returned back from DynamoDB.
import { updateItem } from '@mu-ts/dynamodb'
let user: User = new User()
user.name = 'john'
user.age = 46
user.group = 'blue'
user = await updateItem(user)