@chevre/domain 20.2.0-alpha.2 → 20.2.0-alpha.21

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 (67) hide show
  1. package/example/src/chevre/aggregateEventReservation.ts +37 -0
  2. package/example/src/chevre/aggregation/aggregateSystem.ts +82 -0
  3. package/example/src/chevre/importEventsFromCOA.ts +8 -1
  4. package/example/src/chevre/migrateEventOffersItemOfferedAvailableChannel.ts +90 -0
  5. package/example/src/chevre/migrateEventOffersItemOfferedTypeOf.ts +0 -5
  6. package/example/src/chevre/migratePaymentServicePaymentUrlExpiresInSeconds.ts +77 -0
  7. package/lib/chevre/repo/action.d.ts +58 -0
  8. package/lib/chevre/repo/action.js +187 -0
  9. package/lib/chevre/repo/aggregation.d.ts +34 -0
  10. package/lib/chevre/repo/aggregation.js +64 -0
  11. package/lib/chevre/repo/event.d.ts +0 -1
  12. package/lib/chevre/repo/event.js +124 -105
  13. package/lib/chevre/repo/mongoose/model/aggregation.d.ts +7 -0
  14. package/lib/chevre/repo/mongoose/model/aggregation.js +47 -0
  15. package/lib/chevre/repo/mongoose/model/event.js +2 -2
  16. package/lib/chevre/repo/mongoose/model/telemetry.js +4 -28
  17. package/lib/chevre/repo/order.d.ts +9 -0
  18. package/lib/chevre/repo/order.js +49 -0
  19. package/lib/chevre/repo/place.d.ts +15 -1
  20. package/lib/chevre/repo/place.js +205 -52
  21. package/lib/chevre/repo/product.d.ts +1 -0
  22. package/lib/chevre/repo/product.js +5 -0
  23. package/lib/chevre/repo/reservation.d.ts +0 -6
  24. package/lib/chevre/repo/reservation.js +106 -66
  25. package/lib/chevre/repo/transaction.d.ts +29 -0
  26. package/lib/chevre/repo/transaction.js +133 -0
  27. package/lib/chevre/repo/trip.js +33 -27
  28. package/lib/chevre/repository.d.ts +3 -0
  29. package/lib/chevre/repository.js +5 -1
  30. package/lib/chevre/service/aggregation/event/aggregateScreeningEvent.d.ts +1 -1
  31. package/lib/chevre/service/aggregation/event/aggregateScreeningEvent.js +34 -13
  32. package/lib/chevre/service/aggregation/system.d.ts +74 -0
  33. package/lib/chevre/service/aggregation/system.js +266 -0
  34. package/lib/chevre/service/aggregation.d.ts +2 -0
  35. package/lib/chevre/service/aggregation.js +3 -1
  36. package/lib/chevre/service/assetTransaction/pay/potentialActions.js +2 -4
  37. package/lib/chevre/service/assetTransaction/pay.d.ts +19 -4
  38. package/lib/chevre/service/assetTransaction/pay.js +65 -32
  39. package/lib/chevre/service/assetTransaction/reserve/factory.d.ts +3 -0
  40. package/lib/chevre/service/assetTransaction/reserve/factory.js +33 -2
  41. package/lib/chevre/service/assetTransaction/reserve.d.ts +7 -2
  42. package/lib/chevre/service/assetTransaction/reserve.js +33 -51
  43. package/lib/chevre/service/delivery/factory.js +1 -0
  44. package/lib/chevre/service/event.d.ts +2 -4
  45. package/lib/chevre/service/event.js +21 -10
  46. package/lib/chevre/service/offer/event/cancel.js +0 -1
  47. package/lib/chevre/service/offer/event/factory.js +25 -5
  48. package/lib/chevre/service/offer/event/searchEventTicketOffers.js +116 -4
  49. package/lib/chevre/service/offer/event/voidTransaction.js +0 -2
  50. package/lib/chevre/service/offer.js +28 -20
  51. package/lib/chevre/service/order/onOrderStatusChanged/factory.js +2 -1
  52. package/lib/chevre/service/order/onOrderStatusChanged.js +2 -1
  53. package/lib/chevre/service/order/placeOrder.js +16 -0
  54. package/lib/chevre/service/payment/any.d.ts +5 -0
  55. package/lib/chevre/service/reserve/confirmReservation.js +7 -10
  56. package/lib/chevre/service/reserve/useReservation.js +2 -1
  57. package/lib/chevre/service/task/confirmPayTransaction.js +20 -1
  58. package/lib/chevre/service/task/confirmReserveTransaction.d.ts +4 -0
  59. package/lib/chevre/service/task/confirmReserveTransaction.js +5 -5
  60. package/lib/chevre/service/task/importEventsFromCOA.js +3 -1
  61. package/lib/chevre/service/transaction/placeOrderInProgress/result/acceptedOffers.js +42 -27
  62. package/lib/chevre/settings.d.ts +2 -0
  63. package/lib/chevre/settings.js +7 -2
  64. package/package.json +3 -3
  65. package/example/src/chevre/aggregateReservationOnProject.ts +0 -32
  66. package/example/src/chevre/migrateEventProjectAttributes.ts +0 -57
  67. package/example/src/chevre/migratePlaceAdditionalProperties.ts +0 -162
@@ -120,9 +120,16 @@ exports.aggregateByEvent = aggregateByEvent;
120
120
  */
121
121
  function findLocation(params) {
122
122
  return (repos) => __awaiter(this, void 0, void 0, function* () {
123
+ var _a;
123
124
  let movieTheater;
124
125
  try {
125
- movieTheater = yield repos.place.findById({ id: params.event.superEvent.location.id });
126
+ if (params.event.typeOf === factory.eventType.ScreeningEvent) {
127
+ movieTheater = yield repos.place.findById({ id: params.event.superEvent.location.id });
128
+ }
129
+ else {
130
+ const movieTheaterId = String((_a = params.event.offers) === null || _a === void 0 ? void 0 : _a.itemOffered.availableChannel.serviceLocation.containedInPlace.id);
131
+ movieTheater = yield repos.place.findById({ id: movieTheaterId });
132
+ }
126
133
  }
127
134
  catch (error) {
128
135
  let throwsError = true;
@@ -223,22 +230,29 @@ function aggregateReservationByOffer(params) {
223
230
  let reservationCount4offer;
224
231
  let attendeeCount4offer;
225
232
  let checkInCount4offer;
233
+ let reservationType = factory.reservationType.EventReservation;
234
+ if (params.event.typeOf === factory.eventType.Event) {
235
+ reservationType = factory.reservationType.BusReservation;
236
+ }
226
237
  reservationCount4offer = yield repos.reservation.count({
227
- typeOf: factory.reservationType.EventReservation,
228
- reservationFor: { ids: [params.event.id] },
238
+ typeOf: reservationType,
239
+ // reservationFor: { ids: [params.event.id] },
240
+ reservationFor: { id: { $eq: params.event.id } },
229
241
  reservationStatuses: [factory.reservationStatusType.ReservationConfirmed],
230
242
  reservedTicket: { ticketType: { ids: [params.offer.id] } }
231
243
  });
232
244
  attendeeCount4offer = yield repos.reservation.count({
233
- typeOf: factory.reservationType.EventReservation,
234
- reservationFor: { ids: [params.event.id] },
245
+ typeOf: reservationType,
246
+ // reservationFor: { ids: [params.event.id] },
247
+ reservationFor: { id: { $eq: params.event.id } },
235
248
  reservationStatuses: [factory.reservationStatusType.ReservationConfirmed],
236
249
  reservedTicket: { ticketType: { ids: [params.offer.id] } },
237
250
  attended: true
238
251
  });
239
252
  checkInCount4offer = yield repos.reservation.count({
240
- typeOf: factory.reservationType.EventReservation,
241
- reservationFor: { ids: [params.event.id] },
253
+ typeOf: reservationType,
254
+ // reservationFor: { ids: [params.event.id] },
255
+ reservationFor: { id: { $eq: params.event.id } },
242
256
  reservationStatuses: [factory.reservationStatusType.ReservationConfirmed],
243
257
  reservedTicket: { ticketType: { ids: [params.offer.id] } },
244
258
  checkedIn: true
@@ -390,9 +404,14 @@ function aggregateReservationByEvent(params) {
390
404
  let attendeeCount;
391
405
  let checkInCount;
392
406
  let reservationCount;
407
+ let reservationType = factory.reservationType.EventReservation;
408
+ if (params.event.typeOf === factory.eventType.Event) {
409
+ reservationType = factory.reservationType.BusReservation;
410
+ }
393
411
  reservationCount = yield repos.reservation.count({
394
- typeOf: factory.reservationType.EventReservation,
395
- reservationFor: { ids: [params.event.id] },
412
+ typeOf: reservationType,
413
+ // reservationFor: { ids: [params.event.id] },
414
+ reservationFor: { id: { $eq: params.event.id } },
396
415
  reservationStatuses: [factory.reservationStatusType.ReservationConfirmed]
397
416
  });
398
417
  // maximumAttendeeCapacityを決定
@@ -421,14 +440,16 @@ function aggregateReservationByEvent(params) {
421
440
  }
422
441
  }
423
442
  attendeeCount = yield repos.reservation.count({
424
- typeOf: factory.reservationType.EventReservation,
425
- reservationFor: { ids: [params.event.id] },
443
+ typeOf: reservationType,
444
+ // reservationFor: { ids: [params.event.id] },
445
+ reservationFor: { id: { $eq: params.event.id } },
426
446
  // reservationStatuses: [factory.reservationStatusType.ReservationConfirmed],
427
447
  attended: true
428
448
  });
429
449
  checkInCount = yield repos.reservation.count({
430
- typeOf: factory.reservationType.EventReservation,
431
- reservationFor: { ids: [params.event.id] },
450
+ typeOf: reservationType,
451
+ // reservationFor: { ids: [params.event.id] },
452
+ reservationFor: { id: { $eq: params.event.id } },
432
453
  // reservationStatuses: [factory.reservationStatusType.ReservationConfirmed],
433
454
  checkedIn: true
434
455
  });
@@ -0,0 +1,74 @@
1
+ import { MongoRepository as ActionRepo } from '../../repo/action';
2
+ import { MongoRepository as AggregationRepo } from '../../repo/aggregation';
3
+ import { MongoRepository as OrderRepo } from '../../repo/order';
4
+ import { MongoRepository as ReservationRepo } from '../../repo/reservation';
5
+ import { MongoRepository as TransactionRepo } from '../../repo/transaction';
6
+ /**
7
+ * 注文取引集計
8
+ */
9
+ declare function aggregatePlaceOrder(params: {
10
+ aggregationDays: number;
11
+ excludedProjectId?: string;
12
+ clientIds?: string[];
13
+ }): (repos: {
14
+ agregation: AggregationRepo;
15
+ transaction: TransactionRepo;
16
+ }) => Promise<void>;
17
+ /**
18
+ * 興行オファー承認アクション集計
19
+ */
20
+ declare function aggregateAuthorizeEventServiceOfferAction(params: {
21
+ aggregationDays: number;
22
+ excludedProjectId?: string;
23
+ }): (repos: {
24
+ agregation: AggregationRepo;
25
+ action: ActionRepo;
26
+ }) => Promise<void>;
27
+ /**
28
+ * 決済承認アクション集計
29
+ */
30
+ declare function aggregateAuthorizePaymentAction(params: {
31
+ aggregationDays: number;
32
+ excludedProjectId?: string;
33
+ }): (repos: {
34
+ agregation: AggregationRepo;
35
+ action: ActionRepo;
36
+ }) => Promise<void>;
37
+ declare function aggregateAuthorizeOrderAction(params: {
38
+ aggregationDays: number;
39
+ excludedProjectId?: string;
40
+ }): (repos: {
41
+ agregation: AggregationRepo;
42
+ action: ActionRepo;
43
+ }) => Promise<void>;
44
+ /**
45
+ * 使用アクション集計
46
+ */
47
+ declare function aggregateUseAction(params: {
48
+ aggregationDays: number;
49
+ excludedProjectId?: string;
50
+ }): (repos: {
51
+ agregation: AggregationRepo;
52
+ action: ActionRepo;
53
+ }) => Promise<void>;
54
+ /**
55
+ * 注文集計
56
+ */
57
+ declare function aggregateOrder(params: {
58
+ aggregationDays: number;
59
+ excludedProjectId?: string;
60
+ }): (repos: {
61
+ agregation: AggregationRepo;
62
+ order: OrderRepo;
63
+ }) => Promise<void>;
64
+ /**
65
+ * 予約集計
66
+ */
67
+ declare function aggregateReservation(params: {
68
+ aggregationDays: number;
69
+ excludedProjectId?: string;
70
+ }): (repos: {
71
+ agregation: AggregationRepo;
72
+ reservation: ReservationRepo;
73
+ }) => Promise<void>;
74
+ export { aggregateAuthorizeEventServiceOfferAction, aggregateAuthorizeOrderAction, aggregateAuthorizePaymentAction, aggregateOrder, aggregatePlaceOrder, aggregateReservation, aggregateUseAction };
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.aggregateUseAction = exports.aggregateReservation = exports.aggregatePlaceOrder = exports.aggregateOrder = exports.aggregateAuthorizePaymentAction = exports.aggregateAuthorizeOrderAction = exports.aggregateAuthorizeEventServiceOfferAction = void 0;
13
+ const createDebug = require("debug");
14
+ const moment = require("moment-timezone");
15
+ const factory = require("../../factory");
16
+ const aggregation_1 = require("../../repo/aggregation");
17
+ const debug = createDebug('chevre-domain:service:aggregation:system');
18
+ /**
19
+ * 注文取引集計
20
+ */
21
+ function aggregatePlaceOrder(params) {
22
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
23
+ var _a;
24
+ const aggregateDate = new Date();
25
+ const aggregateDuration = moment.duration(1, 'days')
26
+ .toISOString();
27
+ let i = -1;
28
+ while (i < params.aggregationDays) {
29
+ i += 1;
30
+ const startFrom = moment()
31
+ // .tz('Asia/Tokyo')
32
+ .add(-i, 'days')
33
+ .startOf('day')
34
+ .toDate();
35
+ const startThrough = moment()
36
+ // .tz('Asia/Tokyo')
37
+ .add(-i, 'days')
38
+ .endOf('day')
39
+ .toDate();
40
+ const aggregateResult = yield repos.transaction.aggregatePlaceOrder({
41
+ project: { id: { $ne: params.excludedProjectId } },
42
+ startFrom,
43
+ startThrough,
44
+ typeOf: factory.transactionType.PlaceOrder
45
+ });
46
+ debug('aggregatePlaceOrder:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
47
+ const aggregateResultsByClientId = [];
48
+ if (Array.isArray(params.clientIds)) {
49
+ for (const clientId of params.clientIds) {
50
+ aggregateResultsByClientId.push({
51
+ clientId,
52
+ aggregation: yield repos.transaction.aggregatePlaceOrder({
53
+ project: { id: { $ne: params.excludedProjectId } },
54
+ startFrom,
55
+ startThrough,
56
+ typeOf: factory.transactionType.PlaceOrder,
57
+ clientId
58
+ })
59
+ });
60
+ }
61
+ }
62
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregatePlaceOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate, aggregationByClient: aggregateResultsByClientId }, aggregateResult));
63
+ }
64
+ });
65
+ }
66
+ exports.aggregatePlaceOrder = aggregatePlaceOrder;
67
+ /**
68
+ * 興行オファー承認アクション集計
69
+ */
70
+ function aggregateAuthorizeEventServiceOfferAction(params) {
71
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
72
+ var _a;
73
+ const aggregateDate = new Date();
74
+ const aggregateDuration = moment.duration(1, 'days')
75
+ .toISOString();
76
+ let i = -1;
77
+ while (i < params.aggregationDays) {
78
+ i += 1;
79
+ const startFrom = moment()
80
+ // .tz('Asia/Tokyo')
81
+ .add(-i, 'days')
82
+ .startOf('day')
83
+ .toDate();
84
+ const startThrough = moment()
85
+ // .tz('Asia/Tokyo')
86
+ .add(-i, 'days')
87
+ .endOf('day')
88
+ .toDate();
89
+ const aggregateResult = yield repos.action.aggregateAuthorizeEventServiceOfferAction({
90
+ project: { id: { $ne: params.excludedProjectId } },
91
+ startFrom,
92
+ startThrough,
93
+ typeOf: factory.actionType.AuthorizeAction
94
+ });
95
+ debug('aggregateAuthorizeEventServiceOfferAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
96
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateAuthorizeEventServiceOfferAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
97
+ }
98
+ });
99
+ }
100
+ exports.aggregateAuthorizeEventServiceOfferAction = aggregateAuthorizeEventServiceOfferAction;
101
+ /**
102
+ * 決済承認アクション集計
103
+ */
104
+ function aggregateAuthorizePaymentAction(params) {
105
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
106
+ var _a;
107
+ const aggregateDate = new Date();
108
+ const aggregateDuration = moment.duration(1, 'days')
109
+ .toISOString();
110
+ let i = -1;
111
+ while (i < params.aggregationDays) {
112
+ i += 1;
113
+ const startFrom = moment()
114
+ // .tz('Asia/Tokyo')
115
+ .add(-i, 'days')
116
+ .startOf('day')
117
+ .toDate();
118
+ const startThrough = moment()
119
+ // .tz('Asia/Tokyo')
120
+ .add(-i, 'days')
121
+ .endOf('day')
122
+ .toDate();
123
+ const aggregateResult = yield repos.action.aggregateAuthorizePaymentAction({
124
+ project: { id: { $ne: params.excludedProjectId } },
125
+ startFrom,
126
+ startThrough,
127
+ typeOf: factory.actionType.AuthorizeAction
128
+ });
129
+ debug('aggregateAuthorizePaymentAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
130
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateAuthorizePaymentAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
131
+ }
132
+ });
133
+ }
134
+ exports.aggregateAuthorizePaymentAction = aggregateAuthorizePaymentAction;
135
+ function aggregateAuthorizeOrderAction(params) {
136
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
137
+ var _a;
138
+ const aggregateDate = new Date();
139
+ const aggregateDuration = moment.duration(1, 'days')
140
+ .toISOString();
141
+ let i = -1;
142
+ while (i < params.aggregationDays) {
143
+ i += 1;
144
+ const startFrom = moment()
145
+ // .tz('Asia/Tokyo')
146
+ .add(-i, 'days')
147
+ .startOf('day')
148
+ .toDate();
149
+ const startThrough = moment()
150
+ // .tz('Asia/Tokyo')
151
+ .add(-i, 'days')
152
+ .endOf('day')
153
+ .toDate();
154
+ const aggregateResult = yield repos.action.aggregateAuthorizeOrderAction({
155
+ project: { id: { $ne: params.excludedProjectId } },
156
+ startFrom,
157
+ startThrough,
158
+ typeOf: factory.actionType.AuthorizeAction
159
+ });
160
+ debug('aggregateAuthorizeOrderAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
161
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateAuthorizeOrderAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
162
+ }
163
+ });
164
+ }
165
+ exports.aggregateAuthorizeOrderAction = aggregateAuthorizeOrderAction;
166
+ /**
167
+ * 使用アクション集計
168
+ */
169
+ function aggregateUseAction(params) {
170
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
171
+ var _a;
172
+ const aggregateDate = new Date();
173
+ const aggregateDuration = moment.duration(1, 'days')
174
+ .toISOString();
175
+ let i = -1;
176
+ while (i < params.aggregationDays) {
177
+ i += 1;
178
+ const startFrom = moment()
179
+ // .tz('Asia/Tokyo')
180
+ .add(-i, 'days')
181
+ .startOf('day')
182
+ .toDate();
183
+ const startThrough = moment()
184
+ // .tz('Asia/Tokyo')
185
+ .add(-i, 'days')
186
+ .endOf('day')
187
+ .toDate();
188
+ const aggregateResult = yield repos.action.aggregateUseAction({
189
+ project: { id: { $ne: params.excludedProjectId } },
190
+ startFrom,
191
+ startThrough,
192
+ typeOf: factory.actionType.UseAction
193
+ });
194
+ debug('aggregateUseAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
195
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateUseAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
196
+ }
197
+ });
198
+ }
199
+ exports.aggregateUseAction = aggregateUseAction;
200
+ /**
201
+ * 注文集計
202
+ */
203
+ function aggregateOrder(params) {
204
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
205
+ const aggregateDate = new Date();
206
+ const aggregateDuration = moment.duration(1, 'days')
207
+ .toISOString();
208
+ let i = -1;
209
+ while (i < params.aggregationDays) {
210
+ i += 1;
211
+ const orderDateFrom = moment()
212
+ // .tz('Asia/Tokyo')
213
+ .add(-i, 'days')
214
+ .startOf('day')
215
+ .toDate();
216
+ const orderDateThrough = moment()
217
+ // .tz('Asia/Tokyo')
218
+ .add(-i, 'days')
219
+ .endOf('day')
220
+ .toDate();
221
+ const aggregateResult = yield repos.order.aggregateOrder({
222
+ orderDate: {
223
+ $gte: orderDateFrom,
224
+ $lte: orderDateThrough
225
+ }
226
+ });
227
+ debug('aggregateOrder:result', aggregateResult);
228
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: orderDateFrom, aggregateDate }, aggregateResult));
229
+ }
230
+ });
231
+ }
232
+ exports.aggregateOrder = aggregateOrder;
233
+ /**
234
+ * 予約集計
235
+ */
236
+ function aggregateReservation(params) {
237
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
238
+ const aggregateDate = new Date();
239
+ const aggregateDuration = moment.duration(1, 'days')
240
+ .toISOString();
241
+ let i = -1;
242
+ while (i < params.aggregationDays) {
243
+ i += 1;
244
+ const bookingFrom = moment()
245
+ // .tz('Asia/Tokyo')
246
+ .add(-i, 'days')
247
+ .startOf('day')
248
+ .toDate();
249
+ const bookingThrough = moment()
250
+ // .tz('Asia/Tokyo')
251
+ .add(-i, 'days')
252
+ .endOf('day')
253
+ .toDate();
254
+ // i日前の予約検索
255
+ const reservationCount = yield repos.reservation.count({
256
+ typeOf: factory.reservationType.EventReservation,
257
+ reservationStatus: { $eq: factory.reservationStatusType.ReservationConfirmed },
258
+ bookingFrom,
259
+ bookingThrough
260
+ });
261
+ const aggregateResult = { reservationCount };
262
+ yield repos.agregation.saveAggregation(Object.assign({ typeOf: aggregation_1.AggregationType.AggregateReservation, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: bookingFrom, aggregateDate }, aggregateResult));
263
+ }
264
+ });
265
+ }
266
+ exports.aggregateReservation = aggregateReservation;
@@ -3,5 +3,7 @@
3
3
  */
4
4
  import * as EventAggregation from './aggregation/event';
5
5
  import * as ProjectAggregation from './aggregation/project';
6
+ import * as SystemAggregation from './aggregation/system';
6
7
  export import event = EventAggregation;
7
8
  export import project = ProjectAggregation;
9
+ export import system = SystemAggregation;
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.project = exports.event = void 0;
3
+ exports.system = exports.project = exports.event = void 0;
4
4
  /**
5
5
  * 集計サービス
6
6
  */
7
7
  const EventAggregation = require("./aggregation/event");
8
8
  const ProjectAggregation = require("./aggregation/project");
9
+ const SystemAggregation = require("./aggregation/system");
9
10
  exports.event = EventAggregation;
10
11
  exports.project = ProjectAggregation;
12
+ exports.system = SystemAggregation;
@@ -11,13 +11,10 @@ function createPayActions(params) {
11
11
  if (payObject !== undefined) {
12
12
  const maskedCustomer = (0, order_1.createMaskedCustomer)(params.order);
13
13
  const simpleOrder = {
14
- // project: params.order.project,
15
14
  typeOf: params.order.typeOf,
16
15
  seller: params.order.seller,
17
16
  // mask
18
17
  customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id, name: maskedCustomer.name },
19
- // IOrderへ移行(2022-11-17~)
20
- // confirmationNumber: params.order.confirmationNumber,
21
18
  orderNumber: params.order.orderNumber,
22
19
  price: params.order.price,
23
20
  priceCurrency: params.order.priceCurrency,
@@ -162,7 +159,8 @@ function movieTicket2reservation4invoice(movieTicket, order, paymentMethodType)
162
159
  }
163
160
  });
164
161
  }
165
- return o.itemOffered.typeOf === factory.reservationType.EventReservation
162
+ return (o.itemOffered.typeOf === factory.reservationType.EventReservation
163
+ || o.itemOffered.typeOf === factory.reservationType.BusReservation)
166
164
  && mvtkUnitPriceSpec !== undefined
167
165
  && o.itemOffered.reservationFor.id === movieTicket.serviceOutput.reservationFor.id
168
166
  && ((_d = o.itemOffered.reservedTicket.ticketedSeat) === null || _d === void 0 ? void 0 : _d.seatNumber) === movieTicket.serviceOutput.reservedTicket.ticketedSeat.seatNumber
@@ -25,13 +25,28 @@ export interface IStartOperationRepos {
25
25
  task: TaskRepo;
26
26
  }
27
27
  export declare type IStartOperation<T> = (repos: IStartOperationRepos) => Promise<T>;
28
- export declare type ICancelOperation<T> = (repos: {
28
+ export interface ICancelRepos {
29
+ action: ActionRepo;
30
+ accountingReport: AccountingReportRepo;
29
31
  assetTransaction: AssetTransactionRepo;
30
- }) => Promise<T>;
31
- export declare type IConfirmOperation<T> = (repos: {
32
+ product: ProductRepo;
33
+ project: ProjectRepo;
34
+ seller: SellerRepo;
35
+ task: TaskRepo;
36
+ }
37
+ export declare type ICancelOperation<T> = (repos: ICancelRepos) => Promise<T>;
38
+ export interface IConfirmRepos {
39
+ action: ActionRepo;
40
+ accountingReport: AccountingReportRepo;
32
41
  assetTransaction: AssetTransactionRepo;
42
+ event: EventRepo;
33
43
  order: OrderRepo;
34
- }) => Promise<T>;
44
+ product: ProductRepo;
45
+ project: ProjectRepo;
46
+ seller: SellerRepo;
47
+ task: TaskRepo;
48
+ }
49
+ export declare type IConfirmOperation<T> = (repos: IConfirmRepos) => Promise<T>;
35
50
  export declare type IExportTasksOperation<T> = (repos: {
36
51
  task: TaskRepo;
37
52
  assetTransaction: AssetTransactionRepo;
@@ -13,6 +13,7 @@ exports.searchGMOTrade = exports.exportTasksById = exports.cancel = exports.conf
13
13
  const moment = require("moment");
14
14
  const factory = require("../../factory");
15
15
  const settings_1 = require("../../settings");
16
+ const payment_1 = require("../payment");
16
17
  const CreditCardPayment = require("../payment/creditCard");
17
18
  const MovieTicketPayment = require("../payment/movieTicket");
18
19
  const PaymentCardPayment = require("../payment/paymentCard");
@@ -307,8 +308,19 @@ function confirm(params) {
307
308
  typeOf: factory.assetTransactionType.Pay,
308
309
  id: transaction.id,
309
310
  result: {},
310
- potentialActions: potentialActions
311
+ // sync対応(2023-01-14~)
312
+ potentialActions: (settings_1.USE_PAY_ASSET_TRANSACTION_SYNC_PROCESSING)
313
+ ? { pay: [] }
314
+ : potentialActions
311
315
  });
316
+ // sync対応(2023-01-14~)
317
+ if (settings_1.USE_PAY_ASSET_TRANSACTION_SYNC_PROCESSING) {
318
+ if (Array.isArray(potentialActions.pay)) {
319
+ for (const payAction of potentialActions.pay) {
320
+ yield (0, payment_1.pay)(payAction)(repos);
321
+ }
322
+ }
323
+ }
312
324
  });
313
325
  }
314
326
  exports.confirm = confirm;
@@ -341,11 +353,23 @@ function fixOrderAsPurpose(params, transaction) {
341
353
  */
342
354
  function cancel(params) {
343
355
  return (repos) => __awaiter(this, void 0, void 0, function* () {
344
- yield repos.assetTransaction.cancel({
356
+ const transaction = yield repos.assetTransaction.cancel({
345
357
  typeOf: factory.assetTransactionType.Pay,
346
358
  id: params.id,
347
359
  transactionNumber: params.transactionNumber
348
360
  });
361
+ // sync対応(2023-01-14~)
362
+ if (settings_1.USE_PAY_ASSET_TRANSACTION_SYNC_PROCESSING) {
363
+ const payTransactionAsObject = {
364
+ project: transaction.project,
365
+ typeOf: transaction.typeOf,
366
+ id: transaction.id,
367
+ transactionNumber: transaction.transactionNumber,
368
+ object: transaction.object,
369
+ recipient: transaction.recipient
370
+ };
371
+ yield (0, payment_1.voidPayment)({ object: payTransactionAsObject })(repos);
372
+ }
349
373
  });
350
374
  }
351
375
  exports.cancel = cancel;
@@ -353,6 +377,7 @@ exports.cancel = cancel;
353
377
  * 取引のタスク出力
354
378
  */
355
379
  function exportTasksById(params) {
380
+ // tslint:disable-next-line:max-func-body-length
356
381
  return (repos) => __awaiter(this, void 0, void 0, function* () {
357
382
  const transaction = yield repos.assetTransaction.findById({
358
383
  typeOf: factory.assetTransactionType.Pay,
@@ -388,42 +413,50 @@ function exportTasksById(params) {
388
413
  .add(params.runsTasksAfterInSeconds, 'seconds')
389
414
  .toDate();
390
415
  }
416
+ const payTransactionAsObject = {
417
+ project: transaction.project,
418
+ typeOf: transaction.typeOf,
419
+ id: transaction.id,
420
+ transactionNumber: transaction.transactionNumber,
421
+ object: transaction.object,
422
+ recipient: transaction.recipient
423
+ };
424
+ const voidPaymentTasks = {
425
+ project: transaction.project,
426
+ name: factory.taskName.VoidPayment,
427
+ status: factory.taskStatus.Ready,
428
+ runsAt: taskRunsAt,
429
+ remainingNumberOfTries: 10,
430
+ numberOfTried: 0,
431
+ executionResults: [],
432
+ data: { object: payTransactionAsObject }
433
+ };
391
434
  switch (transaction.status) {
392
435
  case factory.transactionStatusType.Confirmed:
393
- // tslint:disable-next-line:no-single-line-block-comment
394
- /* istanbul ignore else */
395
- if (potentialActions !== undefined) {
396
- // tslint:disable-next-line:no-single-line-block-comment
397
- /* istanbul ignore else */
398
- if (potentialActions.pay !== undefined) {
399
- const payTasks = potentialActions.pay.map((a) => {
400
- return {
401
- project: transaction.project,
402
- name: factory.taskName.Pay,
403
- status: factory.taskStatus.Ready,
404
- runsAt: taskRunsAt,
405
- remainingNumberOfTries: 10,
406
- numberOfTried: 0,
407
- executionResults: [],
408
- data: a
409
- };
410
- });
411
- taskAttributes.push(...payTasks);
412
- }
436
+ const payActions = potentialActions === null || potentialActions === void 0 ? void 0 : potentialActions.pay;
437
+ if (Array.isArray(payActions) && payActions.length > 0) {
438
+ const payTasks = payActions.map((a) => {
439
+ return {
440
+ project: transaction.project,
441
+ name: factory.taskName.Pay,
442
+ status: factory.taskStatus.Ready,
443
+ runsAt: taskRunsAt,
444
+ remainingNumberOfTries: 10,
445
+ numberOfTried: 0,
446
+ executionResults: [],
447
+ data: a
448
+ };
449
+ });
450
+ taskAttributes.push(...payTasks);
413
451
  }
414
452
  break;
415
453
  case factory.transactionStatusType.Canceled:
454
+ // sync対応(2023-01-14~)
455
+ if (!settings_1.USE_PAY_ASSET_TRANSACTION_SYNC_PROCESSING) {
456
+ taskAttributes.push(voidPaymentTasks);
457
+ }
458
+ break;
416
459
  case factory.transactionStatusType.Expired:
417
- const voidPaymentTasks = {
418
- project: transaction.project,
419
- name: factory.taskName.VoidPayment,
420
- status: factory.taskStatus.Ready,
421
- runsAt: taskRunsAt,
422
- remainingNumberOfTries: 10,
423
- numberOfTried: 0,
424
- executionResults: [],
425
- data: { object: transaction }
426
- };
427
460
  taskAttributes.push(voidPaymentTasks);
428
461
  break;
429
462
  default:
@@ -70,4 +70,7 @@ export declare function createPotentialActions(params: factory.assetTransaction.
70
70
  transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
71
71
  order?: factory.order.IOrder;
72
72
  }): factory.assetTransaction.reserve.IPotentialActions;
73
+ export declare function createPendingReservationAction(params: {
74
+ transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
75
+ }): factory.action.cancel.reservation.IAttributes[];
73
76
  export {};