@chevre/domain 24.0.0-alpha.45 → 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;
@@ -15,6 +15,16 @@ export type IAttendedReservation = Pick<factory.reservation.IReservation<factory
15
15
  reservationFor: Pick<factory.reservation.IReservationFor<factory.reservationType.EventReservation>, 'id' | 'typeOf'>;
16
16
  reservedTicket: Pick<factory.reservation.eventReservation.IReservedTicket, 'dateUsed'>;
17
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;
27
+ };
18
28
  /**
19
29
  * 予約リポジトリ
20
30
  */
@@ -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) {
@@ -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;
@@ -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;
@@ -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
  }
@@ -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 };
@@ -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,7 +11,7 @@
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.8",
14
+ "@chevre/factory": "6.0.0-alpha.9",
15
15
  "@cinerino/sdk": "13.3.0",
16
16
  "@motionpicture/coa-service": "9.6.0",
17
17
  "@motionpicture/gmo-service": "5.4.0-alpha.1",
@@ -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.45"
102
+ "version": "24.0.0-alpha.46"
103
103
  }