@chevre/domain 24.0.0-alpha.44 → 24.0.0-alpha.46

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.
@@ -0,0 +1,29 @@
1
+ import type { Connection } from 'mongoose';
2
+ import * as factory from '../../factory';
3
+ type ISubReservationAsFindResult = Pick<factory.reservation.eventReservation.IReservation, 'price' | 'underName' | 'id'> & {
4
+ reservedTicket?: Pick<factory.reservation.eventReservation.IReservedTicket, 'ticketType'>;
5
+ };
6
+ /**
7
+ * 予約取引リポジトリ
8
+ */
9
+ export declare class ReserveTransactionRepo {
10
+ private readonly transactionModel;
11
+ constructor(connection: Connection);
12
+ /**
13
+ * 予約取引から予約を検索する
14
+ */
15
+ findSubReservationsByReservationNumber(params: {
16
+ reservationNumber: string;
17
+ }): Promise<ISubReservationAsFindResult[]>;
18
+ /**
19
+ * 予約取引から予約を検索する
20
+ * limitはしない
21
+ */
22
+ findSubReservationsById(params: {
23
+ /**
24
+ * 予約IDリスト
25
+ */
26
+ ids: string[];
27
+ }): Promise<ISubReservationAsFindResult[]>;
28
+ }
29
+ export {};
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ReserveTransactionRepo = void 0;
27
+ const assetTransaction_1 = require("../mongoose/schemas/assetTransaction");
28
+ const factory = __importStar(require("../../factory"));
29
+ const settings_1 = require("../../settings");
30
+ /**
31
+ * 予約取引リポジトリ
32
+ */
33
+ class ReserveTransactionRepo {
34
+ transactionModel;
35
+ constructor(connection) {
36
+ this.transactionModel = connection.model(assetTransaction_1.modelName, (0, assetTransaction_1.createSchema)());
37
+ }
38
+ /**
39
+ * 予約取引から予約を検索する
40
+ */
41
+ async findSubReservationsByReservationNumber(params) {
42
+ const aggregate = this.transactionModel.aggregate([
43
+ {
44
+ $match: {
45
+ typeOf: { $eq: factory.assetTransactionType.Reserve },
46
+ transactionNumber: { $eq: params.reservationNumber }
47
+ }
48
+ },
49
+ {
50
+ $unwind: {
51
+ path: '$object.subReservation'
52
+ // includeArrayIndex: 'elementIndex'
53
+ }
54
+ },
55
+ // {
56
+ // $match: {
57
+ // typeOf: { $eq: factory.assetTransactionType.Reserve },
58
+ // transactionNumber: { $eq: params.reservationNumber }
59
+ // }
60
+ // },
61
+ {
62
+ $project: {
63
+ _id: 0,
64
+ id: '$object.subReservation.id',
65
+ price: '$object.subReservation.price',
66
+ underName: '$object.underName',
67
+ reservedTicket: {
68
+ ticketType: '$object.subReservation.reservedTicket.ticketType',
69
+ }
70
+ }
71
+ }
72
+ ]);
73
+ // if (typeof filter.limit === 'number' && filter.limit > 0) {
74
+ // const page: number = (typeof filter.page === 'number' && filter.page > 0) ? filter.page : 1;
75
+ // aggregate.limit(filter.limit * page)
76
+ // .skip(filter.limit * (page - 1));
77
+ // }
78
+ return aggregate
79
+ .option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
80
+ .exec();
81
+ }
82
+ /**
83
+ * 予約取引から予約を検索する
84
+ * limitはしない
85
+ */
86
+ async findSubReservationsById(params) {
87
+ const { ids } = params;
88
+ if (!Array.isArray(ids) || ids.length === 0) {
89
+ throw new factory.errors.ArgumentNull('ids');
90
+ }
91
+ const aggregate = this.transactionModel.aggregate([
92
+ {
93
+ $match: {
94
+ typeOf: { $eq: factory.assetTransactionType.Reserve },
95
+ 'object.subReservation.id': { $exists: true, $in: ids }
96
+ }
97
+ },
98
+ {
99
+ $unwind: {
100
+ path: '$object.subReservation'
101
+ // includeArrayIndex: 'elementIndex'
102
+ }
103
+ },
104
+ {
105
+ $match: {
106
+ 'object.subReservation.id': { $exists: true, $in: ids }
107
+ }
108
+ },
109
+ {
110
+ $project: {
111
+ _id: 0,
112
+ id: '$object.subReservation.id',
113
+ price: '$object.subReservation.price',
114
+ underName: '$object.underName',
115
+ reservedTicket: {
116
+ ticketType: '$object.subReservation.reservedTicket.ticketType',
117
+ }
118
+ }
119
+ }
120
+ ]);
121
+ return aggregate
122
+ .option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
123
+ .exec();
124
+ }
125
+ }
126
+ exports.ReserveTransactionRepo = ReserveTransactionRepo;
@@ -13,7 +13,17 @@ export type ICreatingReservation<T extends factory.reservationType> = T extends
13
13
  type IKeyOfProjection = keyof factory.reservation.IReservation<factory.reservationType.EventReservation> | 'reservedTicket.dateUsed' | 'reservationFor.id' | 'reservationFor.typeOf';
14
14
  export type IAttendedReservation = Pick<factory.reservation.IReservation<factory.reservationType.EventReservation>, 'id' | 'typeOf' | 'project' | 'modifiedTime'> & {
15
15
  reservationFor: Pick<factory.reservation.IReservationFor<factory.reservationType.EventReservation>, 'id' | 'typeOf'>;
16
- reservedTicket: Pick<factory.reservation.ITicket, 'dateUsed'>;
16
+ reservedTicket: Pick<factory.reservation.eventReservation.IReservedTicket, 'dateUsed'>;
17
+ };
18
+ export type IReservationAsFindResult = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName'> & {
19
+ /**
20
+ * 実データとしてはまだ存在しているが型から廃止(2026-03-26~)
21
+ */
22
+ price?: never;
23
+ /**
24
+ * 実データとしてはまだ存在しているが型から廃止(2026-03-26~)
25
+ */
26
+ underName?: never;
17
27
  };
18
28
  /**
19
29
  * 予約リポジトリ
@@ -28,9 +38,9 @@ export declare class ReservationRepo {
28
38
  count<T extends factory.reservationType>(params: factory.reservation.ISearchConditions<T>): Promise<number>;
29
39
  /**
30
40
  * 予約検索
31
- * migrate from search(2024-08-08~)
41
+ * TODO reimplement
32
42
  */
33
- projectFields<T extends factory.reservationType>(params: factory.reservation.ISearchConditions<T>, inclusion?: Partial<Record<IKeyOfProjection, 1>>): Promise<factory.reservation.IReservation<factory.reservationType.EventReservation>[]>;
43
+ findReservations(params: factory.reservation.eventReservation.ISearchConditions, inclusion?: Partial<Record<IKeyOfProjection, 1>>): Promise<IReservationAsFindResult[]>;
34
44
  projectFieldsById<T extends factory.reservationType>(params: {
35
45
  id: string;
36
46
  inclusion?: IKeyOfProjection[];
@@ -791,9 +791,9 @@ class ReservationRepo {
791
791
  }
792
792
  /**
793
793
  * 予約検索
794
- * migrate from search(2024-08-08~)
794
+ * TODO reimplement
795
795
  */
796
- async projectFields(params, inclusion) {
796
+ async findReservations(params, inclusion) {
797
797
  const conditions = ReservationRepo.CREATE_MONGO_CONDITIONS(params);
798
798
  let projection;
799
799
  if (inclusion !== undefined && inclusion !== null) {
@@ -884,7 +884,7 @@ class ReservationRepo {
884
884
  switch (subReservation.typeOf) {
885
885
  case factory.reservationType.EventReservation:
886
886
  setOnInsert = {
887
- ...subReservation,
887
+ ...subReservation, // priceは廃止予定だが、互換性維持対応としてひとまず型を強制的に合わせる
888
888
  _id: subReservation.id,
889
889
  bookingTime: params.bookingTime,
890
890
  checkedIn: false,
@@ -27,6 +27,7 @@ import type { AggregateOrderRepo } from './repo/aggregateOrder';
27
27
  import type { AggregateReservationRepo } from './repo/aggregateReservation';
28
28
  import type { AggregationRepo } from './repo/aggregation';
29
29
  import type { AssetTransactionRepo } from './repo/assetTransaction';
30
+ import type { ReserveTransactionRepo } from './repo/assetTransaction/reserve';
30
31
  import type { AuthorizationRepo } from './repo/authorization';
31
32
  import type { CategoryCodeRepo } from './repo/categoryCode';
32
33
  import type { CommentRepo } from './repo/comment';
@@ -211,6 +212,12 @@ export type AssetTransaction = AssetTransactionRepo;
211
212
  export declare namespace AssetTransaction {
212
213
  function createInstance(...params: ConstructorParameters<typeof AssetTransactionRepo>): Promise<AssetTransactionRepo>;
213
214
  }
215
+ export declare namespace assetTransaction {
216
+ type Reserve = ReserveTransactionRepo;
217
+ namespace Reserve {
218
+ function createInstance(...params: ConstructorParameters<typeof ReserveTransactionRepo>): Promise<ReserveTransactionRepo>;
219
+ }
220
+ }
214
221
  export type CategoryCode = CategoryCodeRepo;
215
222
  export declare namespace CategoryCode {
216
223
  function createInstance(...params: ConstructorParameters<typeof CategoryCodeRepo>): Promise<CategoryCodeRepo>;
@@ -23,8 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- 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.MovieTicketType = 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.AggregateAction = exports.AdvanceBookingRequirement = exports.AdditionalProperty = exports.action = exports.Action = exports.AccountTransaction = exports.AccountTitle = exports.AccountingReport = exports.Account = exports.AcceptedPaymentMethod = exports.AcceptedOffer = void 0;
27
- exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.transaction = exports.Transaction = exports.Ticket = 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.ProductHasOfferCatalog = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Permit = exports.Person = exports.paymentMethod = exports.PendingReservation = exports.PaymentServiceProvider = void 0;
26
+ 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.MovieTicketType = 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.AssetTransaction = exports.Aggregation = exports.AggregateReservation = exports.AggregateOrder = exports.AggregateOffer = exports.AggregateAction = exports.AdvanceBookingRequirement = exports.AdditionalProperty = exports.action = exports.Action = exports.AccountTransaction = exports.AccountTitle = exports.AccountingReport = exports.Account = exports.AcceptedPaymentMethod = exports.AcceptedOffer = void 0;
27
+ exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.transaction = exports.Transaction = exports.Ticket = 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.ProductHasOfferCatalog = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Permit = exports.Person = exports.paymentMethod = exports.PendingReservation = exports.PaymentServiceProvider = exports.PaymentServiceChannel = void 0;
28
28
  var AcceptedOffer;
29
29
  (function (AcceptedOffer) {
30
30
  let repo;
@@ -314,6 +314,20 @@ var AssetTransaction;
314
314
  }
315
315
  AssetTransaction.createInstance = createInstance;
316
316
  })(AssetTransaction || (exports.AssetTransaction = AssetTransaction = {}));
317
+ var assetTransaction;
318
+ (function (assetTransaction) {
319
+ let Reserve;
320
+ (function (Reserve) {
321
+ let repo;
322
+ async function createInstance(...params) {
323
+ if (repo === undefined) {
324
+ repo = (await Promise.resolve().then(() => __importStar(require('./repo/assetTransaction/reserve')))).ReserveTransactionRepo;
325
+ }
326
+ return new repo(...params);
327
+ }
328
+ Reserve.createInstance = createInstance;
329
+ })(Reserve = assetTransaction.Reserve || (assetTransaction.Reserve = {}));
330
+ })(assetTransaction || (exports.assetTransaction = assetTransaction = {}));
317
331
  var CategoryCode;
318
332
  (function (CategoryCode) {
319
333
  let repo;
@@ -2,10 +2,7 @@ import * as factory from '../../../../../factory';
2
2
  import { IMinimizedIndividualEvent } from '../../../../../factory/event';
3
3
  import { IAcceptedAddOn } from './price';
4
4
  type IObjectSubReservation = factory.assetTransaction.reserve.IObjectSubReservation;
5
- /**
6
- * 確定時予約のITicket
7
- */
8
- type IReservedTicket = Pick<factory.reservation.ITicket, 'identifier' | 'issuedBy' | 'ticketType' | 'ticketedSeat' | 'typeOf'>;
5
+ type IReservedTicket = Pick<factory.assetTransaction.reserve.ISubReservationReservedTicket, 'identifier' | 'issuedBy' | 'ticketType' | 'ticketedSeat' | 'typeOf'>;
9
6
  declare function createReservedTicket(params: {
10
7
  id: string;
11
8
  acceptedOffer: factory.assetTransaction.reserve.IAcceptedTicketOfferWithoutDetail;
@@ -43,7 +40,7 @@ declare function createReservation(params: {
43
40
  };
44
41
  id: string;
45
42
  reservationFor: IMinimizedIndividualEvent;
46
- reservedTicket: IReservedTicket;
43
+ reservedTicket: factory.assetTransaction.reserve.ISubReservationReservedTicket;
47
44
  additionalProperty?: factory.propertyValue.IPropertyValue<string>[];
48
45
  additionalTicketText?: string;
49
46
  ticketOffer: factory.product.ITicketOffer;
@@ -14,4 +14,4 @@ export declare function createPrice(params: {
14
14
  seatPriceComponent: factory.place.seat.IPriceComponent[];
15
15
  acceptedAddOns: IAcceptedAddOn[];
16
16
  appliesToMovieTicket?: factory.assetTransaction.reserve.IAcceptedAppliesToMovieTicket;
17
- }): factory.reservation.IPriceSpecification<factory.reservationType.EventReservation>;
17
+ }): factory.reservation.eventReservation.IPrice;
@@ -36,7 +36,7 @@ declare function processUnlockOfferRateLimit(params: {
36
36
  };
37
37
  reservation: {
38
38
  reservationNumber: string;
39
- reservedTicket: factory.reservation.ITicket;
39
+ reservedTicket: factory.reservation.eventReservation.IReservedTicket;
40
40
  };
41
41
  reservationFor: factory.assetTransaction.reserve.IReservationFor;
42
42
  }): (repos: {
@@ -319,10 +319,11 @@ function cancelReservation(actionAttributesList) {
319
319
  const reservationNumber = actionAttributes.object.reservationNumber;
320
320
  if (typeof reservationNumber === 'string' && reservationNumber.length > 0) {
321
321
  // 最新のconfirmedReservationsを検索
322
- canceledReservations = await repos.reservation.projectFields({
322
+ canceledReservations = await repos.reservation.findReservations({
323
323
  reservationNumber: { $eq: reservationNumber },
324
324
  typeOf: factory.reservationType.EventReservation
325
- }, { project: 1, typeOf: 1, modifiedTime: 1, reservationNumber: 1 });
325
+ }, { project: 1, typeOf: 1, modifiedTime: 1, reservationNumber: 1 } // 廃止属性の影響なし(2026-03-25~)
326
+ );
326
327
  canceledReservations = canceledReservations.map((r) => {
327
328
  // _idは不要であり、存在すると予期せぬ影響を及ぼす可能性がある
328
329
  delete r._id;
@@ -421,8 +422,8 @@ function processUnlockSeat(params) {
421
422
  function processUnlockOfferRateLimit(params) {
422
423
  return async (repos) => {
423
424
  const reservation = params.reservation;
424
- const scope = reservation.reservedTicket.ticketType.validRateLimit?.scope;
425
- const unitInSeconds = reservation.reservedTicket.ticketType.validRateLimit?.unitInSeconds;
425
+ const scope = reservation.reservedTicket.ticketType?.validRateLimit?.scope;
426
+ const unitInSeconds = reservation.reservedTicket.ticketType?.validRateLimit?.unitInSeconds;
426
427
  if (typeof scope === 'string' && typeof unitInSeconds === 'number') {
427
428
  const rateLimitKey = {
428
429
  project: { id: params.project.id },
@@ -45,7 +45,7 @@ function confirmReservation(params) {
45
45
  // await onReservationConfirmedByAction(actionAttributes)({ task: repos.task });
46
46
  // }
47
47
  // }));
48
- const actionAttributes = await reserveIfNotYet(params.potentialReserveAction, { byTask: params.byTask })(repos);
48
+ const { actionAttributes, reserveTransaction } = await reserveIfNotYet(params.potentialReserveAction, { byTask: params.byTask })(repos);
49
49
  if (params.useOnReservationConfirmed) {
50
50
  await (0, onReservationConfirmed_1.onReservationConfirmedByAction)(actionAttributes)({ task: repos.task });
51
51
  }
@@ -55,13 +55,30 @@ function confirmReservation(params) {
55
55
  const reservationNumber = params.potentialReserveAction.object.reservationNumber;
56
56
  if (typeof reservationNumber === 'string' && reservationNumber.length > 0) {
57
57
  // 最新のconfirmedReservationsを検索
58
- confirmedReservations = await repos.reservation.projectFields({
58
+ const rawReservations = await repos.reservation.findReservations({
59
59
  reservationNumber: { $eq: reservationNumber },
60
60
  typeOf: factory.reservationType.EventReservation
61
61
  }
62
62
  // project all fields
63
63
  // {}
64
64
  );
65
+ // price,underName,ticketTypeは予約取引から補完する(2026-03-25~)
66
+ confirmedReservations = rawReservations.map((rawReservation) => {
67
+ const subReservationByTransaction = reserveTransaction.object.subReservation?.find((s) => s.id === rawReservation.id);
68
+ const priceByTransaction = subReservationByTransaction?.price;
69
+ const underNameByTransaction = reserveTransaction.object.underName;
70
+ const ticketTypeByTransaction = subReservationByTransaction?.reservedTicket.ticketType;
71
+ console.log('creating confirmedReservation...', rawReservation, priceByTransaction, underNameByTransaction, ticketTypeByTransaction);
72
+ return {
73
+ ...rawReservation,
74
+ ...(priceByTransaction) ? { price: priceByTransaction } : undefined,
75
+ ...(underNameByTransaction !== undefined) ? { underName: underNameByTransaction } : undefined,
76
+ reservedTicket: {
77
+ ...rawReservation.reservedTicket,
78
+ ...(ticketTypeByTransaction !== undefined) ? { ticketType: ticketTypeByTransaction } : undefined
79
+ }
80
+ };
81
+ });
65
82
  confirmedReservations = confirmedReservations.map((r) => {
66
83
  // _idは不要であり、存在すると予期せぬ影響を及ぼす可能性がある
67
84
  delete r._id;
@@ -211,6 +228,6 @@ params, options) {
211
228
  const actionResult = {};
212
229
  await repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: actionResult });
213
230
  }
214
- return actionAttributes;
231
+ return { actionAttributes, reserveTransaction };
215
232
  };
216
233
  }
@@ -1,11 +1,12 @@
1
1
  import * as factory from '../../factory';
2
+ import type { AcceptedOfferRepo } from '../../repo/acceptedOffer';
2
3
  import type { AuthorizationRepo } from '../../repo/authorization';
3
4
  import type { OrderRepo } from '../../repo/order';
4
5
  import type { ReservationRepo } from '../../repo/reservation';
5
6
  type AvailableReservationType = factory.reservationType.EventReservation;
6
7
  type IReservationResult = Pick<factory.reservation.IReservation<AvailableReservationType>, 'id' | 'additionalTicketText' | 'checkedIn' | 'reservationStatus'> & {
7
8
  reservedTicket: {
8
- ticketType: Pick<factory.reservation.ITicketType<AvailableReservationType>, 'identifier'> & {
9
+ ticketType: Pick<factory.reservation.eventReservation.ITicketType, 'identifier'> & {
9
10
  name: {
10
11
  ja?: string;
11
12
  };
@@ -28,6 +29,7 @@ declare function findByCode(params: {
28
29
  id?: string;
29
30
  };
30
31
  }): (repos: {
32
+ acceptedOffer: AcceptedOfferRepo;
31
33
  authorization: AuthorizationRepo;
32
34
  order: OrderRepo;
33
35
  reservation: ReservationRepo;
@@ -38,6 +38,7 @@ function findByCode(params) {
38
38
  project: { id: params.project.id },
39
39
  code: params.code
40
40
  });
41
+ let ticketType;
41
42
  switch (authorization.object.typeOf) {
42
43
  case factory.order.OrderType.Order: {
43
44
  const { orderNumber } = authorization.object;
@@ -49,6 +50,32 @@ function findByCode(params) {
49
50
  reservationId,
50
51
  seller: params.seller
51
52
  });
53
+ const acceptedOffer = (await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
54
+ limit: 1,
55
+ page: 1,
56
+ // $slice?: [number, number];
57
+ orderNumber: { $eq: orderNumber },
58
+ project: { id: { $eq: params.project.id } },
59
+ acceptedOffers: {
60
+ itemOffered: {
61
+ id: { $eq: reservationId }
62
+ // typeOf?: { $in?: factory.order.IItemOffered['typeOf'][] };
63
+ }
64
+ }
65
+ }, ['itemOffered'])).shift();
66
+ if (acceptedOffer === undefined) {
67
+ throw new factory.errors.NotFound('acceptedOffer');
68
+ }
69
+ if (acceptedOffer.itemOffered.typeOf !== factory.reservationType.EventReservation) {
70
+ throw new factory.errors.Argument('id', `itemOffered.typeOf must be ${factory.reservationType.EventReservation}`);
71
+ }
72
+ ticketType = {
73
+ identifier: acceptedOffer.itemOffered.reservedTicket.ticketType.identifier,
74
+ name: { ja: acceptedOffer.itemOffered.reservedTicket.ticketType.name?.ja }
75
+ };
76
+ }
77
+ else {
78
+ throw new factory.errors.NotFound('orderNumber');
52
79
  }
53
80
  break;
54
81
  }
@@ -57,16 +84,21 @@ function findByCode(params) {
57
84
  }
58
85
  const reservationFromRepo = await repos.reservation.projectFieldsById({
59
86
  id: reservationId,
60
- inclusion: ['additionalTicketText', 'checkedIn', 'reservationStatus', 'reservedTicket']
87
+ inclusion: [
88
+ 'additionalTicketText', 'checkedIn', 'reservationStatus',
89
+ // 'reservedTicket'
90
+ ]
61
91
  });
62
- const { id, additionalTicketText, checkedIn, reservationStatus, reservedTicket } = reservationFromRepo;
92
+ const { id, additionalTicketText, checkedIn, reservationStatus } = reservationFromRepo;
63
93
  const reservation = {
64
94
  id, reservationStatus,
65
95
  reservedTicket: {
66
- ticketType: {
67
- identifier: reservedTicket.ticketType.identifier,
68
- name: { ja: reservedTicket.ticketType.name?.ja }
69
- }
96
+ // ticketTypeは注文を参照する(2026-03-25~)
97
+ // ticketType: {
98
+ // identifier: reservedTicket.ticketType.identifier,
99
+ // name: { ja: reservedTicket.ticketType.name?.ja }
100
+ // },
101
+ ticketType
70
102
  },
71
103
  ...(typeof additionalTicketText === 'string') ? { additionalTicketText } : undefined,
72
104
  ...(typeof checkedIn === 'boolean') ? { checkedIn } : undefined
@@ -5,16 +5,18 @@ import * as factory from '../../../factory';
5
5
  import { AuthorizationRepo } from '../../../repo/authorization';
6
6
  import type { SettingRepo } from '../../../repo/setting';
7
7
  import type { TaskRepo } from '../../../repo/task';
8
- type IEventReservation = factory.reservation.IReservation<factory.reservationType.EventReservation>;
8
+ export type IConfirmedReservation = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName'> & {
9
+ price?: factory.reservation.eventReservation.IPrice;
10
+ underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
11
+ };
9
12
  /**
10
13
  * 予約確定後のアクション
11
14
  */
12
15
  export declare function onReservationConfirmedByAction(actionAttributes: Pick<factory.action.reserve.IAttributes, 'potentialActions'>): (repos: {
13
16
  task: TaskRepo;
14
17
  }) => Promise<void>;
15
- export declare function onReservationConfirmed(confirmedReservations: IEventReservation[], reserveAction: Pick<factory.action.reserve.IAttributes, 'instrument'>): (repos: {
18
+ export declare function onReservationConfirmed(confirmedReservations: IConfirmedReservation[], reserveAction: Pick<factory.action.reserve.IAttributes, 'instrument'>): (repos: {
16
19
  code: AuthorizationRepo;
17
20
  setting: SettingRepo;
18
21
  task: TaskRepo;
19
22
  }) => Promise<void>;
20
- export {};
@@ -104,11 +104,12 @@ function searchByOrder(params) {
104
104
  break;
105
105
  }
106
106
  default:
107
- reservations = await repos.reservation.projectFields({
107
+ reservations = await repos.reservation.findReservations({
108
108
  project: { id: { $eq: params.project.id } },
109
109
  typeOf: reservationType,
110
110
  id: { $in: reservationIds }
111
- }, { id: 1, additionalTicketText: 1, reservationStatus: 1 });
111
+ }, { id: 1, additionalTicketText: 1, reservationStatus: 1 } // 廃止属性の影響なし(2026-03-25~)
112
+ );
112
113
  }
113
114
  }
114
115
  return { reservations };
@@ -73,11 +73,12 @@ function useReservation(params) {
73
73
  reservationFor: { id: reservation.reservationFor.id, typeOf: reservation.reservationFor.typeOf },
74
74
  reservedTicket: {
75
75
  typeOf: reservedTicket.typeOf,
76
- ticketType: {
77
- identifier: reservedTicket.ticketType.identifier,
78
- typeOf: reservedTicket.ticketType.typeOf,
79
- ...(typeof reservedTicket.ticketType.id === 'string') ? { id: reservedTicket.ticketType.id } : undefined
80
- },
76
+ // discontinue ticketType(2026-03-25~)
77
+ // ticketType: {
78
+ // identifier: reservedTicket.ticketType.identifier,
79
+ // typeOf: reservedTicket.ticketType.typeOf,
80
+ // ...(typeof reservedTicket.ticketType.id === 'string') ? { id: reservedTicket.ticketType.id } : undefined
81
+ // },
81
82
  ...(typeof reservedTicket.identifier === 'string') ? { identifier: reservedTicket.identifier } : undefined,
82
83
  ...(typeof reservedTicket.ticketedSeat?.typeOf === 'string') ? { ticketedSeat: reservedTicket.ticketedSeat } : undefined
83
84
  }
@@ -196,13 +196,14 @@ function checkUsedReservationExists(params) {
196
196
  }, 'acceptedOffers.itemOffered.reservationNumber');
197
197
  if (reservationNumbers.length > 0) {
198
198
  // 使用済の予約がひとつでもあれば不可
199
- const existingUsedReservations = await repos.reservation.projectFields({
199
+ const existingUsedReservations = await repos.reservation.findReservations({
200
200
  limit: 1,
201
201
  page: 1,
202
202
  typeOf: factory.reservationType.EventReservation,
203
203
  reservationNumber: { $in: reservationNumbers },
204
204
  attended: true
205
- }, { id: 1 });
205
+ }, { id: 1 } // 廃止属性の影響なし(2026-03-25~)
206
+ );
206
207
  if (existingUsedReservations.length > 0) {
207
208
  usedReservationExists = true;
208
209
  }
package/package.json CHANGED
@@ -11,8 +11,8 @@
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-cognito-identity-provider": "3.600.0",
13
13
  "@aws-sdk/credential-providers": "3.600.0",
14
- "@chevre/factory": "6.0.0-alpha.5",
15
- "@cinerino/sdk": "13.2.0",
14
+ "@chevre/factory": "6.0.0-alpha.9",
15
+ "@cinerino/sdk": "13.3.0",
16
16
  "@motionpicture/coa-service": "9.6.0",
17
17
  "@motionpicture/gmo-service": "5.4.0-alpha.1",
18
18
  "@sendgrid/client": "8.1.4",
@@ -99,5 +99,5 @@
99
99
  "postversion": "git push origin --tags",
100
100
  "prepublishOnly": "npm run clean && npm run build"
101
101
  },
102
- "version": "24.0.0-alpha.44"
102
+ "version": "24.0.0-alpha.46"
103
103
  }