File: test/js/test.js

Recommend this page to a friend!
  Classes of Nikos M.  >  Dialect PHP ORM Library  >  test/js/test.js  >  Download  
File: test/js/test.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Dialect PHP ORM Library
Store and retrieve objects in database using ORM
Author: By
Last change: v.1.0.0 contd

* php,py,js rename some methods which used get.., set.. magic methods prefix
* js: fix proxy appeared as thenable and broke async/await in some cases
* update test examples
Date: 3 months ago
Size: 4,265 bytes
 

Contents

Class file image Download
let DialectORM = require('../../src/js/DialectORM.js');
let Dialect = require('./Dialect.js');
let MysqlDb = require('./MysqlDb.js')(DialectORM);

DialectORM.dependencies({
    'Dialect' : Dialect // provide actual class, i.e Dialect or path of module
});
DialectORM.DBHandler(new MysqlDb({
    'database' : 'dialectorm',
    'user' : 'dialectorm',
    'password' : 'dialectorm'
}, 'mysql'));

class Post extends DialectORM
{
    static table = 'posts';
    static pk = 'id';
    static fields = ['id', 'content'];
    static relationships = {};

    typeId(x)
    {
        return parseInt(x, 10) || 0;
    }

    typeContent(x)
    {
        return String(x);
    }

    validateContent(x)
    {
        return 0 < x.length;
    }
}
class PostMeta extends DialectORM
{
    static table = 'postmeta';
    static pk = 'id';
    static fields = ['id', 'status', 'type', 'post_id'];
    static relationships = {};

    typeId(x)
    {
        return parseInt(x, 10) || 0;
    }

    typePostId(x)
    {
        return parseInt(x, 10) || 0;
    }

    typeStatus(x)
    {
        return String(x).toLowerCase();
    }

    typeType(x)
    {
        return String(x).toLowerCase();
    }

    validateStatus(x)
    {
        return -1 !== ['approved', 'published', 'suspended'].indexOf(x);
    }

    validateType(x)
    {
        return -1 !== ['article', 'tutorial', 'general'].indexOf(x);
    }
}
class Comment extends DialectORM
{
    static table = 'comments';
    static pk = 'id';
    static fields = ['id', 'content', 'post_id'];
    static relationships = {};

    typeId(x)
    {
        return parseInt(x, 10) || 0;
    }

    typeContent(x)
    {
        return String(x);
    }

    typePostId(x)
    {
        return parseInt(x, 10) || 0;
    }

    validateContent(x)
    {
        return 0 < x.length;
    }
}
class User extends DialectORM
{
    static table = 'users';
    static pk = 'id';
    static fields = ['id', 'name'];
    static relationships = {};

    typeId(x)
    {
        return parseInt(x, 10) || 0;
    }

    typeName(x)
    {
        return String(x);
    }

    validateName(x)
    {
        return 0 < x.length;
    }
}
Post.relationships = {
    'meta' : ['hasOne', PostMeta, 'post_id'],
    'comments' : ['hasMany', Comment, 'post_id'],
    'authors' : ['belongsToMany', User, 'user_id', 'post_id', 'user_post']
};
PostMeta.relationships = {
    'post' : ['belongsTo', Post, 'post_id']
};
Comment.relationships = {
    'post' : ['belongsTo', Post, 'post_id']
};
User.relationships = {
    'posts' : ['belongsToMany', Post, 'post_id', 'user_id', 'user_post']
};

function print(x)
{
    console.log(x);
}
function output(data)
{
    if (Array.isArray(data))
        print(JSON.stringify(data.map(d => d.toObj(true)), null, 4));
    else if (data instanceof DialectORM)
        print(JSON.stringify(data.toObj(true), null, 4));
    else
        print(String(data));
}

async function test()
{
    output('Posts: ' + String(await Post.count()));
    output('Users: ' + String(await User.count()));

    /*let post = new Post({'content':'yet another js post..'});
    post.setComments([new Comment({'content':'yet still another js comment..'})]);
    post.setComments([new Comment({'content':'yet one more js comment..'})], {'merge':true});
    post.setAuthors([new User({'name':'yet another js user'}), await User.fetchByPk(5)]);
    post.setMeta(new PostMeta({'status':'approved','type':'article'}));
    await post.save({'withRelated':true});*/

    /*let post2 = new Post({'content':'js post to delete..'});
    await post2.save();*/

    print('Posts:');
    output(await Post.fetchAll({'withRelated' : ['meta', 'comments', 'authors']}));

    //await post2.del();

    print('Posts:');
    output(await Post.fetchAll({
        'withRelated' : ['meta', 'comments', 'authors'],
        'related' : {
            'authors' : {'conditions':{'clause':{'or':[
                {'name':{'like':'user'}},
                {'name':{'like':'foo'}},
                {'name':{'like':'bar'}}
            ]}}},
            'comments' : {'limit':1} // eager relationship loading with extra conditions, see `Dialect` lib on how to define conditions
        }
    }));
}

test().then(() => process.exit()).catch(e => {print(e); process.exit();});

For more information send a message to info at phpclasses dot org.