UNPKG

4.74 kBJavaScriptView Raw
1// Copyright IBM Corp. 2013,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 DataSource = require('../index').DataSource;
9const ds = new DataSource('memory');
10
11const Order = ds.createModel('Order', {
12 items: [String],
13 orderDate: Date,
14 qty: Number,
15});
16
17const Customer = ds.createModel('Customer', {
18 name: String,
19});
20
21Order.belongsTo(Customer);
22
23let order1, order2, order3;
24
25Customer.create({name: 'John'}, function(err, customer) {
26 Order.create({customerId: customer.id, orderDate: new Date(), items: ['Book']}, function(err, order) {
27 order1 = order;
28 order.customer(console.log);
29 order.customer(true, console.log);
30
31 Customer.create({name: 'Mary'}, function(err, customer2) {
32 order.customer(customer2);
33 order.customer(console.log);
34 });
35 });
36
37 Order.create({orderDate: new Date(), items: ['Phone']}, function(err, order) {
38 order.customer.create({name: 'Smith'}, function(err, customer2) {
39 console.log(order, customer2);
40 order.save(function(err, order) {
41 order2 = order;
42 });
43 });
44
45 const customer3 = order.customer.build({name: 'Tom'});
46 console.log('Customer 3', customer3);
47 });
48});
49
50Customer.hasMany(Order, {as: 'orders', foreignKey: 'customerId'});
51
52Customer.create({name: 'Ray'}, function(err, customer) {
53 Order.create({customerId: customer.id, qty: 3, orderDate: new Date()}, function(err, order) {
54 order3 = order;
55 customer.orders(console.log);
56 customer.orders.create({orderDate: new Date(), qty: 4}, function(err, order) {
57 console.log(order);
58 Customer.include([customer], 'orders', function(err, results) {
59 console.log('Results: ', results);
60 });
61 customer.orders({where: {qty: 4}}, function(err, results) {
62 console.log('customer.orders', results);
63 });
64 customer.orders.findById(order3.id, console.log);
65 customer.orders.destroy(order3.id, console.log);
66 });
67 });
68});
69
70const Physician = ds.createModel('Physician', {
71 name: String,
72});
73
74const Patient = ds.createModel('Patient', {
75 name: String,
76});
77
78const Appointment = ds.createModel('Appointment', {
79 physicianId: Number,
80 patientId: Number,
81 appointmentDate: Date,
82});
83
84Appointment.belongsTo(Patient);
85Appointment.belongsTo(Physician);
86
87Physician.hasMany(Patient, {through: Appointment});
88Patient.hasMany(Physician, {through: Appointment});
89
90Physician.create({name: 'Dr John'}, function(err, physician1) {
91 Physician.create({name: 'Dr Smith'}, function(err, physician2) {
92 Patient.create({name: 'Mary'}, function(err, patient1) {
93 Patient.create({name: 'Ben'}, function(err, patient2) {
94 Appointment.create(
95 {appointmentDate: new Date(), physicianId: physician1.id, patientId: patient1.id},
96 function(err, appt1) {
97 Appointment.create(
98 {appointmentDate: new Date(), physicianId: physician1.id, patientId: patient2.id},
99 function(err, appt2) {
100 physician1.patients(console.log);
101 physician1.patients({where: {name: 'Mary'}}, console.log);
102 patient1.physicians(console.log);
103
104 // Build an appointment?
105 const patient3 = patient1.physicians.build({name: 'Dr X'});
106 console.log('Physician 3: ', patient3, patient3.constructor.modelName);
107
108 // Create a physician?
109 patient1.physicians.create({name: 'Dr X'}, function(err, patient4) {
110 console.log('Physician 4: ', patient4, patient4.constructor.modelName);
111 });
112 },
113 );
114 },
115 );
116 });
117 });
118 });
119});
120
121const Assembly = ds.createModel('Assembly', {
122 name: String,
123});
124
125const Part = ds.createModel('Part', {
126 partNumber: String,
127});
128
129Assembly.hasAndBelongsToMany(Part);
130Part.hasAndBelongsToMany(Assembly);
131
132Assembly.create({name: 'car'}, function(err, assembly) {
133 Part.create({partNumber: 'engine'}, function(err, part) {
134 assembly.parts.add(part, function(err) {
135 assembly.parts(function(err, parts) {
136 console.log('Parts: ', parts);
137 });
138
139 // Build an part?
140 const part3 = assembly.parts.build({partNumber: 'door'});
141 console.log('Part3: ', part3, part3.constructor.modelName);
142
143 // Create a part?
144 assembly.parts.create({partNumber: 'door'}, function(err, part4) {
145 console.log('Part4: ', part4, part4.constructor.modelName);
146
147 Assembly.find({include: 'parts'}, function(err, assemblies) {
148 console.log('Assemblies: ', assemblies);
149 });
150 });
151 });
152 });
153});
154