Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/blazejkustra/dynamode

Dynamode is a modeling tool for Amazon's DynamoDB
https://github.com/blazejkustra/dynamode

amazon aws data database datastore db document dynamo dynamodb model nosql schema

Last synced: 12 days ago
JSON representation

Dynamode is a modeling tool for Amazon's DynamoDB

Awesome Lists containing this project

README

        


Dynamode



npm


License


npm Downloads


stars




---

Dynamode is a modeling tool for Amazon's DynamoDB. Its goal is to ease the use of DynamoDB without its quirks and emphasize DynamoDB advantages over other databases. Dynamode provides a straightforward, object-oriented class-based solution to model your data. It includes strongly typed classes and methods, query and scan builders, and much more.

Dynamode is highly influenced by other ORMs/ODMs, such as [TypeORM](https://github.com/typeorm/typeorm), [Dynamoose](https://github.com/dynamoose/dynamoose) and [Mongoose](https://github.com/Automattic/mongoose).

## Documentation

Check out our dedicated documentation page [here](https://blazejkustra.github.io/dynamode/docs/getting_started/introduction) for info about the library, guide and more.

## Installation

Check out the [installation](https://blazejkustra.github.io/dynamode/docs/getting_started/installation) section of our docs for the detailed installation instructions.

## License

Dynamode is licensed under [The MIT License](LICENSE).

## Examples

Example table definition:
```ts
type ExampleTableProps = {
propPk: string;
propSk: number;
index: string;
};

const TABLE_NAME = 'example-table';

class ExampleTable extends Entity {
@attribute.partitionKey.string()
propPk: string;

@attribute.sortKey.number()
propSk: number;

@attribute.lsi.sortKey.string({ indexName: 'LSI_NAME' })
index: string;

constructor(props: ExampleTableProps) {
super();

this.propPk = props.propPk;
this.propSk = props.propSk;
this.index = props.index;
}
}

export const ExampleTableManager = new TableManager(ExampleTable, {
tableName: TABLE_NAME,
partitionKey: 'propPk',
sortKey: 'propSk',
indexes: {
LSI_NAME: {
sortKey: 'index',
},
},
});

await ExampleTableManager.create();
```

Example entity definition:
```ts
type ExampleEntityProps = ExampleTableProps & {
attr: { [k: string]: number };
};

export class ExampleEntity extends ExampleTable {
@attribute.object()
attr: { [k: string]: number };

constructor(props: ExampleEntityProps) {
super(props);

this.attr = props.attr;
}
}

export const ExampleEntityManager = ExampleTableManager.entityManager(ExampleEntity);

await ExampleEntityManager.put(new ExampleEntityManager({ ... }));
```

Find more examples under the [`examples/`](https://github.com/blazejkustra/dynamode/blob/main/examples/) directory.