7.9.3 • Published 2 years ago

databaser v7.9.3

Weekly downloads
10
License
MIT
Repository
-
Last release
2 years ago

databaser

Example

'use strict';

const {
	as_json_schema,
	databases,
	datatypes,
	model
} = require( 'databaser' );

const User = model( {
	name: 'user',
	schema: {
		id: datatypes.UUID( {
			nullable: false,
			unique: true,
			primary: true
		} ),
		email: datatypes.email( {
			initial: null,
			index: true // add a basic index for this column
		} ),
		name: {
			first: datatypes.string( {
				initial: null
			} ),
			last: datatypes.string( {
				initial: null
			} )
		},
		meta: datatypes.JSON(),
		timestamps: {
			created: datatypes.ISODate(),
			updated: datatypes.ISODate(),
			deleted: datatypes.ISODate( {
				initial: null
			} )
		},
		unstored: datatypes.string( {
			nullable: true,
			initial: null,
			example: 'hello',
			stored: false
		} ),
		not_in_json_schema: datatypes.string( {
			nullable: true,
			initial: null,
			example: 'not here',
			json_schema: false
		} )
	}
} );

( async () => {
	const user = User.create( {
		email: 'foo@bar.com',
		name: {
			first: 'Foo',
			last: 'Bar'
		}
	} );

	console.dir( user );

	const validation_errors = User.validate( user );
	if ( validation_errors.length ) {
		throw new Error( `Invalid user:
		${ JSON.stringify( validation_errors, null, 4 ) ) }
		` );
	}

	// for the example's sake, we could store the 'meta' field as another type
	// with column_type_overrides/serializers/deserializers, eg:
	const users_db = await databases.postgres.get( User, {
		column_type_overrides: {
			meta: 'TEXT'
		},
		serializers: {
			meta: JSON.stringify.bind( JSON )
		},
		deserializers: {
			meta: JSON.parse.bind( JSON )
		}
	} );
	await users_db.put( user );

	const fetched_user = await users_db.get( user.id );
	console.log( `Fetched same user: ${ fetched_user && fetched_user.id === user.id }` );

	const found_user = await users_db.find( {
		email: 'foo@bar.com'
	} );
	console.log( `Found same user: ${ found_user && found_user.id === user.id }` );

	const newest_user = await users_db.find( {}, {
		order: {
			column: [ 'timestamps', 'created' ],
			sort: 'desc'
		}
	} );
	console.log( `Found newest user: ${ newest_user.id }` );

	const first_email_user = await users_db.find( {}, {
		order: {
			column: 'email',
			sort: 'asc'
		}
	} );
	console.log( `Found user with first lexical email: ${ first_email_user.id }` );

	const users_named_john = await users_db.all( {
		name: {
			first: 'John'
		}
	}, {
		limit: 100
	} );
	console.log( `Found ${ users_named_john.length } users named John.` );

	await users_db.del( user.id );
	console.log( 'Deleted user from db.' );

	// we can convert to a json schema, as well
	console.dir( as_json_schema( User ) );
} )();
7.9.3

2 years ago

7.9.2

2 years ago

7.9.1

3 years ago

7.8.0

3 years ago

7.8.2

3 years ago

7.8.1

3 years ago

7.9.0

3 years ago

7.7.0

3 years ago

7.6.0

3 years ago

7.5.0

3 years ago

7.4.2

3 years ago

7.4.1

3 years ago

7.4.0

3 years ago

7.3.0

3 years ago

7.2.0

3 years ago

7.1.0

3 years ago

7.0.2

3 years ago

7.0.1

3 years ago

6.8.0

3 years ago

7.0.0

3 years ago

6.7.1

3 years ago

6.7.0

3 years ago

6.6.0

3 years ago

6.5.1

3 years ago

6.5.0

3 years ago

6.4.0

4 years ago

6.3.1

4 years ago

6.3.0

4 years ago

6.2.2

4 years ago

6.2.1

4 years ago

6.2.0

4 years ago

6.1.0

4 years ago

6.0.0

4 years ago

5.0.0

4 years ago

4.6.0

4 years ago

4.5.3

4 years ago

4.5.2

4 years ago

4.5.1

4 years ago

4.5.0

4 years ago

4.4.2

4 years ago

4.4.1

4 years ago

4.4.0

4 years ago

4.3.0

4 years ago

4.2.0

4 years ago

4.1.0

4 years ago

4.0.2

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

3.2.1

4 years ago

3.2.0

4 years ago

3.1.0

4 years ago

3.0.2

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.7.1

4 years ago

2.7.0

4 years ago

2.6.0

5 years ago

2.5.0

5 years ago

2.4.0

5 years ago

2.3.2

5 years ago

2.3.1

5 years ago

2.3.0

5 years ago

2.2.1

5 years ago

2.2.0

5 years ago

2.1.0

5 years ago

2.0.0

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago