UNPKG

7.38 kBJavaScriptView Raw
1const moment = require('moment');
2const mongoose = require('mongoose');
3const domain = require('../');
4
5async function main() {
6 const oldConnection = await mongoose.createConnection(process.env.MONGOLAB_URI_OLD);
7 const connection = await mongoose.createConnection(process.env.MONGOLAB_URI);
8
9 const oldActionRepo = new domain.repository.Action(oldConnection);
10 const oldInvoiceRepo = new domain.repository.Invoice(oldConnection);
11 const oldOrderRepo = new domain.repository.Order(oldConnection);
12 const oldTransactionRepo = new domain.repository.Transaction(oldConnection);
13
14 const actionRepo = new domain.repository.Action(connection);
15 const invoiceRepo = new domain.repository.Invoice(connection);
16 const orderRepo = new domain.repository.Order(connection);
17 const transactionRepo = new domain.repository.Transaction(connection);
18
19 const cursor = await oldOrderRepo.orderModel.find(
20 {
21 'project.id': { $exists: true, $eq: 'sskts-production' },
22 orderDate: {
23 $gte: moment('2020-04-22T00:00:00+09:00').toDate(),
24 // $lt: moment('2020-04-22T00:00:00+09:00').toDate()
25 // $lt: moment('2020-04-22T00:00:00+09:00').toDate()
26 }
27 // orderStatus: { $in: [domain.factory.orderStatus.OrderReturned] }
28 },
29 { createdAt: 0, updatedAt: 0 }
30 )
31 .sort({ orderDate: 1 })
32 .cursor();
33 console.log('orders found');
34
35 let i = 0;
36 await cursor.eachAsync(async (doc) => {
37 i += 1;
38 const order = doc.toObject();
39 const orderNumber = order.orderNumber;
40 console.log('migrating order...', order.orderNumber, order.orderDate);
41
42 // 注文取引検索
43 const placeOrderTransactions = await oldTransactionRepo.search({
44 typeOf: domain.factory.transactionType.PlaceOrder,
45 result: {
46 order: { orderNumbers: [orderNumber] }
47 }
48 });
49 console.log(placeOrderTransactions.length, 'placeOrderTransactions found');
50
51 // 注文返品取引検索
52 const returnOrderTransactions = await oldTransactionRepo.search({
53 typeOf: domain.factory.transactionType.ReturnOrder,
54 object: {
55 order: { orderNumbers: [orderNumber] }
56 }
57 });
58 console.log(returnOrderTransactions.length, 'returnOrderTransactions found');
59
60 // インボイス検索
61 const invoices = await oldInvoiceRepo.search({
62 referencesOrder: { orderNumbers: [orderNumber] }
63 });
64 console.log(invoices.length, 'invoices found');
65
66 // 決済アクション検索
67 const payActions = await oldActionRepo.search({
68 typeOf: domain.factory.actionType.PayAction,
69 purpose: {
70 orderNumber: {
71 $in: [orderNumber]
72 }
73 }
74 });
75 console.log(payActions.length, 'payActions found');
76
77 // 注文アクション検索
78 const orderActions = await oldActionRepo.search({
79 typeOf: domain.factory.actionType.OrderAction,
80 object: {
81 orderNumber: {
82 $in: [orderNumber]
83 }
84 }
85 });
86 console.log(orderActions.length, 'orderActions found');
87
88 // 返品アクション検索
89 const returnActions = await oldActionRepo.search({
90 typeOf: domain.factory.actionType.ReturnAction,
91 object: {
92 orderNumber: {
93 $in: [orderNumber]
94 }
95 }
96 });
97 console.log(returnActions.length, 'returnActions found');
98
99 // 注文移行(ステータス変更されるので要調整)
100 delete order._id;
101 delete order.id;
102 await orderRepo.orderModel.updateOne(
103 { orderNumber: orderNumber },
104 { $setOnInsert: { ...order } },
105 // order,
106 { upsert: true }
107 ).exec();
108
109 // 注文取引移行
110 await Promise.all(placeOrderTransactions.map(async (t) => {
111 delete t._id;
112 delete t.id;
113 await transactionRepo.transactionModel.updateOne(
114 {
115 typeOf: domain.factory.transactionType.PlaceOrder,
116 'result.order.orderNumber': { $exists: true, $eq: orderNumber }
117 },
118 { $setOnInsert: { ...t } },
119 { upsert: true }
120 ).exec();
121 }));
122
123 // 注文返品取引移行
124 await Promise.all(returnOrderTransactions.map(async (t) => {
125 delete t._id;
126 delete t.id;
127 await transactionRepo.transactionModel.updateOne(
128 {
129 typeOf: domain.factory.transactionType.ReturnOrder,
130 'object.order.orderNumber': { $exists: true, $eq: orderNumber }
131 },
132 { $setOnInsert: { ...t } },
133 { upsert: true }
134 ).exec();
135 }));
136
137 // インボイス移行
138 await Promise.all(invoices.map(async (invoice) => {
139 delete invoice._id;
140 delete invoice.id;
141 await invoiceRepo.invoiceModel.updateOne(
142 {
143 'referencesOrder.orderNumber': { $exists: true, $eq: orderNumber }
144 },
145 { $setOnInsert: { ...invoice } },
146 { upsert: true }
147 ).exec();
148 }));
149
150 // 決済アクション移行
151 await Promise.all(payActions.map(async (payAction) => {
152 delete payAction._id;
153 delete payAction.id;
154 await actionRepo.actionModel.updateOne(
155 {
156 typeOf: domain.factory.actionType.PayAction,
157 'purpose.orderNumber': { $exists: true, $eq: orderNumber }
158 },
159 { $setOnInsert: { ...payAction } },
160 { upsert: true }
161 ).exec();
162 }));
163
164 // 注文アクション移行
165 await Promise.all(orderActions.map(async (orderAction) => {
166 delete orderAction._id;
167 delete orderAction.id;
168 await actionRepo.actionModel.updateOne(
169 {
170 typeOf: domain.factory.actionType.OrderAction,
171 'object.orderNumber': { $exists: true, $eq: orderNumber }
172 },
173 { $setOnInsert: { ...orderAction } },
174 { upsert: true }
175 ).exec();
176 }));
177
178 // 返品アクション移行
179 await Promise.all(returnActions.map(async (returnAction) => {
180 delete returnAction._id;
181 delete returnAction.id;
182 await actionRepo.actionModel.updateOne(
183 {
184 typeOf: domain.factory.actionType.ReturnAction,
185 'object.orderNumber': { $exists: true, $eq: orderNumber }
186 },
187 { $setOnInsert: { ...returnAction } },
188 { upsert: true }
189 ).exec();
190 }));
191
192 console.log('added', orderNumber, i);
193 });
194
195 console.log(i, 'orders migrated');
196 // await mongoose.disconnect();
197}
198
199main().then(() => {
200 console.log('success!');
201}).catch((error) => {
202 console.error(error);
203 process.exit(1);
204});