@jokio/datastore

Helper library for Google Cloud Datastore

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
@jokio/datastore
Minified + gzip package size for @jokio/datastore in KB

Readme

Datastore Toolkit

Build Status

npm version

How to use

Simple:

import { DbSet, configureTransaction, Entity, Datastore } from '@jokio/datastore';

const datastore = new Datastore({});

const db = {
    transaction: configureTransaction(datastore),
    users: new DbSet<UserEntity>('users', datastore),
    accounts: new DbSet<AccountEntity>('accounts', datastore),
};


interface UserEntity extends Entity {
    firstName: string
    lastName: string
}

interface AccountEntity extends Entity {
    currency: string
    amount: number
}

OOP Style:

import { Entity, DbSet, DbContext, Datastore } from '@jokio/datastore';


export default class extends DbContext {
    Users: DbSet<UserEntity>
    Accounts: DbSet<AccountEntity>

    constructor(datastore: Datastore) {
        super(datastore);

        this.Users = new DbSet<UserEntity>('Users', datastore)
        this.Accounts = new DbSet<AccountEntity>('Accounts', datastore)
    }
}


interface UserEntity extends Entity {
    firstName: string
    lastName: string
}

interface AccountEntity extends Entity {
    currency: string
    amount: number
}

...

const db = new DbContext(datastore);

DDD Style:

import { Entity, Aggregate, AggregateResolver, Datastore } from "@jokio/datastore";


// 1. Declare Types
interface UserState extends Entity {
    firstName: string
    lastName: string
    password: string
}

interface RegisterProps {
    firstName: string
    lastName: string
    password: string
}


// 2. Declare Aggregate
class UserAggregate extends Aggregate<UserState>  {
    constructor(datastore) {
        super('users', datastore);
    }

    // commands
    register(props: RegisterProps) {

        this.state = {
            ...this.state,
            ...props,
            id: Date.now(),
        };

        return this.save();
    }

    resetPassword() {
        this.state.password = null;

        return this.save();
    }
}


// 3. Use Aggregate
async function run() {
    const datastore = new Datastore({});
    const root = new AggregateResolver(datastore);
    const userAggr = root.get(UserAggregate);

    const isSuccess = await userAggr.register({
        firstName: 'Ezeki',
        lastName: 'Zibzibadze',
        password: '123'
    });

    console.log(isSuccess);
}


run();

Gangnam Style:

console.log('commong soon... :D');

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.