UNPKG

3.32 kBJavaScriptView Raw
1// Copyright IBM Corp. 2014,2019. All Rights Reserved.
2// Node module: loopback-datasource-juggler
3// This file is licensed under the MIT License.
4// License text available at https://opensource.org/licenses/MIT
5
6'use strict';
7
8const jdb = require('../index');
9
10let User, Post, Passport, City, Street, Building;
11const nbSchemaRequests = 0;
12
13setup(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
37function 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
114function 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}