@chevre/domain 21.29.0-alpha.9 → 21.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/example/src/chevre/migrateCancelReservationObject.ts +71 -0
  2. package/example/src/chevre/{migrateOrderAcceptedOfferSerialNumber.ts → migrateOrderAcceptedOfferReservedTicketIdentifier.ts} +27 -16
  3. package/example/src/chevre/migratePayTransactionReservedTicketIdentifier.ts +95 -0
  4. package/example/src/chevre/searchAssetTransactions.ts +38 -0
  5. package/example/src/chevre/searchOrders.ts +6 -1
  6. package/lib/chevre/repo/acceptedOffer.d.ts +7 -2
  7. package/lib/chevre/repo/acceptedOffer.js +8 -4
  8. package/lib/chevre/repo/account.js +1 -1
  9. package/lib/chevre/repo/aggregateOffer.js +1 -1
  10. package/lib/chevre/repo/assetTransaction.d.ts +24 -3
  11. package/lib/chevre/repo/assetTransaction.js +96 -72
  12. package/lib/chevre/repo/creativeWork.js +1 -1
  13. package/lib/chevre/repo/event.js +1 -1
  14. package/lib/chevre/repo/mongoose/schemas/assetTransaction.d.ts +1 -1
  15. package/lib/chevre/repo/mongoose/schemas/assetTransaction.js +31 -23
  16. package/lib/chevre/repo/mongoose/schemas/order.js +12 -3
  17. package/lib/chevre/repo/order.js +14 -5
  18. package/lib/chevre/repo/paymentServiceProvider.js +1 -1
  19. package/lib/chevre/repo/product.js +1 -1
  20. package/lib/chevre/repo/productModel.d.ts +22 -3
  21. package/lib/chevre/repo/productModel.js +40 -3
  22. package/lib/chevre/repo/seller.js +1 -1
  23. package/lib/chevre/repo/serviceOutput.js +1 -1
  24. package/lib/chevre/repo/transaction.js +1 -1
  25. package/lib/chevre/service/assetTransaction/cancelReservation/factory.js +8 -1
  26. package/lib/chevre/service/assetTransaction/pay/potentialActions/createPayObjectServiceOutput.d.ts +4 -0
  27. package/lib/chevre/service/assetTransaction/pay/potentialActions/createPayObjectServiceOutput.js +36 -28
  28. package/lib/chevre/service/payment/any/factory.d.ts +1 -0
  29. package/lib/chevre/service/payment/any/factory.js +2 -1
  30. package/lib/chevre/service/payment/any.js +2 -1
  31. package/lib/chevre/service/report/telemetry.js +1 -1
  32. package/lib/chevre/service/task/onResourceUpdated/onCategoryCodeUpdated.d.ts +15 -0
  33. package/lib/chevre/service/task/onResourceUpdated/onCategoryCodeUpdated.js +26 -0
  34. package/lib/chevre/service/task/onResourceUpdated/onResourceDeleted.d.ts +2 -0
  35. package/lib/chevre/service/task/onResourceUpdated/onResourceDeleted.js +9 -0
  36. package/lib/chevre/service/task/onResourceUpdated/syncCategoryCode.d.ts +15 -0
  37. package/lib/chevre/service/task/onResourceUpdated/syncCategoryCode.js +54 -0
  38. package/lib/chevre/service/task/onResourceUpdated.js +11 -0
  39. package/lib/chevre/service/transaction/deleteTransaction.js +25 -3
  40. package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.d.ts +1 -5
  41. package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.js +60 -57
  42. package/lib/chevre/service/transaction/placeOrderInProgress/validation.js +1 -1
  43. package/lib/chevre/service/validation/validateOrder.js +13 -1
  44. package/lib/chevre/settings.d.ts +0 -4
  45. package/lib/chevre/settings.js +1 -8
  46. package/package.json +2 -2
  47. package/example/src/chevre/migrateOrderSeller.ts +0 -65
  48. package/example/src/chevre/migrateScreeningEventSeriesOffers.ts +0 -87
  49. package/example/src/chevre/playAroundProductModel.ts +0 -64
@@ -0,0 +1,71 @@
1
+ // tslint:disable:no-console
2
+ import * as mongoose from 'mongoose';
3
+
4
+ import { chevre } from '../../../lib/index';
5
+
6
+ // tslint:disable-next-line:max-func-body-length
7
+ async function main() {
8
+ await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
9
+
10
+ const assetTransactionRepo = await chevre.repository.AssetTransaction.createInstance(mongoose.connection);
11
+
12
+ const cursor = assetTransactionRepo.getCursor(
13
+ {
14
+ typeOf: { $eq: chevre.factory.assetTransactionType.CancelReservation }
15
+ // 'project.id': { $ne: EXCLUDED_PROJECT_ID }
16
+ },
17
+ {}
18
+ );
19
+ console.log('assetTransactions found');
20
+
21
+ let i = 0;
22
+ let updateCount = 0;
23
+ await cursor.eachAsync(async (doc) => {
24
+ i += 1;
25
+ const assetTransaction: chevre.factory.assetTransaction.cancelReservation.ITransaction = doc.toObject();
26
+
27
+ const alreadyMigrated = assetTransaction.object.typeOf === chevre.factory.reservationType.ReservationPackage
28
+ && typeof assetTransaction.object.reservationNumber === 'string'
29
+ && assetTransaction.object.reservationNumber.length > 0;
30
+
31
+ if (alreadyMigrated) {
32
+ console.log(
33
+ 'already migrated.',
34
+ assetTransaction.project.id, assetTransaction.typeOf, assetTransaction.transactionNumber, assetTransaction.startDate, i);
35
+ } else {
36
+ let reservationNumber: string | undefined;
37
+ if (typeof assetTransaction.object.transaction?.transactionNumber === 'string') {
38
+ reservationNumber = assetTransaction.object.transaction.transactionNumber;
39
+ } else if (typeof assetTransaction.object.reservations?.[0].reservationNumber === 'string') {
40
+ reservationNumber = assetTransaction.object.reservations[0].reservationNumber;
41
+ }
42
+ if (typeof reservationNumber !== 'string') {
43
+ console.error(
44
+ 'reservationNumber not found.',
45
+ assetTransaction.project.id,
46
+ assetTransaction.typeOf, assetTransaction.transactionNumber, assetTransaction.startDate, i);
47
+ throw new Error('reservationNumber not found');
48
+ }
49
+ console.log(
50
+ 'updating assetTransaction...',
51
+ assetTransaction.project.id,
52
+ assetTransaction.typeOf, assetTransaction.transactionNumber, assetTransaction.startDate, reservationNumber, i);
53
+ await assetTransactionRepo.migrateObjectReservationNumber({
54
+ id: assetTransaction.id,
55
+ object: { reservationNumber }
56
+ });
57
+ updateCount += 1;
58
+ console.log(
59
+ 'updated.',
60
+ assetTransaction.project.id,
61
+ assetTransaction.typeOf, assetTransaction.transactionNumber, assetTransaction.startDate, i);
62
+ }
63
+ });
64
+
65
+ console.log(i, 'assetTransactions checked');
66
+ console.log(updateCount, 'assetTransactions updated');
67
+ }
68
+
69
+ main()
70
+ .then()
71
+ .catch(console.error);
@@ -6,7 +6,15 @@ import { chevre } from '../../../lib/index';
6
6
 
7
7
  // const project = { id: String(process.env.PROJECT_ID) };
8
8
 
9
- // tslint:disable-next-line:max-func-body-length
9
+ function createReservedTicketIdentifier(offer: chevre.factory.order.IAcceptedOffer<chevre.factory.order.IReservation>) {
10
+ let reservedTicketIdentifierShouldBe = `${offer.itemOffered.reservationFor.id}:${offer.itemOffered.id}`;
11
+ if (typeof offer.itemOffered.reservedTicket.ticketedSeat?.seatNumber === 'string') {
12
+ reservedTicketIdentifierShouldBe = `${offer.itemOffered.reservationFor.id}:${offer.itemOffered.reservedTicket.ticketedSeat.seatSection}:${offer.itemOffered.reservedTicket.ticketedSeat.seatNumber}`;
13
+ }
14
+
15
+ return reservedTicketIdentifierShouldBe;
16
+ }
17
+
10
18
  async function main() {
11
19
  await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
12
20
 
@@ -15,19 +23,14 @@ async function main() {
15
23
 
16
24
  const cursor = orderRepo.getCursor(
17
25
  {
18
- // 'acceptedOffers.serialNumber': { $exists: false },
19
- 'acceptedOffers.itemOffered.reservationNumber': { $exists: true },
26
+ 'acceptedOffers.itemOffered.typeOf': { $exists: true, $eq: chevre.factory.reservationType.EventReservation },
20
27
  // 'project.id': { $eq: project.id },
21
- // orderNumber: { $eq: 'KOB1-3749861-4732433' },
28
+ // orderNumber: { $eq: 'ASK8-6367700-4398526' },
22
29
  orderDate: {
23
30
  $gte: moment()
24
31
  // tslint:disable-next-line:no-magic-numbers
25
- .add(-12, 'months')
32
+ .add(-13, 'months')
26
33
  .toDate()
27
- // $lte: moment()
28
- // // tslint:disable-next-line:no-magic-numbers
29
- // .add(-6, 'months')
30
- // .toDate()
31
34
  }
32
35
  },
33
36
  {
@@ -45,27 +48,35 @@ async function main() {
45
48
  i += 1;
46
49
  const order: Pick<
47
50
  chevre.factory.order.IOrder,
48
- 'orderDate' | 'orderNumber' | 'project' | 'paymentMethods'
51
+ 'orderDate' | 'orderNumber' | 'project'
49
52
  > & {
50
53
  acceptedOffers: chevre.factory.order.IAcceptedOffer<chevre.factory.order.IReservation>[];
51
54
  } = doc.toObject();
52
55
 
53
56
  const alreadyMigrated = order.acceptedOffers.every((offer) => {
54
- return typeof offer.serialNumber === 'string'
55
- && offer.serialNumber.length > 0
56
- && offer.itemOffered.reservationNumber === offer.serialNumber;
57
+ const reservedTicketIdentifierShouldBe = createReservedTicketIdentifier(offer);
58
+
59
+ return typeof offer.itemOffered.reservedTicket.identifier === 'string'
60
+ && offer.itemOffered.reservedTicket.identifier.length > 0
61
+ && offer.itemOffered.reservedTicket.identifier === reservedTicketIdentifierShouldBe;
57
62
  });
58
63
 
59
64
  if (alreadyMigrated) {
60
65
  console.log('already exist.', order.project.id, order.orderNumber, order.orderDate, i);
61
66
  } else {
62
67
  for (const offer of order.acceptedOffers) {
63
- console.log('updating...', order.project.id, order.orderNumber, order.orderDate, offer.itemOffered.reservationNumber, i);
64
- await acceptedOfferRepo.fixSerialNumber({
68
+ const reservedTicketIdentifierShouldBe = createReservedTicketIdentifier(offer);
69
+ console.log(
70
+ 'updating...',
71
+ order.project.id, order.orderNumber, order.orderDate, offer.itemOffered.id, reservedTicketIdentifierShouldBe, i);
72
+ await acceptedOfferRepo.fixReservedTicketIdentifier({
65
73
  project: { id: order.project.id },
66
74
  orderNumber: order.orderNumber,
67
75
  acceptedOffers: {
68
- serialNumber: offer.itemOffered.reservationNumber
76
+ itemOffered: {
77
+ id: offer.itemOffered.id,
78
+ reservedTicket: { identifier: reservedTicketIdentifierShouldBe }
79
+ }
69
80
  }
70
81
  });
71
82
  }
@@ -0,0 +1,95 @@
1
+ // tslint:disable:no-console
2
+ import * as moment from 'moment';
3
+ import * as mongoose from 'mongoose';
4
+
5
+ import { chevre } from '../../../lib/index';
6
+
7
+ // const project = { id: String(process.env.PROJECT_ID) };
8
+
9
+ function createReservedTicketIdentifier(movieTicket: chevre.factory.action.trade.pay.IMovieTicket) {
10
+ return `${movieTicket.serviceOutput.reservationFor.id}:${movieTicket.serviceOutput.reservedTicket.ticketedSeat.seatSection}:${movieTicket.serviceOutput.reservedTicket.ticketedSeat.seatNumber}`;
11
+ }
12
+
13
+ async function main() {
14
+ await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
15
+
16
+ const assetTransactionRepo = await chevre.repository.AssetTransaction.createInstance(mongoose.connection);
17
+
18
+ const cursor = assetTransactionRepo.getCursor(
19
+ {
20
+ typeOf: { $eq: chevre.factory.assetTransactionType.Pay },
21
+ startDate: {
22
+ $gte: moment()
23
+ // tslint:disable-next-line:no-magic-numbers
24
+ .add(-3, 'months')
25
+ .toDate()
26
+ }
27
+ // 'project.id': { $eq: project.id },
28
+ // transactionNumber: { $exists: true, $eq: '642463069394964' }
29
+ },
30
+ {
31
+ startDate: 1,
32
+ transactionNumber: 1,
33
+ project: 1,
34
+ object: 1
35
+ }
36
+ );
37
+ console.log('transactions found');
38
+
39
+ let i = 0;
40
+ let updateCount = 0;
41
+ await cursor.eachAsync(async (doc) => {
42
+ i += 1;
43
+ const payTransaction: Pick<
44
+ chevre.factory.assetTransaction.pay.ITransaction,
45
+ 'startDate' | 'transactionNumber' | 'project' | 'object'
46
+ > = doc.toObject();
47
+
48
+ const movieTicketsInTransaction = payTransaction.object.paymentMethod.movieTickets;
49
+ const alreadyMigrated = (!Array.isArray(movieTicketsInTransaction)) || movieTicketsInTransaction.every((movieTicket) => {
50
+ const reservedTicketIdentifierShouldBe = createReservedTicketIdentifier(movieTicket);
51
+
52
+ return typeof movieTicket.serviceOutput.reservedTicket.identifier === 'string'
53
+ && movieTicket.serviceOutput.reservedTicket.identifier.length > 0
54
+ && movieTicket.serviceOutput.reservedTicket.identifier === reservedTicketIdentifierShouldBe;
55
+ });
56
+
57
+ if (alreadyMigrated) {
58
+ console.log('already exist.', payTransaction.project.id, payTransaction.transactionNumber, payTransaction.startDate, i);
59
+ } else {
60
+ const newMovieTickets: chevre.factory.action.trade.pay.IMovieTicket[] = movieTicketsInTransaction.map((movieTicket) => {
61
+ return {
62
+ ...movieTicket,
63
+ serviceOutput: {
64
+ ...movieTicket.serviceOutput,
65
+ reservedTicket: {
66
+ ...movieTicket.serviceOutput.reservedTicket,
67
+ identifier: createReservedTicketIdentifier(movieTicket)
68
+ }
69
+ }
70
+ };
71
+ });
72
+ console.log(
73
+ 'updating...',
74
+ payTransaction.project.id, payTransaction.transactionNumber, payTransaction.startDate,
75
+ newMovieTickets, i);
76
+ // console.dir(newMovieTickets, { depth: null });
77
+ await assetTransactionRepo.fixReservedTicketIdentifier({
78
+ project: { id: payTransaction.project.id },
79
+ transactionNumber: payTransaction.transactionNumber,
80
+ object: {
81
+ paymentMethod: { movieTickets: newMovieTickets }
82
+ }
83
+ });
84
+ updateCount += 1;
85
+ console.log('updated.', payTransaction.project.id, payTransaction.transactionNumber, payTransaction.startDate, i);
86
+ }
87
+ });
88
+
89
+ console.log(i, 'transactions checked');
90
+ console.log(updateCount, 'transactions updated');
91
+ }
92
+
93
+ main()
94
+ .then()
95
+ .catch(console.error);
@@ -0,0 +1,38 @@
1
+ // tslint:disable:no-console
2
+ import * as mongoose from 'mongoose';
3
+
4
+ import { chevre } from '../../../lib/index';
5
+
6
+ const project = { id: String(process.env.PROJECT_ID) };
7
+
8
+ mongoose.Model.on('index', (...args) => {
9
+ console.error('******** index event emitted. ********\n', args);
10
+ });
11
+
12
+ async function main() {
13
+ await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
14
+
15
+ const indexes = await mongoose.connection.db.collection('assetTransactions')
16
+ .indexes();
17
+ // console.log(indexes);
18
+ console.log(indexes.length, 'indexes found');
19
+
20
+ const assetTransactionRepo = await chevre.repository.AssetTransaction.createInstance(mongoose.connection);
21
+
22
+ const assetTransactions = await assetTransactionRepo.search<chevre.factory.assetTransactionType.CancelReservation>(
23
+ {
24
+ limit: 10,
25
+ project: { id: { $eq: project.id } },
26
+ object: { reservationNumber: { $in: ['792955671389309', '439371836213743'] } },
27
+ typeOf: chevre.factory.assetTransactionType.CancelReservation
28
+ },
29
+ ['transactionNumber'],
30
+ []
31
+ );
32
+ console.log('assetTransactions found', assetTransactions);
33
+ console.log(assetTransactions.length, 'assetTransactions found');
34
+ }
35
+
36
+ main()
37
+ .then()
38
+ .catch(console.error);
@@ -24,6 +24,11 @@ async function main() {
24
24
  limit: 10,
25
25
  project: { id: { $eq: project.id } },
26
26
  acceptedOffers: {
27
+ // itemOffered: {
28
+ // reservedTicket: {
29
+ // identifier: { $eq: 'bls2qevbb:Default:B-9' }
30
+ // }
31
+ // }
27
32
  // $size: 1
28
33
  // itemOffered: {
29
34
  // issuedThrough: { typeOf: { $eq: chevre.factory.product.ProductType.MembershipService } }
@@ -47,7 +52,7 @@ async function main() {
47
52
  customer: 1
48
53
  }
49
54
  );
50
- // console.log('orders found', orders);
55
+ console.log('orders found', orders);
51
56
  console.log(orders.length, 'orders found');
52
57
  }
53
58
 
@@ -106,13 +106,18 @@ export declare class MongoRepository {
106
106
  /**
107
107
  * 互換性維持対応専用
108
108
  */
109
- fixSerialNumber(params: {
109
+ fixReservedTicketIdentifier(params: {
110
110
  project: {
111
111
  id: string;
112
112
  };
113
113
  orderNumber: string;
114
114
  acceptedOffers: {
115
- serialNumber: string;
115
+ itemOffered: {
116
+ id: string;
117
+ reservedTicket: {
118
+ identifier: string;
119
+ };
120
+ };
116
121
  };
117
122
  }): Promise<void>;
118
123
  }
@@ -230,19 +230,23 @@ class MongoRepository {
230
230
  /**
231
231
  * 互換性維持対応専用
232
232
  */
233
- fixSerialNumber(params) {
233
+ fixReservedTicketIdentifier(params) {
234
234
  return __awaiter(this, void 0, void 0, function* () {
235
235
  const doc = yield this.orderModel.findOneAndUpdate({
236
236
  orderNumber: { $eq: params.orderNumber },
237
237
  'project.id': { $eq: params.project.id },
238
238
  typeOf: { $eq: factory.order.OrderType.Order },
239
- 'acceptedOffers.itemOffered.reservationNumber': { $exists: true, $eq: params.acceptedOffers.serialNumber }
239
+ 'acceptedOffers.itemOffered.id': { $exists: true, $eq: params.acceptedOffers.itemOffered.id }
240
240
  }, {
241
241
  $set: {
242
- 'acceptedOffers.$[offer].serialNumber': params.acceptedOffers.serialNumber
242
+ 'acceptedOffers.$[offer].itemOffered.reservedTicket.identifier': params.acceptedOffers.itemOffered.reservedTicket.identifier
243
243
  }
244
244
  }, {
245
- arrayFilters: [{ 'offer.itemOffered.reservationNumber': { $eq: params.acceptedOffers.serialNumber } }],
245
+ timestamps: false,
246
+ arrayFilters: [{
247
+ 'offer.itemOffered.typeOf': { $eq: factory.reservationType.EventReservation },
248
+ 'offer.itemOffered.id': { $eq: params.acceptedOffers.itemOffered.id }
249
+ }],
246
250
  new: true,
247
251
  projection: {
248
252
  _id: 1
@@ -427,7 +427,7 @@ class MongoRepository {
427
427
  }
428
428
  unsetUnnecessaryFields(params) {
429
429
  return __awaiter(this, void 0, void 0, function* () {
430
- return this.accountModel.updateMany(params.filter, { $unset: params.$unset })
430
+ return this.accountModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
431
431
  .exec();
432
432
  });
433
433
  }
@@ -590,7 +590,7 @@ class MongoRepository {
590
590
  }
591
591
  unsetUnnecessaryFields(params) {
592
592
  return __awaiter(this, void 0, void 0, function* () {
593
- return this.aggregateOfferModel.updateMany(params.filter, { $unset: params.$unset })
593
+ return this.aggregateOfferModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
594
594
  .exec();
595
595
  });
596
596
  }
@@ -182,6 +182,12 @@ export declare class MongoRepository {
182
182
  id: string;
183
183
  };
184
184
  }): Promise<void>;
185
+ /**
186
+ * 終了日時を一定期間過ぎたアクションを削除する
187
+ */
188
+ deleteEndDatePassedCertainPeriod(params: {
189
+ $lt: Date;
190
+ }): Promise<void>;
185
191
  /**
186
192
  * 特定の取引を更新する(汎用)
187
193
  */
@@ -189,14 +195,29 @@ export declare class MongoRepository {
189
195
  id: string;
190
196
  update: any;
191
197
  }): Promise<factory.assetTransaction.ITransaction<T>>;
192
- migratePaymentMethodIdentifier(params: {
198
+ /**
199
+ * 互換性維持対応
200
+ */
201
+ migrateObjectReservationNumber(params: {
202
+ id: string;
203
+ object: {
204
+ reservationNumber: string;
205
+ };
206
+ }): Promise<any>;
207
+ /**
208
+ * 互換性維持対応専用
209
+ */
210
+ fixReservedTicketIdentifier(params: {
211
+ project: {
212
+ id: string;
213
+ };
193
214
  transactionNumber: string;
194
215
  object: {
195
216
  paymentMethod: {
196
- identifier: string;
217
+ movieTickets: factory.action.trade.pay.IMovieTicket[];
197
218
  };
198
219
  };
199
- }): Promise<any>;
220
+ }): Promise<void>;
200
221
  findByIdAndDelete(params: {
201
222
  id: string;
202
223
  }): Promise<void>;