@chevre/domain 20.7.0-alpha.0 → 20.7.0-alpha.2

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.
@@ -12,9 +12,9 @@ async function main() {
12
12
  await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
13
13
 
14
14
  const additionalPropertyRepo = new chevre.repository.AdditionalProperty(mongoose.connection);
15
- const offerRepo = new chevre.repository.Offer(mongoose.connection);
15
+ const creativeWorkRepo = new chevre.repository.CreativeWork(mongoose.connection);
16
16
 
17
- const cursor = offerRepo.getCursor(
17
+ const cursor = creativeWorkRepo.getCursor(
18
18
  {
19
19
  // 'project.id': { $eq: project.id },
20
20
  'project.id': { $ne: EXCLUDED_PROJECT_ID }
@@ -23,7 +23,7 @@ async function main() {
23
23
  // _id: 1,
24
24
  }
25
25
  );
26
- console.log('events found');
26
+ console.log('movies found');
27
27
 
28
28
  const additionalPropertyNames: string[] = [];
29
29
  const projectIds: string[] = [];
@@ -33,64 +33,64 @@ async function main() {
33
33
  let updateCount = 0;
34
34
  await cursor.eachAsync(async (doc) => {
35
35
  i += 1;
36
- const unitPriceOffer: chevre.factory.unitPriceOffer.IUnitPriceOffer = doc.toObject();
36
+ const movie: chevre.factory.creativeWork.movie.ICreativeWork = doc.toObject();
37
37
 
38
- const additionalPropertyNamesOnEvent = unitPriceOffer.additionalProperty?.map((p) => p.name);
38
+ const additionalPropertyNamesOnEvent = movie.additionalProperty?.map((p) => p.name);
39
39
  if (Array.isArray(additionalPropertyNamesOnEvent) && additionalPropertyNamesOnEvent.length > 0) {
40
40
  console.log(
41
41
  additionalPropertyNamesOnEvent.length,
42
42
  'additionalPropertyNamesOnEvent found',
43
- unitPriceOffer.project.id,
44
- unitPriceOffer.id
43
+ movie.project.id,
44
+ movie.id
45
45
  );
46
46
  additionalPropertyNames.push(...additionalPropertyNamesOnEvent);
47
- projectIds.push(unitPriceOffer.project.id);
47
+ projectIds.push(movie.project.id);
48
48
  additionalPropertyNamesOnEvent.forEach((name) => {
49
49
  if (!name.match(/^[a-zA-Z]*$/)) {
50
50
  // throw new Error(`not matched ${creativeWork.project.id} ${creativeWork.id}`);
51
- unexpextedprojectIds.push(unitPriceOffer.project.id);
51
+ unexpextedprojectIds.push(movie.project.id);
52
52
  }
53
53
  // tslint:disable-next-line:no-magic-numbers
54
54
  if (name.length < 5) {
55
55
  // throw new Error(`length matched ${creativeWork.project.id} ${creativeWork.id} ${name}`);
56
- unexpextedprojectIds.push(unitPriceOffer.project.id);
56
+ unexpextedprojectIds.push(movie.project.id);
57
57
  }
58
58
  });
59
59
 
60
60
  for (const additionalPropertyNameOnEvent of additionalPropertyNamesOnEvent) {
61
61
  const existings = await additionalPropertyRepo.search({
62
- project: { id: { $eq: unitPriceOffer.project.id } },
62
+ project: { id: { $eq: movie.project.id } },
63
63
  limit: 1,
64
64
  page: 1,
65
65
  name: { $regex: `^${additionalPropertyNameOnEvent}$` }
66
66
  });
67
67
  if (existings.length > 0) {
68
- console.log('already existed', additionalPropertyNameOnEvent, unitPriceOffer.id, unitPriceOffer.project.id);
68
+ console.log('already existed', additionalPropertyNameOnEvent, movie.id, movie.project.id);
69
69
  } else {
70
70
  updateCount += 1;
71
71
  const newAdditionalProperty: chevre.factory.additionalProperty.IAdditionalProperty = {
72
- project: unitPriceOffer.project,
72
+ project: movie.project,
73
73
  typeOf: 'CategoryCode',
74
74
  codeValue: additionalPropertyNameOnEvent,
75
75
  inCodeSet: {
76
76
  typeOf: 'CategoryCodeSet',
77
- identifier: <any>unitPriceOffer.typeOf
77
+ identifier: <chevre.factory.creativeWorkType.Movie>movie.typeOf
78
78
  },
79
79
  name: { ja: additionalPropertyNameOnEvent }
80
80
  };
81
81
  await additionalPropertyRepo.save({
82
82
  attributes: newAdditionalProperty
83
83
  });
84
- console.log('created', additionalPropertyNameOnEvent, unitPriceOffer.id, unitPriceOffer.project.id);
84
+ console.log('created', additionalPropertyNameOnEvent, movie.id, movie.project.id);
85
85
  }
86
86
  }
87
87
  }
88
88
  });
89
89
  console.log(i, 'events checked');
90
90
  console.log(updateCount, 'properties updated');
91
- console.log([...new Set(additionalPropertyNames)]);
92
- console.log([...new Set(projectIds)]);
93
- console.log([...new Set(unexpextedprojectIds)]);
91
+ console.log('additionalPropertyNames:', [...new Set(additionalPropertyNames)]);
92
+ console.log('projectIds:', [...new Set(projectIds)]);
93
+ console.log('unexpextedprojectIds:', [...new Set(unexpextedprojectIds)]);
94
94
  }
95
95
 
96
96
  main()
@@ -1,6 +1,7 @@
1
1
  import * as factory from '../../../factory';
2
2
  import { IMinimizedIndividualEvent } from '../../../factory/event';
3
3
  export import WebAPIIdentifier = factory.service.webAPI.Identifier;
4
+ export declare type IAcceptedOffer4COA = factory.action.authorize.offer.seatReservation.IAcceptedOffer<factory.service.webAPI.Identifier.COA>;
4
5
  export declare function createAuthorizeSeatReservationActionAttributes(params: {
5
6
  acceptedOffers: factory.action.authorize.offer.seatReservation.IAcceptedOffer<factory.service.webAPI.Identifier.COA>[];
6
7
  event: factory.event.IEvent<factory.eventType.ScreeningEvent>;
@@ -9,9 +10,8 @@ export declare function createAuthorizeSeatReservationActionAttributes(params: {
9
10
  /**
10
11
  * 供給情報から承認アクションの価格を導き出す
11
12
  */
12
- export declare function offers2resultPrice(offers: factory.action.authorize.offer.seatReservation.IAcceptedOffer<WebAPIIdentifier.COA>[]): {
13
+ export declare function offers2resultPrice(offers: IAcceptedOffer4COA[]): {
13
14
  price: number;
14
- requiredPoint: number;
15
15
  eligibleMonetaryAmount: factory.offer.IEligibleMonetaryAmount[];
16
16
  };
17
17
  declare type IResultAcceptedOffer = factory.action.authorize.offer.seatReservation.IResultAcceptedOffer;
@@ -54,7 +54,6 @@ exports.createAuthorizeSeatReservationActionAttributes = createAuthorizeSeatRese
54
54
  */
55
55
  function offers2resultPrice(offers) {
56
56
  const price = offers.reduce((a, b) => a + b.price, 0);
57
- const requiredPoint = offers.reduce((a, b) => a + b.ticketInfo.usePoint, 0);
58
57
  const eligibleMonetaryAmount = offers.reduce((a, b) => {
59
58
  if (Array.isArray(b.eligibleMonetaryAmount)) {
60
59
  return [...a, ...b.eligibleMonetaryAmount];
@@ -63,7 +62,7 @@ function offers2resultPrice(offers) {
63
62
  return a;
64
63
  }
65
64
  }, []);
66
- return { price, requiredPoint, eligibleMonetaryAmount };
65
+ return { price, eligibleMonetaryAmount };
67
66
  }
68
67
  exports.offers2resultPrice = offers2resultPrice;
69
68
  /**
@@ -0,0 +1,21 @@
1
+ import { MongoRepository as OfferRepo } from '../../../repo/offer';
2
+ import { IAcceptedOffer4COA } from './factory';
3
+ /**
4
+ * 受け入れらたオファーの内容を検証
5
+ */
6
+ declare function validateAcceptedOffers(params: {
7
+ object: {
8
+ acceptedOffer: IAcceptedOffer4COA[];
9
+ event: {
10
+ id: string;
11
+ };
12
+ };
13
+ project: {
14
+ id: string;
15
+ };
16
+ }): (repos: {
17
+ offer: OfferRepo;
18
+ }) => Promise<{
19
+ acceptedOffers: IAcceptedOffer4COA[];
20
+ }>;
21
+ export { validateAcceptedOffers };
@@ -0,0 +1,59 @@
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.validateAcceptedOffers = void 0;
13
+ const factory = require("../../../factory");
14
+ /**
15
+ * 受け入れらたオファーの内容を検証
16
+ */
17
+ function validateAcceptedOffers(params) {
18
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
19
+ const offerIds = (Array.isArray(params.object.acceptedOffer))
20
+ ? [...new Set(params.object.acceptedOffer.map((o) => o.id))]
21
+ : [];
22
+ let availableUnitPriceOffers = [];
23
+ // 指定された単価オファーを検索
24
+ if (offerIds.length > 0) {
25
+ availableUnitPriceOffers = yield repos.offer.search({
26
+ id: { $in: offerIds },
27
+ project: { id: { $eq: params.project.id } }
28
+ });
29
+ }
30
+ // 利用可能なチケットオファーであれば受け入れる
31
+ const acceptedOffers = params.object.acceptedOffer.map((acceptedOffer) => {
32
+ var _a, _b, _c, _d, _e, _f;
33
+ const availableUnitPriceOffer = availableUnitPriceOffers.find((unitPriceOffer) => unitPriceOffer.id === acceptedOffer.id);
34
+ if (availableUnitPriceOffer === undefined) {
35
+ throw new factory.errors.NotFound(factory.offerType.Offer, `${acceptedOffer.identifier} not found`);
36
+ }
37
+ const { additionalProperty, itemOffered, name, price, priceSpecification, ticketInfo } = acceptedOffer;
38
+ return Object.assign(Object.assign({ additionalProperty,
39
+ itemOffered,
40
+ name,
41
+ price,
42
+ priceSpecification,
43
+ ticketInfo,
44
+ // 以下属性については単価オファーから読む(2023-03-09~)
45
+ priceCurrency: availableUnitPriceOffer.priceCurrency, id: String(availableUnitPriceOffer.id), identifier: String(availableUnitPriceOffer.identifier), typeOf: availableUnitPriceOffer.typeOf }, (Array.isArray(availableUnitPriceOffer.eligibleMonetaryAmount))
46
+ ? { eligibleMonetaryAmount: availableUnitPriceOffer.eligibleMonetaryAmount }
47
+ : undefined), {
48
+ // tslint:disable-next-line:no-suspicious-comment
49
+ // TODO itemOfferedに完全置き換え
50
+ seatNumber: (_c = (_b = (_a = itemOffered.serviceOutput) === null || _a === void 0 ? void 0 : _a.reservedTicket) === null || _b === void 0 ? void 0 : _b.ticketedSeat) === null || _c === void 0 ? void 0 : _c.seatNumber,
51
+ // tslint:disable-next-line:no-suspicious-comment
52
+ // TODO itemOfferedに完全置き換え
53
+ seatSection: (_f = (_e = (_d = itemOffered.serviceOutput) === null || _d === void 0 ? void 0 : _d.reservedTicket) === null || _e === void 0 ? void 0 : _e.ticketedSeat) === null || _f === void 0 ? void 0 : _f.seatSection
54
+ });
55
+ });
56
+ return { acceptedOffers };
57
+ });
58
+ }
59
+ exports.validateAcceptedOffers = validateAcceptedOffers;
@@ -1,11 +1,14 @@
1
1
  import { MongoRepository as ActionRepo } from '../../repo/action';
2
2
  import { MongoRepository as EventRepo } from '../../repo/event';
3
+ import { MongoRepository as OfferRepo } from '../../repo/offer';
3
4
  import { MongoRepository as TransactionRepo } from '../../repo/transaction';
5
+ import { IAcceptedOffer4COA } from './eventServiceByCOA/factory';
4
6
  import * as factory from '../../factory';
5
7
  export import WebAPIIdentifier = factory.service.webAPI.Identifier;
6
8
  export declare type IAuthorizeOperation<T> = (repos: {
7
9
  action: ActionRepo;
8
10
  event: EventRepo;
11
+ offer: OfferRepo;
9
12
  transaction: TransactionRepo;
10
13
  }) => Promise<T>;
11
14
  export declare type IAuthorizeOfferAction = factory.action.authorize.offer.seatReservation.IAction<WebAPIIdentifier.COA>;
@@ -14,7 +17,7 @@ export declare type IAuthorizeOfferAction = factory.action.authorize.offer.seatR
14
17
  */
15
18
  export declare function authorize(params: {
16
19
  object: {
17
- acceptedOffer: factory.action.authorize.offer.seatReservation.IAcceptedOffer<WebAPIIdentifier.COA>[];
20
+ acceptedOffer: IAcceptedOffer4COA[];
18
21
  event: {
19
22
  id: string;
20
23
  };
@@ -68,7 +71,7 @@ export declare function cancel(params: {
68
71
  export declare function changeOffers(params: {
69
72
  id: string;
70
73
  object: {
71
- acceptedOffer: factory.action.authorize.offer.seatReservation.IAcceptedOffer<WebAPIIdentifier.COA>[];
74
+ acceptedOffer: IAcceptedOffer4COA[];
72
75
  event: {
73
76
  id: string;
74
77
  };
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.changeOffers = exports.cancel = exports.authorize = exports.WebAPIIdentifier = void 0;
13
13
  const moment = require("moment");
14
14
  const factory_1 = require("./eventServiceByCOA/factory");
15
+ const validateAcceptedOffers_1 = require("./eventServiceByCOA/validateAcceptedOffers");
15
16
  const factory = require("../../factory");
16
17
  exports.WebAPIIdentifier = factory.service.webAPI.Identifier;
17
18
  /**
@@ -33,12 +34,17 @@ function authorize(params) {
33
34
  id: params.object.event.id
34
35
  });
35
36
  // COA仮予約後にリクエストが来る前提
36
- const acceptedOffer = params.object.acceptedOffer;
37
+ // validate acceptedOffer(2023-03-09~)
38
+ // const acceptedOffer = params.object.acceptedOffer;
39
+ const { acceptedOffers } = yield (0, validateAcceptedOffers_1.validateAcceptedOffers)({
40
+ object: params.object,
41
+ project: { id: transaction.project.id }
42
+ })(repos);
37
43
  const updTmpReserveSeatArgs = params.result.requestBody;
38
44
  const updTmpReserveSeatResult = params.result.responseBody;
39
45
  // 承認アクションを開始
40
46
  const actionAttributes = (0, factory_1.createAuthorizeSeatReservationActionAttributes)({
41
- acceptedOffers: acceptedOffer,
47
+ acceptedOffers,
42
48
  event: screeningEvent,
43
49
  transaction: transaction
44
50
  });
@@ -57,7 +63,7 @@ function authorize(params) {
57
63
  throw error;
58
64
  }
59
65
  // 座席仮予約からオファー情報を生成する
60
- const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffer);
66
+ const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffers);
61
67
  const acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
62
68
  responseBody: updTmpReserveSeatResult,
63
69
  object: action.object,
@@ -113,15 +119,6 @@ function cancel(params) {
113
119
  timeBegin: actionResult.requestBody.timeBegin,
114
120
  tmpReserveNum: actionResult.responseBody.tmpReserveNum
115
121
  };
116
- // 座席仮予約削除
117
- // await repos.reserveService.delTmpReserve({
118
- // theaterCode: actionResult.requestBody.theaterCode,
119
- // dateJouei: actionResult.requestBody.dateJouei,
120
- // titleCode: actionResult.requestBody.titleCode,
121
- // titleBranchNum: actionResult.requestBody.titleBranchNum,
122
- // timeBegin: actionResult.requestBody.timeBegin,
123
- // tmpReserveNum: actionResult.responseBody.tmpReserveNum
124
- // });
125
122
  }
126
123
  return cancelResult;
127
124
  });
@@ -153,14 +150,19 @@ function changeOffers(params) {
153
150
  id: params.object.event.id
154
151
  });
155
152
  // COA仮予約後にリクエストが来る前提
156
- const acceptedOffer = params.object.acceptedOffer;
153
+ // validate acceptedOffer(2023-03-09~)
154
+ // const acceptedOffer = params.object.acceptedOffer;
155
+ const { acceptedOffers } = yield (0, validateAcceptedOffers_1.validateAcceptedOffers)({
156
+ object: params.object,
157
+ project: { id: transaction.project.id }
158
+ })(repos);
157
159
  // 供給情報と価格を変更してからDB更新
158
- authorizeAction.object.acceptedOffer = acceptedOffer;
160
+ authorizeAction.object.acceptedOffer = acceptedOffers;
159
161
  const updTmpReserveSeatResult = (_a = authorizeAction.result) === null || _a === void 0 ? void 0 : _a.responseBody;
160
162
  if (updTmpReserveSeatResult === undefined) {
161
163
  throw new factory.errors.NotFound('action.result.responseBody');
162
164
  }
163
- const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffer);
165
+ const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffers);
164
166
  const acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
165
167
  responseBody: updTmpReserveSeatResult,
166
168
  object: authorizeAction.object,
@@ -78,7 +78,9 @@ function validateMovieTicket(params, paymentServiceId) {
78
78
  throw new factory.errors.Argument('movieTickets', `${shortNumber} movie tickets by service type ${serviceType} short`);
79
79
  }
80
80
  });
81
- return checkResult;
81
+ // checkはするが保管は保留(2023-03-09~)
82
+ return;
83
+ // return checkResult;
82
84
  });
83
85
  }
84
86
  exports.validateMovieTicket = validateMovieTicket;
@@ -69,9 +69,8 @@ function checkMovieTicket(params) {
69
69
  paymentServiceId
70
70
  })(repos);
71
71
  // 一度認証されたMovieTicketをDBに記録する(後で検索しやすいように)→一旦保留
72
- yield Promise.all(checkResult.movieTickets.map((__) => __awaiter(this, void 0, void 0, function* () {
73
- // no op
74
- })));
72
+ // await Promise.all(checkResult.movieTickets.map(async (__) => {
73
+ // }));
75
74
  }
76
75
  catch (error) {
77
76
  // actionにエラー結果を追加
package/package.json CHANGED
@@ -9,8 +9,8 @@
9
9
  }
10
10
  ],
11
11
  "dependencies": {
12
- "@chevre/factory": "4.298.0",
13
- "@cinerino/sdk": "3.146.0",
12
+ "@chevre/factory": "4.299.0",
13
+ "@cinerino/sdk": "3.148.0",
14
14
  "@motionpicture/coa-service": "9.2.0",
15
15
  "@motionpicture/gmo-service": "5.2.0",
16
16
  "@sendgrid/mail": "6.4.0",
@@ -120,5 +120,5 @@
120
120
  "postversion": "git push origin --tags",
121
121
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
122
122
  },
123
- "version": "20.7.0-alpha.0"
123
+ "version": "20.7.0-alpha.2"
124
124
  }