'use strict';const{
as_json_schema,
databases,
datatypes,
model
}=require('databaser');constUser=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()=>{constuser=User.create({email: 'foo@bar.com',name: {first: 'Foo',last: 'Bar'}});console.dir(user);constvalidation_errors=User.validate(user);if(validation_errors.length){thrownewError(`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:constusers_db=awaitdatabases.postgres.get(User,{column_type_overrides: {meta: 'TEXT'},serializers: {meta: JSON.stringify.bind(JSON)},deserializers: {meta: JSON.parse.bind(JSON)}});awaitusers_db.put(user);constfetched_user=awaitusers_db.get(user.id);console.log(`Fetched same user: ${fetched_user&&fetched_user.id===user.id}`);constfound_user=awaitusers_db.find({email: 'foo@bar.com'});console.log(`Found same user: ${found_user&&found_user.id===user.id}`);constnewest_user=awaitusers_db.find({},{order: {column: ['timestamps','created'],sort: 'desc'}});console.log(`Found newest user: ${newest_user.id}`);constfirst_email_user=awaitusers_db.find({},{order: {column: 'email',sort: 'asc'}});console.log(`Found user with first lexical email: ${first_email_user.id}`);constusers_named_john=awaitusers_db.all({name: {first: 'John'}},{limit: 100});console.log(`Found ${users_named_john.length} users named John.`);awaitusers_db.del(user.id);console.log('Deleted user from db.');// we can convert to a json schema, as wellconsole.dir(as_json_schema(User));})();