@chevre/domain 22.14.0-alpha.3 → 22.14.0-alpha.30

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/{createEventBySchedule.ts → addEventBySchedule.ts} +2 -2
  2. package/example/src/chevre/authorizeEventServiceOffer.ts +119 -0
  3. package/example/src/chevre/findReservationByCode.ts +0 -1
  4. package/example/src/chevre/productOffer/publishMemberTierToken.ts +92 -0
  5. package/example/src/chevre/reIndex.ts +3 -1
  6. package/example/src/chevre/roles/addAdminProductOfferPermissionIfNotExists.ts +48 -0
  7. package/example/src/chevre/roles/removeConsolePermissionIfExists.ts +1 -2
  8. package/lib/chevre/repo/accountingReport.d.ts +4 -4
  9. package/lib/chevre/repo/accountingReport.js +1 -1
  10. package/lib/chevre/repo/action.d.ts +1 -1
  11. package/lib/chevre/repo/creativeWork.d.ts +1 -3
  12. package/lib/chevre/repo/creativeWork.js +65 -47
  13. package/lib/chevre/repo/event.js +1 -7
  14. package/lib/chevre/repo/mongoose/schemas/accountingReport.d.ts +2 -15
  15. package/lib/chevre/repo/mongoose/schemas/place.js +13 -14
  16. package/lib/chevre/repo/mongoose/schemas/product.js +14 -4
  17. package/lib/chevre/repo/mongoose/schemas/{offer/event.d.ts → productOffer.d.ts} +6 -3
  18. package/lib/chevre/repo/mongoose/schemas/{offer/event.js → productOffer.js} +26 -29
  19. package/lib/chevre/repo/mongoose/schemas/seller.js +17 -6
  20. package/lib/chevre/repo/productOffer.d.ts +36 -61
  21. package/lib/chevre/repo/productOffer.js +163 -157
  22. package/lib/chevre/repo/task.js +2 -2
  23. package/lib/chevre/repository.d.ts +0 -5
  24. package/lib/chevre/repository.js +2 -15
  25. package/lib/chevre/service/assetTransaction/reserve/start/createSubReservations.d.ts +0 -2
  26. package/lib/chevre/service/assetTransaction/reserve/start.d.ts +0 -2
  27. package/lib/chevre/service/assetTransaction/reserve/start.js +2 -2
  28. package/lib/chevre/service/assetTransaction/reserve/validateStartRequest.d.ts +2 -2
  29. package/lib/chevre/service/assetTransaction/reserve/validateStartRequest.js +57 -32
  30. package/lib/chevre/service/event.js +10 -2
  31. package/lib/chevre/service/offer/event/authorize/factory.d.ts +1 -1
  32. package/lib/chevre/service/offer/event/authorize/factory.js +2 -2
  33. package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.d.ts +1 -3
  34. package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.js +2 -2
  35. package/lib/chevre/service/offer/event/authorize.d.ts +0 -2
  36. package/lib/chevre/service/offer/event/authorize.js +2 -2
  37. package/lib/chevre/service/offer/product.d.ts +0 -3
  38. package/lib/chevre/service/offer/product.js +29 -38
  39. package/lib/chevre/service/order/createAccountingReportIfNotExist.js +0 -1
  40. package/lib/chevre/service/order/onOrderStatusChanged/onOrderPaymentDue.js +2 -2
  41. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/factory.js +1 -1
  42. package/lib/chevre/service/reserve/useReservation.js +2 -3
  43. package/lib/chevre/service/reserve/verifyToken4reservation.d.ts +0 -2
  44. package/lib/chevre/service/task/checkResource.d.ts +2 -2
  45. package/lib/chevre/service/task/checkResource.js +8 -6
  46. package/lib/chevre/service/task/createAccountingReport.d.ts +2 -2
  47. package/lib/chevre/service/task/createAccountingReport.js +15 -15
  48. package/lib/chevre/service/task/createEvent/createEventBySchedule.d.ts +1 -1
  49. package/lib/chevre/service/task/createEvent/createEventBySchedule.js +3 -2
  50. package/lib/chevre/service/task/createEvent/createEventSeries.d.ts +1 -1
  51. package/lib/chevre/service/task/deletePerson.js +11 -10
  52. package/lib/chevre/service/task/onResourceUpdated/onResourceDeleted.js +7 -6
  53. package/lib/chevre/service/task/useReservation.js +1 -2
  54. package/lib/chevre/service/taskHandler.js +2 -0
  55. package/lib/chevre/service/transaction/deleteTransaction.js +9 -9
  56. package/lib/chevre/service/transaction/moneyTransfer/exportTasks/factory.js +1 -1
  57. package/lib/chevre/service/transaction/placeOrder/exportTasks/factory.js +1 -1
  58. package/lib/chevre/service/transaction/returnOrder/exportTasks/factory.js +1 -1
  59. package/lib/chevre/service/transaction/returnOrder/potentialActions/returnPointAward.d.ts +0 -1
  60. package/package.json +3 -3
  61. package/example/src/chevre/eventOffer/adminEventOffers.ts +0 -67
  62. package/example/src/chevre/migrateDeleteTransactionTasks.ts +0 -132
  63. package/example/src/chevre/optimizeDeleteTransactionTasks.ts +0 -119
  64. package/example/src/chevre/roles/addPermissionIfNotExists.ts +0 -48
  65. package/example/src/chevre/upsertMoviesByIdentifier.ts +0 -58
  66. package/lib/chevre/repo/offer/event.d.ts +0 -38
  67. package/lib/chevre/repo/offer/event.js +0 -142
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Person = exports.paymentMethod = exports.PendingReservation = exports.PaymentServiceProvider = exports.PaymentServiceChannel = exports.PaymentService = exports.Passport = exports.OwnershipInfo = exports.OrderNumber = exports.OrderInTransaction = exports.Order = exports.Offer = exports.OfferItemCondition = exports.OfferCatalogItem = exports.OfferCatalog = exports.NoteAboutOrder = exports.Note = exports.Message = exports.MerchantReturnPolicy = exports.MemberProgram = exports.Member = exports.Issuer = exports.IdentityProvider = exports.Identity = exports.EventSeries = exports.EventSellerMakesOffer = exports.EventOffer = exports.Event = exports.EmailMessage = exports.CustomerType = exports.Customer = exports.Credentials = exports.CreativeWork = exports.ConfirmationNumber = exports.Comment = exports.Authorization = exports.CategoryCode = exports.AssetTransaction = exports.Aggregation = exports.AggregateReservation = exports.AggregateOrder = exports.AggregateOffer = exports.AdvanceBookingRequirement = exports.AdditionalProperty = exports.Action = exports.AccountTransaction = exports.AccountTitle = exports.AccountingReport = exports.Account = exports.AcceptedOffer = void 0;
13
- exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.Transaction = exports.Ticket = exports.Telemetry = exports.Task = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceOutputIdentifier = exports.ServiceOutput = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductOffer = exports.ProductModel = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Permit = void 0;
12
+ exports.Permit = exports.Person = exports.paymentMethod = exports.PendingReservation = exports.PaymentServiceProvider = exports.PaymentServiceChannel = exports.PaymentService = exports.Passport = exports.OwnershipInfo = exports.OrderNumber = exports.OrderInTransaction = exports.Order = exports.Offer = exports.OfferItemCondition = exports.OfferCatalogItem = exports.OfferCatalog = exports.NoteAboutOrder = exports.Note = exports.Message = exports.MerchantReturnPolicy = exports.MemberProgram = exports.Member = exports.Issuer = exports.IdentityProvider = exports.Identity = exports.EventSeries = exports.EventSellerMakesOffer = exports.Event = exports.EmailMessage = exports.CustomerType = exports.Customer = exports.Credentials = exports.CreativeWork = exports.ConfirmationNumber = exports.Comment = exports.Authorization = exports.CategoryCode = exports.AssetTransaction = exports.Aggregation = exports.AggregateReservation = exports.AggregateOrder = exports.AggregateOffer = exports.AdvanceBookingRequirement = exports.AdditionalProperty = exports.Action = exports.AccountTransaction = exports.AccountTitle = exports.AccountingReport = exports.Account = exports.AcceptedOffer = void 0;
13
+ exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.Transaction = exports.Ticket = exports.Telemetry = exports.Task = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceOutputIdentifier = exports.ServiceOutput = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductOffer = exports.ProductModel = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = void 0;
14
14
  var AcceptedOffer;
15
15
  (function (AcceptedOffer) {
16
16
  let repo;
@@ -310,19 +310,6 @@ var Event;
310
310
  }
311
311
  Event.createInstance = createInstance;
312
312
  })(Event || (exports.Event = Event = {}));
313
- var EventOffer;
314
- (function (EventOffer) {
315
- let repo;
316
- function createInstance(...params) {
317
- return __awaiter(this, void 0, void 0, function* () {
318
- if (repo === undefined) {
319
- repo = (yield Promise.resolve().then(() => require('./repo/offer/event'))).EventOfferRepo;
320
- }
321
- return new repo(...params);
322
- });
323
- }
324
- EventOffer.createInstance = createInstance;
325
- })(EventOffer || (exports.EventOffer = EventOffer = {}));
326
313
  var EventSellerMakesOffer;
327
314
  (function (EventSellerMakesOffer) {
328
315
  let repo;
@@ -5,7 +5,6 @@ import type { OfferRepo } from '../../../../repo/offer/unitPriceInCatalog';
5
5
  import type { OfferCatalogRepo } from '../../../../repo/offerCatalog';
6
6
  import type { PaymentServiceRepo } from '../../../../repo/paymentService';
7
7
  import type { ProductRepo } from '../../../../repo/product';
8
- import type { ProductOfferRepo } from '../../../../repo/productOffer';
9
8
  type IObjectSubReservation = factory.assetTransaction.reserve.IObjectSubReservation;
10
9
  declare function createSubReservations(params: {
11
10
  acceptedOffers: factory.assetTransaction.reserve.IAcceptedTicketOfferWithoutDetail[];
@@ -25,6 +24,5 @@ declare function createSubReservations(params: {
25
24
  offerCatalog: OfferCatalogRepo;
26
25
  paymentService: PaymentServiceRepo;
27
26
  product: ProductRepo;
28
- productOffer: ProductOfferRepo;
29
27
  }) => Promise<IObjectSubReservation[]>;
30
28
  export { createSubReservations };
@@ -6,7 +6,6 @@ import type { EventRepo } from '../../../repo/event';
6
6
  import type { EventSeriesRepo } from '../../../repo/eventSeries';
7
7
  import type { IssuerRepo } from '../../../repo/issuer';
8
8
  import type { MemberProgramRepo } from '../../../repo/memberProgram';
9
- import type { EventOfferRepo } from '../../../repo/offer/event';
10
9
  import type { OfferRepo } from '../../../repo/offer/unitPriceInCatalog';
11
10
  import type { OfferCatalogRepo } from '../../../repo/offerCatalog';
12
11
  import type { OfferCatalogItemRepo } from '../../../repo/offerCatalogItem';
@@ -24,7 +23,6 @@ interface IStartOperationRepos {
24
23
  advanceBookingRequirement: AdvanceBookingRequirementRepo;
25
24
  stockHolder: StockHolderRepo;
26
25
  event: EventRepo;
27
- eventOffer: EventOfferRepo;
28
26
  eventSeries: EventSeriesRepo;
29
27
  issuer: IssuerRepo;
30
28
  memberProgram: MemberProgramRepo;
@@ -47,9 +47,9 @@ function start(params, options) {
47
47
  now,
48
48
  store: { id: (_a = params.availableAtOrFrom) === null || _a === void 0 ? void 0 : _a.id }
49
49
  })({
50
- eventOffer: repos.eventOffer,
51
50
  issuer: repos.issuer,
52
- memberProgram: repos.memberProgram
51
+ memberProgram: repos.memberProgram,
52
+ productOffer: repos.productOffer
53
53
  });
54
54
  // objectに必要な情報をそろえる
55
55
  const { acceptedOffers4transactionObject, objectSubReservations } = yield createObjectAttributes({
@@ -2,7 +2,7 @@ import * as factory from '../../../factory';
2
2
  import { IMinimizedIndividualEvent } from '../../../factory/event';
3
3
  import type { IssuerRepo } from '../../../repo/issuer';
4
4
  import type { MemberProgramRepo } from '../../../repo/memberProgram';
5
- import type { EventOfferRepo } from '../../../repo/offer/event';
5
+ import type { ProductOfferRepo } from '../../../repo/productOffer';
6
6
  declare function validateStartRequest(params: {
7
7
  object: factory.assetTransaction.reserve.IObjectWithoutDetail;
8
8
  event: Pick<IMinimizedIndividualEvent<factory.eventType.Event | factory.eventType.ScreeningEvent>, 'offers' | 'id' | 'project'>;
@@ -16,8 +16,8 @@ declare function validateStartRequest(params: {
16
16
  id?: string;
17
17
  };
18
18
  }): (repos: {
19
- eventOffer: EventOfferRepo;
20
19
  issuer: IssuerRepo;
21
20
  memberProgram: MemberProgramRepo;
21
+ productOffer: ProductOfferRepo;
22
22
  }) => Promise<void>;
23
23
  export { validateStartRequest };
@@ -13,7 +13,6 @@ exports.validateStartRequest = validateStartRequest;
13
13
  const jwt = require("jsonwebtoken");
14
14
  const moment = require("moment");
15
15
  const factory = require("../../../factory");
16
- const ROLE_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';
17
16
  function verifyOfferedByToken(params) {
18
17
  return __awaiter(this, void 0, void 0, function* () {
19
18
  let result;
@@ -55,9 +54,9 @@ function validateStartRequest(params) {
55
54
  if (typeof ((_a = params.store) === null || _a === void 0 ? void 0 : _a.id) !== 'string') {
56
55
  throw new factory.errors.NotFound('store.id');
57
56
  }
58
- const validForMemberTierToken = (_c = (_b = params.object.reservationFor) === null || _b === void 0 ? void 0 : _b.offers) === null || _c === void 0 ? void 0 : _c.validForMemberTier;
57
+ const tokenizedMemberProgramTier = (_c = (_b = params.object.reservationFor) === null || _b === void 0 ? void 0 : _b.offers) === null || _c === void 0 ? void 0 : _c.validForMemberTier;
59
58
  yield validateEventOfferPeriod(Object.assign({ event,
60
- now, availableAt: { id: params.store.id } }, (typeof validForMemberTierToken === 'string') ? { validForMemberTierToken } : undefined))(repos);
59
+ now, availableAt: { id: params.store.id } }, (typeof (tokenizedMemberProgramTier === null || tokenizedMemberProgramTier === void 0 ? void 0 : tokenizedMemberProgramTier.token) === 'string') ? { tokenizedMemberProgramTier } : undefined))(repos);
61
60
  }
62
61
  if (params.validateEvent === true) {
63
62
  validateEvent({ event, object: params.object });
@@ -67,7 +66,7 @@ function validateStartRequest(params) {
67
66
  function validateMemberTier(params) {
68
67
  return (repos) => __awaiter(this, void 0, void 0, function* () {
69
68
  var _a, _b, _c, _d, _e;
70
- const { acceptedDate, event, availableAt, verifiedValidForMemberTier, memberProgramIdentifierMustBe } = params;
69
+ const { acceptedDate, event, verifiedValidForMemberTier, memberProgramIdentifierMustBe, aggregateOfferIdentifier } = params;
71
70
  const tierIdentifier = (_b = (_a = verifiedValidForMemberTier.member) === null || _a === void 0 ? void 0 : _a.memberOf) === null || _b === void 0 ? void 0 : _b.identifier;
72
71
  const memberProgramIdentifier = (_e = (_d = (_c = verifiedValidForMemberTier.member) === null || _c === void 0 ? void 0 : _c.memberOf) === null || _d === void 0 ? void 0 : _d.isTierOf) === null || _e === void 0 ? void 0 : _e.identifier;
73
72
  if (typeof tierIdentifier !== 'string') {
@@ -79,28 +78,41 @@ function validateMemberTier(params) {
79
78
  if (memberProgramIdentifier !== memberProgramIdentifierMustBe) {
80
79
  throw new factory.errors.Argument('reservationFor.offers.validForMemberTier', 'member program not matched');
81
80
  }
82
- // イベントオファーを検索して有効期間検証
83
- const eventOfferForMemberTier = (yield repos.eventOffer.projectFields({
81
+ const sellerId = event.offers.seller.id;
82
+ if (typeof sellerId !== 'string' || sellerId === '') {
83
+ throw new factory.errors.NotFound('event.offers.seller.id');
84
+ }
85
+ // 有効なプロダクトオファーを検証
86
+ const productOfferForMemberTier = (yield repos.productOffer.findProductOffers({
84
87
  limit: 1,
85
88
  page: 1,
86
89
  project: { id: { $eq: event.project.id } },
87
- availableAtOrFrom: { id: { $eq: availableAt.id } },
88
- itemOffered: { id: { $eq: event.id } },
89
- validForMemberTier: { identifier: { $eq: tierIdentifier } }
90
- }, ['validFrom', 'validThrough'])).shift();
91
- if (eventOfferForMemberTier === undefined) {
92
- throw new factory.errors.NotFound(factory.offerType.Offer, 'event offer for member tier not found');
93
- }
94
- let validThroughMoment;
95
- let validFromMoment;
96
- validThroughMoment = moment(eventOfferForMemberTier.validThrough, ROLE_DATE_FORMAT, true);
97
- validFromMoment = moment(eventOfferForMemberTier.validFrom, ROLE_DATE_FORMAT, true);
98
- if (acceptedDate.isBefore(validFromMoment)) {
99
- throw new factory.errors.Argument('reservationFor.offers.validForMemberTier', `the offer id valid from ${validFromMoment}`);
100
- }
101
- if (acceptedDate.isAfter(validThroughMoment)) {
102
- throw new factory.errors.Argument('reservationFor.offers.validForMemberTier', `the offer id valid through ${validThroughMoment}`);
90
+ // availableAtOrFrom: { id: { $eq: availableAt.id } },
91
+ itemOffered: { identifier: { $eq: aggregateOfferIdentifier } }, // オファーコレクションコード
92
+ validForMemberTier: { identifier: { $eq: tierIdentifier } },
93
+ validFrom: { $lte: acceptedDate.toDate() },
94
+ validThrough: { $gte: acceptedDate.toDate() },
95
+ offeredBy: { id: { $eq: sellerId } } // オファー提供者も検証する
96
+ }, ['identifier'])).shift();
97
+ if (productOfferForMemberTier === undefined) {
98
+ throw new factory.errors.NotFound(factory.offerType.Offer, 'valid product offers for member tier not found');
103
99
  }
100
+ // let validThroughMoment: moment.Moment;
101
+ // let validFromMoment: moment.Moment;
102
+ // validThroughMoment = moment(productOfferForMemberTier.validThrough, ROLE_DATE_FORMAT, true);
103
+ // validFromMoment = moment(productOfferForMemberTier.validFrom, ROLE_DATE_FORMAT, true);
104
+ // if (acceptedDate.isBefore(validFromMoment)) {
105
+ // throw new factory.errors.Argument(
106
+ // 'reservationFor.offers.validForMemberTier',
107
+ // `the offer id valid from ${validFromMoment}`
108
+ // );
109
+ // }
110
+ // if (acceptedDate.isAfter(validThroughMoment)) {
111
+ // throw new factory.errors.Argument(
112
+ // 'reservationFor.offers.validForMemberTier',
113
+ // `the offer id valid through ${validThroughMoment}`
114
+ // );
115
+ // }
104
116
  });
105
117
  }
106
118
  /**
@@ -109,18 +121,18 @@ function validateMemberTier(params) {
109
121
  function validateEventOfferPeriod(params) {
110
122
  return (repos) => __awaiter(this, void 0, void 0, function* () {
111
123
  var _a, _b;
112
- const { event, availableAt, validForMemberTierToken } = params;
124
+ const { event, availableAt, tokenizedMemberProgramTier } = params;
113
125
  const acceptedDate = moment(params.now);
114
126
  const eventOffers = event.offers;
115
127
  // アプリケーションごとの設定を参照する(2022-11-19~)
116
128
  const makesOfferOnApplication = eventOffers === null || eventOffers === void 0 ? void 0 : eventOffers.seller.makesOffer.find((offer) => {
117
129
  var _a, _b;
118
130
  // support non-array(2024-10-11~)
119
- return (Array.isArray(offer.availableAtOrFrom) && ((_a = offer.availableAtOrFrom.at(0)) === null || _a === void 0 ? void 0 : _a.id) === params.availableAt.id)
120
- || (!Array.isArray(offer.availableAtOrFrom) && ((_b = offer.availableAtOrFrom) === null || _b === void 0 ? void 0 : _b.id) === params.availableAt.id);
131
+ return (Array.isArray(offer.availableAtOrFrom) && ((_a = offer.availableAtOrFrom.at(0)) === null || _a === void 0 ? void 0 : _a.id) === availableAt.id)
132
+ || (!Array.isArray(offer.availableAtOrFrom) && ((_b = offer.availableAtOrFrom) === null || _b === void 0 ? void 0 : _b.id) === availableAt.id);
121
133
  });
122
134
  if (makesOfferOnApplication === undefined) {
123
- throw new factory.errors.Argument('reservationFor.id', `seller makes no available offer at ${params.availableAt.id}`);
135
+ throw new factory.errors.Argument('reservationFor.id', `seller makes no available offer at ${availableAt.id}`);
124
136
  }
125
137
  const validFrom = makesOfferOnApplication.validFrom;
126
138
  const validThrough = makesOfferOnApplication.validThrough;
@@ -136,11 +148,24 @@ function validateEventOfferPeriod(params) {
136
148
  throw new factory.errors.Argument('reservationFor.id', `Offer of ${params.event.id} is valid through ${validThrough}`);
137
149
  }
138
150
  }
151
+ // 有効メンバープログラムティアが存在する場合
139
152
  // support validForMemberTier(2025-05-14~)
140
- const memberProgramIdentifierMustBe = (_b = (_a = makesOfferOnApplication.validForMemberTier) === null || _a === void 0 ? void 0 : _a.isTierOf) === null || _b === void 0 ? void 0 : _b.identifier;
141
- if (typeof memberProgramIdentifierMustBe === 'string') {
153
+ const validForMemberTierExists = ((_a = makesOfferOnApplication.validForMemberTier) === null || _a === void 0 ? void 0 : _a.typeOf) === 'MemberProgramTier';
154
+ if (validForMemberTierExists) {
155
+ const validForMemberTierToken = tokenizedMemberProgramTier === null || tokenizedMemberProgramTier === void 0 ? void 0 : tokenizedMemberProgramTier.token;
156
+ const memberProgramIdentifierMustBe = (_b = tokenizedMemberProgramTier === null || tokenizedMemberProgramTier === void 0 ? void 0 : tokenizedMemberProgramTier.isTierOf) === null || _b === void 0 ? void 0 : _b.identifier;
157
+ // ティアトークンが必須
142
158
  if (typeof validForMemberTierToken !== 'string' || validForMemberTierToken === '') {
143
- throw new factory.errors.ArgumentNull('reservationFor.offers.validForMemberTier');
159
+ throw new factory.errors.ArgumentNull('reservationFor.offers.validForMemberTier.token');
160
+ }
161
+ // メンバープログラムコード指定が必須
162
+ if (typeof memberProgramIdentifierMustBe !== 'string' || memberProgramIdentifierMustBe === '') {
163
+ throw new factory.errors.ArgumentNull('reservationFor.offers.validForMemberTier.isTierOf.identifier');
164
+ }
165
+ // 有効メンバープログラムティアが存在する場合、オファーコレクションコードが必須
166
+ const aggregateOfferIdentifier = eventOffers.identifier;
167
+ if (typeof aggregateOfferIdentifier !== 'string' || aggregateOfferIdentifier === '') {
168
+ throw new factory.errors.NotFound('makesOfferOnApplication.identifier');
144
169
  }
145
170
  // トークン検証
146
171
  const memberProgram = (yield repos.memberProgram.projectMemberPrograms({
@@ -150,7 +175,7 @@ function validateEventOfferPeriod(params) {
150
175
  identifier: { $eq: memberProgramIdentifierMustBe }
151
176
  })).shift();
152
177
  if (memberProgram === undefined) {
153
- throw new factory.errors.NotFound('MemberProgram');
178
+ throw new factory.errors.NotFound('MemberProgram', `MemberProgram '${memberProgramIdentifierMustBe}' not found`);
154
179
  }
155
180
  const issuer = yield repos.issuer.findByIdentifier({
156
181
  project: { id: params.event.project.id },
@@ -165,8 +190,8 @@ function validateEventOfferPeriod(params) {
165
190
  token: validForMemberTierToken
166
191
  });
167
192
  yield validateMemberTier({
168
- event, availableAt, acceptedDate, verifiedValidForMemberTier,
169
- memberProgramIdentifierMustBe
193
+ event, acceptedDate, verifiedValidForMemberTier,
194
+ memberProgramIdentifierMustBe, aggregateOfferIdentifier
170
195
  })(repos);
171
196
  }
172
197
  });
@@ -63,7 +63,8 @@ function importFromCOA(params) {
63
63
  object: Object.assign(Object.assign({}, params), { startDate: `${moment(targetImportFrom) // debug(2024-04-26~)
64
64
  .toISOString()}/${moment(targetImportThrough)
65
65
  .toISOString()}`, superEvent: { location: { branchCode: params.locationBranchCode } }, typeOf: factory.eventType.ScreeningEvent }),
66
- instrument
66
+ instrument,
67
+ targetCollection: { typeOf: factory.eventType.ScreeningEvent }
67
68
  };
68
69
  const action = yield repos.action.start(actionAttributes);
69
70
  let savedScreeningEventsCount = 0;
@@ -150,7 +151,8 @@ function processUpdateMovieTheater(params) {
150
151
  theaterCode: params.locationBranchCode,
151
152
  typeOf: 'WebAPI',
152
153
  identifier: factory.service.webAPI.Identifier.COA
153
- }
154
+ },
155
+ targetCollection: { typeOf: factory.placeType.MovieTheater }
154
156
  };
155
157
  const action = yield repos.action.start(actionAttributes);
156
158
  let seller;
@@ -345,6 +347,12 @@ function createScreeningEvents(params) {
345
347
  // tslint:disable-next-line:max-func-body-length
346
348
  return (repos) => __awaiter(this, void 0, void 0, function* () {
347
349
  const project = params.project;
350
+ if (typeof params.instrument.begin !== 'string') {
351
+ throw new factory.errors.ArgumentNull('instrument.begin');
352
+ }
353
+ if (typeof params.instrument.end !== 'string') {
354
+ throw new factory.errors.ArgumentNull('instrument.end');
355
+ }
348
356
  // COAからイベント取得;
349
357
  const schedulesFromCOA = yield repos.masterService.schedule({
350
358
  theaterCode: params.instrument.theaterCode,
@@ -8,7 +8,7 @@ declare function createReserveTransactionStartParams(params: {
8
8
  event: {
9
9
  id: string;
10
10
  offers?: {
11
- validForMemberTier?: string;
11
+ validForMemberTier?: factory.assetTransaction.reserve.ITokenizedMemberProgramTier;
12
12
  };
13
13
  };
14
14
  broker?: factory.reservation.IBroker<factory.reservationType>;
@@ -48,8 +48,8 @@ function createReserveTransactionStartParams(params) {
48
48
  // }
49
49
  // ]
50
50
  };
51
- const validForMemberTierToken = (_b = params.event.offers) === null || _b === void 0 ? void 0 : _b.validForMemberTier;
52
- const object = Object.assign({ acceptedOffer: acceptedTicketOffersWithoutDetail, reservationFor: Object.assign({ id: params.event.id }, (typeof validForMemberTierToken === 'string') ? { offers: { validForMemberTier: validForMemberTierToken } } : undefined) }, (params.broker !== undefined) ? { broker: params.broker } : undefined);
51
+ const validForMemberTier = (_b = params.event.offers) === null || _b === void 0 ? void 0 : _b.validForMemberTier;
52
+ const object = Object.assign({ acceptedOffer: acceptedTicketOffersWithoutDetail, reservationFor: Object.assign({ id: params.event.id }, (typeof (validForMemberTier === null || validForMemberTier === void 0 ? void 0 : validForMemberTier.token) === 'string') ? { offers: { validForMemberTier } } : undefined) }, (params.broker !== undefined) ? { broker: params.broker } : undefined);
53
53
  return {
54
54
  project: { typeOf: factory.organizationType.Project, id: params.project.id },
55
55
  typeOf: factory.assetTransactionType.Reserve,
@@ -8,7 +8,6 @@ import type { EventRepo, IMinimizedIndividualEvent } from '../../../../repo/even
8
8
  import { EventSeriesRepo } from '../../../../repo/eventSeries';
9
9
  import type { IssuerRepo } from '../../../../repo/issuer';
10
10
  import type { MemberProgramRepo } from '../../../../repo/memberProgram';
11
- import type { EventOfferRepo } from '../../../../repo/offer/event';
12
11
  import type { OfferRepo } from '../../../../repo/offer/unitPriceInCatalog';
13
12
  import type { OfferCatalogRepo } from '../../../../repo/offerCatalog';
14
13
  import type { OfferCatalogItemRepo } from '../../../../repo/offerCatalogItem';
@@ -28,7 +27,7 @@ declare function processStartReserve4chevre(params: {
28
27
  acceptedOffers: factory.assetTransaction.reserve.IAcceptedTicketOfferWithoutDetail[];
29
28
  event: Pick<IMinimizedIndividualEvent<factory.eventType.ScreeningEvent>, 'id'> & {
30
29
  offers?: {
31
- validForMemberTier?: string;
30
+ validForMemberTier?: factory.assetTransaction.reserve.ITokenizedMemberProgramTier;
32
31
  };
33
32
  };
34
33
  broker?: factory.reservation.IBroker<factory.reservationType>;
@@ -53,7 +52,6 @@ declare function processStartReserve4chevre(params: {
53
52
  authorization: AuthorizationRepo;
54
53
  stockHolder: StockHolderRepo;
55
54
  event: EventRepo;
56
- eventOffer: EventOfferRepo;
57
55
  eventSeries: EventSeriesRepo;
58
56
  issuer: IssuerRepo;
59
57
  memberProgram: MemberProgramRepo;
@@ -20,13 +20,13 @@ function processStartReserve4chevre(params, options) {
20
20
  // jwt: JWTCredentials;
21
21
  // }
22
22
  ) => __awaiter(this, void 0, void 0, function* () {
23
- var _a;
23
+ var _a, _b;
24
24
  const { event, transaction, transactionNumber } = params;
25
25
  let acceptedOffers4result = [];
26
26
  // 予約取引開始
27
27
  const startParams = (0, factory_1.createReserveTransactionStartParams)(Object.assign({ project: transaction.project,
28
28
  // object: <IObjectWithDetail>action.object,
29
- acceptedOffers: params.acceptedOffers, event: Object.assign({ id: event.id }, (typeof ((_a = event.offers) === null || _a === void 0 ? void 0 : _a.validForMemberTier) === 'string')
29
+ acceptedOffers: params.acceptedOffers, event: Object.assign({ id: event.id }, (typeof ((_b = (_a = event.offers) === null || _a === void 0 ? void 0 : _a.validForMemberTier) === null || _b === void 0 ? void 0 : _b.token) === 'string')
30
30
  ? { offers: { validForMemberTier: event.offers.validForMemberTier } }
31
31
  : undefined), transaction,
32
32
  transactionNumber }, (params.broker !== undefined) ? { broker: params.broker } : undefined));
@@ -8,7 +8,6 @@ import type { EventRepo } from '../../../repo/event';
8
8
  import { EventSeriesRepo } from '../../../repo/eventSeries';
9
9
  import type { IssuerRepo } from '../../../repo/issuer';
10
10
  import type { MemberProgramRepo } from '../../../repo/memberProgram';
11
- import type { EventOfferRepo } from '../../../repo/offer/event';
12
11
  import type { OfferRepo } from '../../../repo/offer/unitPriceInCatalog';
13
12
  import type { OfferCatalogRepo } from '../../../repo/offerCatalog';
14
13
  import type { OfferCatalogItemRepo } from '../../../repo/offerCatalogItem';
@@ -33,7 +32,6 @@ interface IAuthorizeRepos {
33
32
  assetTransaction: AssetTransactionRepo;
34
33
  authorization: AuthorizationRepo;
35
34
  event: EventRepo;
36
- eventOffer: EventOfferRepo;
37
35
  eventSeries: EventSeriesRepo;
38
36
  issuer: IssuerRepo;
39
37
  memberProgram: MemberProgramRepo;
@@ -99,8 +99,8 @@ function validateCreateRequest(params) {
99
99
  throw new factory.errors.ArgumentNull('object.reservationFor.id');
100
100
  }
101
101
  // support validForMemberTier(2025-05-14~)
102
- const validForMemberTierToken = (_c = params.object.reservationFor.offers) === null || _c === void 0 ? void 0 : _c.validForMemberTier;
103
- const event = Object.assign({ id: params.object.reservationFor.id, typeOf: factory.eventType.ScreeningEvent }, (typeof validForMemberTierToken === 'string') ? { offers: { validForMemberTier: validForMemberTierToken } } : undefined);
102
+ const validForMemberTier = (_c = params.object.reservationFor.offers) === null || _c === void 0 ? void 0 : _c.validForMemberTier;
103
+ const event = Object.assign({ id: params.object.reservationFor.id, typeOf: factory.eventType.ScreeningEvent }, (typeof (validForMemberTier === null || validForMemberTier === void 0 ? void 0 : validForMemberTier.token) === 'string') ? { offers: { validForMemberTier } } : undefined);
104
104
  return { transaction, event };
105
105
  });
106
106
  }
@@ -8,7 +8,6 @@ import type { OrderInTransactionRepo } from '../../repo/orderInTransaction';
8
8
  import type { OrderNumberRepo } from '../../repo/orderNumber';
9
9
  import type { OwnershipInfoRepo } from '../../repo/ownershipInfo';
10
10
  import type { ProductRepo } from '../../repo/product';
11
- import type { ProductOfferRepo } from '../../repo/productOffer';
12
11
  import type { ProjectRepo } from '../../repo/project';
13
12
  import type { ServiceOutputRepo } from '../../repo/serviceOutput';
14
13
  import type { ServiceOutputIdentifierRepo } from '../../repo/serviceOutputIdentifier';
@@ -24,7 +23,6 @@ export interface IAuthorizeOperationRepos {
24
23
  orderNumber: OrderNumberRepo;
25
24
  ownershipInfo: OwnershipInfoRepo;
26
25
  product: ProductRepo;
27
- productOffer: ProductOfferRepo;
28
26
  project: ProjectRepo;
29
27
  serviceOutput: ServiceOutputRepo;
30
28
  serviceOutputIdentifier: ServiceOutputIdentifierRepo;
@@ -65,7 +63,6 @@ export declare function search(params: {
65
63
  offer: OfferRepo;
66
64
  offerCatalog: OfferCatalogRepo;
67
65
  product: ProductRepo;
68
- productOffer: ProductOfferRepo;
69
66
  }) => Promise<{
70
67
  offers: factory.product.ITicketOffer[];
71
68
  product: Pick<factory.product.IProduct, "id" | "productID" | "typeOf" | "name" | "project" | "serviceOutput" | "serviceType" | "description">;
@@ -13,7 +13,6 @@ exports.ERROR_MESSAGE_ALREADY_REGISTERED = void 0;
13
13
  exports.search = search;
14
14
  exports.authorize = authorize;
15
15
  exports.voidTransaction = voidTransaction;
16
- const moment = require("moment");
17
16
  const factory = require("../../factory");
18
17
  const accountTransactionIdentifier_1 = require("../../factory/accountTransactionIdentifier");
19
18
  const availableProductTypes_1 = require("../../factory/availableProductTypes");
@@ -28,8 +27,8 @@ exports.ERROR_MESSAGE_ALREADY_REGISTERED = 'Already registered';
28
27
  */
29
28
  function search(params) {
30
29
  return (repos) => __awaiter(this, void 0, void 0, function* () {
30
+ // const now = moment();
31
31
  var _a;
32
- const now = moment();
33
32
  const searchProductsResult = yield repos.product.projectFields({
34
33
  limit: 1,
35
34
  page: 1,
@@ -47,28 +46,24 @@ function search(params) {
47
46
  || product.typeOf === factory.product.ProductType.PaymentCard) {
48
47
  const sellerId = (_a = params.seller) === null || _a === void 0 ? void 0 : _a.id;
49
48
  if (typeof sellerId === 'string') {
50
- // const productOffers = product.offers;
51
- // if (!Array.isArray(productOffers)) {
49
+ // productsドキュメント参照のoffers検証は廃止(2025-09-22~)
50
+ // const productOffers = await repos.productOffer.search({
51
+ // project: { id: { $eq: params.project.id } },
52
+ // itemOffered: { id: { $eq: params.itemOffered.id } },
53
+ // seller: { id: { $eq: sellerId } }
54
+ // });
55
+ // const hasValidOffer = productOffers.some((o) => {
56
+ // return o.seller?.id === sellerId
57
+ // && o.validFrom !== undefined
58
+ // && moment(o.validFrom)
59
+ // .isSameOrBefore(now)
60
+ // && o.validThrough !== undefined
61
+ // && moment(o.validThrough)
62
+ // .isSameOrAfter(now);
63
+ // });
64
+ // if (!hasValidOffer) {
52
65
  // return { offers: [], product };
53
66
  // }
54
- const productOffers = yield repos.productOffer.search({
55
- project: { id: { $eq: params.project.id } },
56
- itemOffered: { id: { $eq: params.itemOffered.id } },
57
- seller: { id: { $eq: sellerId } }
58
- });
59
- const hasValidOffer = productOffers.some((o) => {
60
- var _a;
61
- return ((_a = o.seller) === null || _a === void 0 ? void 0 : _a.id) === sellerId
62
- && o.validFrom !== undefined
63
- && moment(o.validFrom)
64
- .isSameOrBefore(now)
65
- && o.validThrough !== undefined
66
- && moment(o.validThrough)
67
- .isSameOrAfter(now);
68
- });
69
- if (!hasValidOffer) {
70
- return { offers: [], product };
71
- }
72
67
  }
73
68
  }
74
69
  const offers = yield (0, searchProductOffers_1.searchProductOffers)({
@@ -282,7 +277,7 @@ function processVoidRegisterServiceTransaction(params) {
282
277
  * 受け入れらたオファーの内容を検証
283
278
  */
284
279
  function validateAcceptedOffers(params) {
285
- return (repos) => __awaiter(this, void 0, void 0, function* () {
280
+ return (__) => __awaiter(this, void 0, void 0, function* () {
286
281
  let acceptedOfferWithoutDetail = params.object;
287
282
  if (!Array.isArray(acceptedOfferWithoutDetail)) {
288
283
  acceptedOfferWithoutDetail = [acceptedOfferWithoutDetail];
@@ -297,22 +292,18 @@ function validateAcceptedOffers(params) {
297
292
  typeOf: params.seller.typeOf
298
293
  };
299
294
  // 販売者を検証
300
- // const productOffers = params.product.offers;
301
- // if (!Array.isArray(productOffers)) {
302
- // throw new factory.errors.Argument('Product', 'Product offers undefined');
295
+ // productsドキュメント参照のoffers検証は廃止(2025-09-22~)
296
+ // const productOffers = await repos.productOffer.search({
297
+ // project: { id: { $eq: params.product.project.id } },
298
+ // itemOffered: { id: { $eq: String(params.product.id) } },
299
+ // seller: { id: { $eq: params.seller.id } }
300
+ // });
301
+ // const hasValidOffer = productOffers.some((o) => {
302
+ // return o.seller?.id === params.seller.id;
303
+ // });
304
+ // if (!hasValidOffer) {
305
+ // throw new factory.errors.Argument('Product', 'Product has no valid offer');
303
306
  // }
304
- const productOffers = yield repos.productOffer.search({
305
- project: { id: { $eq: params.product.project.id } },
306
- itemOffered: { id: { $eq: String(params.product.id) } },
307
- seller: { id: { $eq: params.seller.id } }
308
- });
309
- const hasValidOffer = productOffers.some((o) => {
310
- var _a;
311
- return ((_a = o.seller) === null || _a === void 0 ? void 0 : _a.id) === params.seller.id;
312
- });
313
- if (!hasValidOffer) {
314
- throw new factory.errors.Argument('Product', 'Product has no valid offer');
315
- }
316
307
  // 利用可能なチケットオファーであれば受け入れる
317
308
  return Promise.all(acceptedOfferWithoutDetail.map((offerWithoutDetail) => {
318
309
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
@@ -12,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.createAccountingReportIfNotExist = createAccountingReportIfNotExist;
13
13
  const moment = require("moment-timezone");
14
14
  const factory = require("../../factory");
15
- // import { createMaskedCustomer } from '../../factory/order';
16
15
  function createAccountingReportIfNotExist(params) {
17
16
  return (repos) => __awaiter(this, void 0, void 0, function* () {
18
17
  const order4report = createOrder4report(params);
@@ -116,8 +116,8 @@ function createCreateAccountingReportTask(order) {
116
116
  numberOfTried: 0,
117
117
  executionResults: [],
118
118
  data: {
119
- object: { mainEntity: { orderNumber: order.orderNumber } },
120
- project: { id: order.project.id }
119
+ object: { mainEntity: { orderNumber: order.orderNumber } }
120
+ // project: { id: order.project.id }
121
121
  }
122
122
  };
123
123
  return [task];
@@ -127,7 +127,7 @@ function createCheckResourceTask(order) {
127
127
  orderNumber: order.orderNumber,
128
128
  typeOf: order.typeOf
129
129
  },
130
- project: order.project,
130
+ // project: order.project,
131
131
  typeOf: factory.actionType.CheckAction
132
132
  };
133
133
  const taskIdentifier = util.format('%s:%s:%s:%s', order.project.id, factory.taskName.CheckResource, order.typeOf, order.orderNumber);
@@ -28,8 +28,7 @@ function useReservation(params) {
28
28
  // const ticketToken = params?.instrument?.ticketToken;
29
29
  if (Array.isArray(params.instrument)) {
30
30
  for (const eachInstrument of params.instrument) {
31
- if (eachInstrument.typeOf === factory.action.check.token.ObjectType.Ticket
32
- && typeof eachInstrument.ticketToken === 'string') {
31
+ if (eachInstrument.typeOf === 'Ticket' && typeof eachInstrument.ticketToken === 'string') {
33
32
  ticketToken = eachInstrument.ticketToken;
34
33
  break;
35
34
  }
@@ -62,7 +61,7 @@ function useReservation(params) {
62
61
  };
63
62
  // extend instrument to array(2025-02-18~)
64
63
  const instrument = [
65
- Object.assign(Object.assign({}, (typeof ticketToken === 'string') ? { ticketToken } : undefined), { typeOf: factory.action.check.token.ObjectType.Ticket }),
64
+ Object.assign(Object.assign({}, (typeof ticketToken === 'string') ? { ticketToken } : undefined), { typeOf: 'Ticket' }),
66
65
  // support orderAsInstrument(2025-02-18~)
67
66
  ...(Array.isArray(params.instrument))
68
67
  ? params.instrument.filter(({ typeOf }) => typeOf === factory.order.OrderType.Order)
@@ -1,4 +1,3 @@
1
- import * as factory from '../../factory';
2
1
  import type { AuthorizationRepo } from '../../repo/authorization';
3
2
  import type { OrderRepo } from '../../repo/order';
4
3
  import type { TicketRepo } from '../../repo/ticket';
@@ -12,7 +11,6 @@ export declare function verifyToken4reservation(params: {
12
11
  seller?: {
13
12
  id?: string;
14
13
  };
15
- agent: factory.action.check.token.IAgent;
16
14
  reservationId: string;
17
15
  ticket: {
18
16
  /**
@@ -1,6 +1,6 @@
1
1
  import * as factory from '../../factory';
2
- import type { IOperationExecute } from '../taskHandler';
2
+ import type { ICallResult, IExecutableTaskKeys, IOperationExecute } from '../taskHandler';
3
3
  /**
4
4
  * タスク実行関数
5
5
  */
6
- export declare function call(data: factory.task.checkResource.IData): IOperationExecute<void>;
6
+ export declare function call(params: Pick<factory.task.checkResource.ITask, IExecutableTaskKeys>): IOperationExecute<ICallResult>;