1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | 'use strict';
|
7 |
|
8 | const jdb = require('../index');
|
9 |
|
10 | let User, Post, Passport, City, Street, Building;
|
11 | const nbSchemaRequests = 0;
|
12 |
|
13 | setup(function() {
|
14 | Passport.find({include: 'owner'}, function(err, passports) {
|
15 | console.log('passports.owner', passports);
|
16 | });
|
17 |
|
18 | User.find({include: 'posts'}, function(err, users) {
|
19 | console.log('users.posts', users);
|
20 | });
|
21 |
|
22 | Passport.find({include: {owner: 'posts'}}, function(err, passports) {
|
23 | console.log('passports.owner.posts', passports);
|
24 | });
|
25 |
|
26 | Passport.find({
|
27 | include: {owner: {posts: 'author'}},
|
28 | }, function(err, passports) {
|
29 | console.log('passports.owner.posts.author', passports);
|
30 | });
|
31 |
|
32 | User.find({include: ['posts', 'passports']}, function(err, users) {
|
33 | console.log('users.passports && users.posts', users);
|
34 | });
|
35 | });
|
36 |
|
37 | function setup(done) {
|
38 | const db = new jdb.DataSource({connector: 'memory'});
|
39 | City = db.define('City');
|
40 | Street = db.define('Street');
|
41 | Building = db.define('Building');
|
42 | User = db.define('User', {
|
43 | name: String,
|
44 | age: Number,
|
45 | });
|
46 | Passport = db.define('Passport', {
|
47 | number: String,
|
48 | });
|
49 | Post = db.define('Post', {
|
50 | title: String,
|
51 | });
|
52 |
|
53 | Passport.belongsTo('owner', {model: User});
|
54 | User.hasMany('passports', {foreignKey: 'ownerId'});
|
55 | User.hasMany('posts', {foreignKey: 'userId'});
|
56 | Post.belongsTo('author', {model: User, foreignKey: 'userId'});
|
57 |
|
58 | db.automigrate(function() {
|
59 | let createdUsers = [];
|
60 | let createdPassports = [];
|
61 | let createdPosts = [];
|
62 | createUsers();
|
63 | function createUsers() {
|
64 | clearAndCreate(
|
65 | User,
|
66 | [
|
67 | {name: 'User A', age: 21},
|
68 | {name: 'User B', age: 22},
|
69 | {name: 'User C', age: 23},
|
70 | {name: 'User D', age: 24},
|
71 | {name: 'User E', age: 25},
|
72 | ],
|
73 | function(items) {
|
74 | createdUsers = items;
|
75 | createPassports();
|
76 | },
|
77 | );
|
78 | }
|
79 |
|
80 | function createPassports() {
|
81 | clearAndCreate(
|
82 | Passport,
|
83 | [
|
84 | {number: '1', ownerId: createdUsers[0].id},
|
85 | {number: '2', ownerId: createdUsers[1].id},
|
86 | {number: '3'},
|
87 | ],
|
88 | function(items) {
|
89 | createdPassports = items;
|
90 | createPosts();
|
91 | },
|
92 | );
|
93 | }
|
94 |
|
95 | function createPosts() {
|
96 | clearAndCreate(
|
97 | Post,
|
98 | [
|
99 | {title: 'Post A', userId: createdUsers[0].id},
|
100 | {title: 'Post B', userId: createdUsers[0].id},
|
101 | {title: 'Post C', userId: createdUsers[0].id},
|
102 | {title: 'Post D', userId: createdUsers[1].id},
|
103 | {title: 'Post E'},
|
104 | ],
|
105 | function(items) {
|
106 | createdPosts = items;
|
107 | done();
|
108 | },
|
109 | );
|
110 | }
|
111 | });
|
112 | }
|
113 |
|
114 | function clearAndCreate(model, data, callback) {
|
115 | const createdItems = [];
|
116 | model.destroyAll(function() {
|
117 | nextItem(null, null);
|
118 | });
|
119 |
|
120 | let itemIndex = 0;
|
121 |
|
122 | function nextItem(err, lastItem) {
|
123 | if (lastItem !== null) {
|
124 | createdItems.push(lastItem);
|
125 | }
|
126 | if (itemIndex >= data.length) {
|
127 | callback(createdItems);
|
128 | return;
|
129 | }
|
130 | model.create(data[itemIndex], nextItem);
|
131 | itemIndex++;
|
132 | }
|
133 | }
|