Skip to content

Instantly share code, notes, and snippets.

@melbourne2991
Created March 22, 2019 06:08
Show Gist options
  • Save melbourne2991/7bf17fd13a1787e77375a309b4366b19 to your computer and use it in GitHub Desktop.
Save melbourne2991/7bf17fd13a1787e77375a309b4366b19 to your computer and use it in GitHub Desktop.
DDB key value store
import { DocumentClient } from "aws-sdk/clients/dynamodb";
export interface AsyncKeyValueStore<K> {
set<V>(key: K, value: V): Promise<void>;
get<V>(key: K): Promise<V>;
remove(key: K): Promise<void>;
}
export class DynamoDBKeyValueStore<K> implements AsyncKeyValueStore<K> {
docClient: DocumentClient;
tableName: string;
constructor(docClient: DocumentClient, tableName: string) {
this.docClient = docClient;
this.tableName = tableName;
}
remove = (key: K): Promise<void> => {
return new Promise((resolve, reject) => {
this.docClient.delete(
{
TableName: this.tableName,
Key: {
ItemKey: key
}
},
(err, _data) => {
if (err) return reject(err);
resolve();
}
);
});
};
set = <V>(key: K, value: V): Promise<void> => {
return new Promise((resolve, reject) => {
this.docClient.put(
{
TableName: this.tableName,
Item: {
ItemKey: key,
ItemValue: JSON.stringify(value)
}
},
(err, _data) => {
if (err) return reject(err);
resolve();
}
);
});
};
get = <V>(key: K): Promise<V> => {
return new Promise((resolve, reject) => {
this.docClient.get(
{
TableName: this.tableName,
Key: {
ItemKey: key
}
},
(err, data) => {
if (err || !data.Item) return reject(err);
resolve(JSON.parse(data.Item["ItemKey"]));
}
);
});
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment