@chevre/domain 24.0.0-alpha.63 → 24.0.0-alpha.65

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.
@@ -3,6 +3,7 @@ import * as factory from '../../factory';
3
3
  type ISubReservationAsFindResult = Pick<factory.reservation.eventReservation.IReservation, 'underName' | 'id'> & {
4
4
  price?: factory.reservation.eventReservation.IPrice;
5
5
  reservedTicket?: Pick<factory.reservation.eventReservation.IReservedTicket, 'ticketType'>;
6
+ reservationFor?: factory.assetTransaction.reserve.IReservationFor;
6
7
  };
7
8
  /**
8
9
  * 予約取引リポジトリ
@@ -10,12 +11,6 @@ type ISubReservationAsFindResult = Pick<factory.reservation.eventReservation.IRe
10
11
  export declare class ReserveTransactionRepo {
11
12
  private readonly transactionModel;
12
13
  constructor(connection: Connection);
13
- /**
14
- * 予約取引から予約を検索する
15
- */
16
- findSubReservationsByReservationNumber(params: {
17
- reservationNumber: string;
18
- }): Promise<ISubReservationAsFindResult[]>;
19
14
  /**
20
15
  * 予約取引から予約を検索する
21
16
  * limitはしない
@@ -35,50 +35,54 @@ class ReserveTransactionRepo {
35
35
  constructor(connection) {
36
36
  this.transactionModel = connection.model(assetTransaction_1.modelName, (0, assetTransaction_1.createSchema)());
37
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
- }
38
+ // /**
39
+ // * 予約取引から予約を検索する
40
+ // */
41
+ // public async findSubReservationsByReservationNumber(
42
+ // params: {
43
+ // reservationNumber: string;
44
+ // }
45
+ // ): Promise<ISubReservationAsFindResult[]> {
46
+ // const aggregate = this.transactionModel.aggregate<ISubReservationAsFindResult>([
47
+ // {
48
+ // $match: {
49
+ // typeOf: { $eq: factory.assetTransactionType.Reserve },
50
+ // transactionNumber: { $eq: params.reservationNumber }
51
+ // }
52
+ // },
53
+ // {
54
+ // $unwind: {
55
+ // path: '$object.subReservation'
56
+ // // includeArrayIndex: 'elementIndex'
57
+ // }
58
+ // },
59
+ // // {
60
+ // // $match: {
61
+ // // typeOf: { $eq: factory.assetTransactionType.Reserve },
62
+ // // transactionNumber: { $eq: params.reservationNumber }
63
+ // // }
64
+ // // },
65
+ // {
66
+ // $project: {
67
+ // _id: 0,
68
+ // id: '$object.subReservation.id',
69
+ // price: '$object.subReservation.price',
70
+ // underName: '$object.underName',
71
+ // reservedTicket: {
72
+ // ticketType: '$object.subReservation.reservedTicket.ticketType',
73
+ // }
74
+ // }
75
+ // }
76
+ // ]);
77
+ // // if (typeof filter.limit === 'number' && filter.limit > 0) {
78
+ // // const page: number = (typeof filter.page === 'number' && filter.page > 0) ? filter.page : 1;
79
+ // // aggregate.limit(filter.limit * page)
80
+ // // .skip(filter.limit * (page - 1));
81
+ // // }
82
+ // return aggregate
83
+ // .option({ maxTimeMS: MONGO_MAX_TIME_MS })
84
+ // .exec();
85
+ // }
82
86
  /**
83
87
  * 予約取引から予約を検索する
84
88
  * limitはしない
@@ -112,6 +116,7 @@ class ReserveTransactionRepo {
112
116
  id: '$object.subReservation.id',
113
117
  price: '$object.subReservation.price',
114
118
  underName: '$object.underName',
119
+ reservationFor: '$object.reservationFor',
115
120
  reservedTicket: {
116
121
  ticketType: '$object.subReservation.reservedTicket.ticketType',
117
122
  }
@@ -0,0 +1,4 @@
1
+ import * as factory from '../../../factory';
2
+ export declare function minimizeReservationFor(params: factory.assetTransaction.reserve.IReservationFor): {
3
+ minimizedReservationFor: factory.reservation.eventReservation.IReservationForMinimized;
4
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.minimizeReservationFor = minimizeReservationFor;
4
+ function minimizeWorkPerformed(params) {
5
+ const { identifier, id, typeOf, version } = params;
6
+ return {
7
+ identifier,
8
+ typeOf,
9
+ ...(typeof id === 'string') && { id },
10
+ ...(typeof version === 'string') && { version },
11
+ };
12
+ }
13
+ function minimizeSuperEvent(params) {
14
+ const { id, location, typeOf, workPerformed } = params;
15
+ return {
16
+ id,
17
+ location,
18
+ typeOf,
19
+ workPerformed: minimizeWorkPerformed(workPerformed)
20
+ };
21
+ }
22
+ function minimizeReservationFor(params) {
23
+ const { name: _name, superEvent, ...reservationForNoName } = params;
24
+ const minimizedReservationFor = {
25
+ ...reservationForNoName,
26
+ superEvent: minimizeSuperEvent(superEvent)
27
+ };
28
+ console.log('minimizeReservationFor processed.', JSON.stringify(params), '->', JSON.stringify(minimizedReservationFor));
29
+ return { minimizedReservationFor };
30
+ }
@@ -15,13 +15,9 @@ type ISavingReservedTicket = Omit<factory.assetTransaction.reserve.ISubReservati
15
15
  /**
16
16
  * ドキュメントとして保管する予約
17
17
  */
18
- export type ICreatingReservation = Omit<factory.reservation.eventReservation.IReservation, 'id' | 'price' | 'reservedTicket'> & {
18
+ export type ICreatingReservation = Omit<factory.reservation.eventReservation.IReservation, 'id' | 'reservedTicket'> & {
19
19
  _id: string;
20
- /**
21
- * priceは廃止予定だが、互換性維持対応としてひとまず型を強制的に合わせる
22
- */
23
- price?: factory.reservation.eventReservation.IPrice;
24
- reservedTicket: factory.assetTransaction.reserve.ISubReservationReservedTicket | ISavingReservedTicket;
20
+ reservedTicket: ISavingReservedTicket;
25
21
  };
26
22
  /**
27
23
  * 廃止予定の予約属性
@@ -27,8 +27,8 @@ exports.ReservationRepo = void 0;
27
27
  const reservation_1 = require("./mongoose/schemas/reservation");
28
28
  const factory = __importStar(require("../factory"));
29
29
  const createMongoConditions_1 = require("./factory/reservation/createMongoConditions");
30
+ const minimizeReservationFor_1 = require("./factory/reservation/minimizeReservationFor");
30
31
  const settings_1 = require("../settings");
31
- const USE_DISCONTINUED_RESERVATION_PRICE = process.env.USE_DISCONTINUED_RESERVATION_PRICE === '1';
32
32
  /**
33
33
  * 予約リポジトリ
34
34
  */
@@ -137,17 +137,17 @@ class ReservationRepo {
137
137
  const bulkWriteOps = [];
138
138
  if (Array.isArray(params.subReservation)) {
139
139
  params.subReservation.forEach((subReservation) => {
140
- const { price, reservedTicket, ...subReservationWithoutPrice } = subReservation;
140
+ const { price: _discontinuePrice, reservedTicket, ...subReservationWithoutPrice } = subReservation;
141
141
  const { ticketType, ...reservedTicketWithoutTicketType } = reservedTicket;
142
142
  // 予約ドキュメントのticketTypeを最小化(2026-04-03~)
143
- const savingReservedTicket = (USE_DISCONTINUED_RESERVATION_PRICE)
144
- ? reservedTicket
145
- : {
146
- ...reservedTicketWithoutTicketType,
147
- ticketType: {
148
- ...((typeof ticketType.id === 'string') && { id: ticketType.id })
149
- }
150
- };
143
+ const savingReservedTicket = {
144
+ ...reservedTicketWithoutTicketType,
145
+ ticketType: {
146
+ ...((typeof ticketType.id === 'string') && { id: ticketType.id })
147
+ }
148
+ };
149
+ // reservationFor最小化(2026-04-06~)
150
+ const { minimizedReservationFor } = (0, minimizeReservationFor_1.minimizeReservationFor)(params.reservationFor);
151
151
  const setOnInsert = {
152
152
  ...subReservationWithoutPrice,
153
153
  typeOf: factory.reservationType.EventReservation,
@@ -157,7 +157,7 @@ class ReservationRepo {
157
157
  attended: false,
158
158
  issuedThrough: params.issuedThrough,
159
159
  project: { id: params.project.id, typeOf: factory.organizationType.Project },
160
- reservationFor: params.reservationFor,
160
+ reservationFor: minimizedReservationFor,
161
161
  reservationNumber: params.reservationNumber,
162
162
  reservationStatus: factory.reservationStatusType.ReservationConfirmed,
163
163
  modifiedTime,
@@ -165,7 +165,7 @@ class ReservationRepo {
165
165
  reservedTicket: savingReservedTicket,
166
166
  ...(params.underName !== undefined) ? { underName: params.underName } : undefined,
167
167
  ...(typeof params.broker?.typeOf === 'string') ? { broker: params.broker } : undefined,
168
- ...((USE_DISCONTINUED_RESERVATION_PRICE) && { price }) // discontinue price(2026-03-31~)
168
+ // discontinue price(2026-03-31~)
169
169
  };
170
170
  bulkWriteOps.push({
171
171
  updateOne: {
@@ -1,15 +1,21 @@
1
1
  import * as factory from '../../factory';
2
2
  import type { ReserveTransactionRepo } from '../../repo/assetTransaction/reserve';
3
3
  import type { IDeprecatedField, IKeyOfProjection, ReservationRepo } from '../../repo/reservation';
4
- type IReservationAsFindResult = Omit<factory.reservation.eventReservation.IReservation, 'price'> & {
4
+ /**
5
+ * 予約検索レスポンスとしての予約
6
+ * 予約ドキュメントに予約取引の情報を補完する
7
+ */
8
+ type IReservationAsFindResult = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName' | 'reservedTicket' | 'reservationFor'> & {
5
9
  price?: factory.reservation.eventReservation.IPrice;
10
+ underName?: factory.assetTransaction.reserve.IUnderName;
11
+ reservedTicket?: factory.assetTransaction.reserve.IObjectSubReservation['reservedTicket'];
12
+ reservationFor?: factory.assetTransaction.reserve.IReservationFor;
6
13
  };
7
14
  /**
8
15
  * 予約を検索する
9
16
  */
10
17
  export declare function findReservations(params: factory.reservation.eventReservation.ISearchConditions, options: {
11
18
  inclusion: Partial<Record<IKeyOfProjection | IDeprecatedField, 1>>;
12
- useReserveTransaction: boolean;
13
19
  }): (repos: {
14
20
  assetTransaction: {
15
21
  reserve: ReserveTransactionRepo;
@@ -5,70 +5,67 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.findReservations = findReservations;
7
7
  const debug_1 = __importDefault(require("debug"));
8
- const util_1 = require("util");
9
8
  const debug = (0, debug_1.default)('chevre-domain:service:reserve:findReservations');
10
9
  /**
11
10
  * 予約を検索する
12
11
  */
13
12
  function findReservations(params, options) {
14
13
  return async (repos) => {
15
- const { inclusion, useReserveTransaction } = options;
16
- let reservations = await repos.reservation.findReservations(params, inclusion);
17
- if (useReserveTransaction) {
18
- if (reservations.length > 0) {
19
- const requirePrice = Object.keys(inclusion).includes('price');
20
- const requireUnderName = Object.keys(inclusion).includes('underName');
21
- const requireReservedTicket = Object.keys(inclusion).includes('reservedTicket');
22
- const reservationIds = reservations.map(({ id }) => id);
23
- const subReservations = await repos.assetTransaction.reserve.findSubReservationsById({
24
- ids: reservationIds
25
- });
26
- // 予約取引から参照した予約数と同じはず
27
- debug('useReserveTransaction: true. reservations.length === subReservations.length?', reservations.length === subReservations.length);
28
- reservations = reservations.map((reservation) => {
29
- const subReservationByTransaction = subReservations.find((s) => s.id === reservation.id);
30
- const priceByTransaction = subReservationByTransaction?.price;
31
- const underNameByTransaction = subReservationByTransaction?.underName;
32
- const ticketTypeByTransaction = subReservationByTransaction?.reservedTicket?.ticketType;
33
- // 予約取引から参照した属性と全く等しいはず
34
- if (requirePrice) {
35
- const priceMatched = (0, util_1.isDeepStrictEqual)(reservation.price, priceByTransaction);
36
- debug('requirePrice. priceMatched?', priceMatched);
37
- if (!priceMatched) {
38
- console.error('priceMatched: false!!!', reservation.id);
39
- }
40
- }
41
- if (requireUnderName) {
42
- const underNameMatched = (0, util_1.isDeepStrictEqual)(reservation.underName, underNameByTransaction);
43
- debug('requireUnderName. underNameMatched?', underNameMatched);
44
- if (!underNameMatched) {
45
- console.error('underNameMatched: false!!!', reservation.id);
46
- }
47
- }
48
- if (requireReservedTicket) {
49
- const ticketTypeMatched = (0, util_1.isDeepStrictEqual)(reservation.reservedTicket.ticketType, ticketTypeByTransaction);
50
- debug('requireReservedTicket. ticketTypeMatched?', ticketTypeMatched);
51
- if (!ticketTypeMatched) {
52
- console.error('ticketTypeMatched: false!!!', reservation.id);
53
- }
54
- }
55
- return {
56
- ...reservation, // 予約ドキュメントはそのまま返す
57
- ...(requirePrice && priceByTransaction !== undefined) ? { price: priceByTransaction } : undefined, // priceがあれば上書き
58
- ...(requireUnderName && underNameByTransaction !== undefined) ? { underName: underNameByTransaction } : undefined, // underNameがあれば上書き
59
- ...(requireReservedTicket && ticketTypeByTransaction !== undefined) // ticketTypeがあれば上書き
60
- ? {
61
- reservedTicket: {
62
- ...reservation.reservedTicket, // 予約ドキュメントのreservedTicketはそのまま返す
63
- ticketType: ticketTypeByTransaction
64
- }
14
+ const { inclusion } = options;
15
+ const rawReservations = await repos.reservation.findReservations(params, inclusion);
16
+ if (rawReservations.length === 0) {
17
+ return [];
18
+ }
19
+ else {
20
+ const requirePrice = Object.keys(inclusion).includes('price');
21
+ const requireUnderName = Object.keys(inclusion).includes('underName');
22
+ const requireReservedTicket = Object.keys(inclusion).includes('reservedTicket');
23
+ const requireReservationFor = Object.keys(inclusion).includes('reservationFor');
24
+ const reservationIds = rawReservations.map(({ id }) => id);
25
+ const subReservations = await repos.assetTransaction.reserve.findSubReservationsById({
26
+ ids: reservationIds
27
+ });
28
+ // 予約取引から参照した予約数と同じはず
29
+ debug('useReserveTransaction: true. reservations.length === subReservations.length?', rawReservations.length === subReservations.length);
30
+ return rawReservations.map((reservation) => {
31
+ const subReservationByTransaction = subReservations.find((s) => s.id === reservation.id);
32
+ const priceByTransaction = subReservationByTransaction?.price;
33
+ const underNameByTransaction = subReservationByTransaction?.underName;
34
+ const ticketTypeByTransaction = subReservationByTransaction?.reservedTicket?.ticketType;
35
+ const reservationForByTransaction = subReservationByTransaction?.reservationFor;
36
+ // 予約ドキュメントを最適化し始めたため、もう等しくない(2026-04-06~)
37
+ // // 予約取引から参照した属性と全く等しいはず
38
+ // if (requirePrice) {
39
+ // }
40
+ // if (requireUnderName) {
41
+ // }
42
+ // if (requireReservedTicket) {
43
+ // }
44
+ // if (requireReservationFor) {
45
+ // const reservationForMatched = isDeepStrictEqual(reservation.reservationFor, reservationForByTransaction);
46
+ // debug('requireReservationFor. reservationForMatched?', reservationForMatched);
47
+ // if (!reservationForMatched) {
48
+ // console.error('reservationForMatched: false!!!', reservation.id);
49
+ // }
50
+ // }
51
+ const { reservationFor, reservedTicket, ...rawReservation4result } = reservation; // eslint-disable-line @typescript-eslint/no-unused-vars
52
+ return {
53
+ ...rawReservation4result, // 予約ドキュメントはそのまま返す
54
+ ...(requirePrice && priceByTransaction !== undefined) ? { price: priceByTransaction } : undefined, // priceがあれば上書き
55
+ ...(requireUnderName && underNameByTransaction !== undefined) ? { underName: underNameByTransaction } : undefined, // underNameがあれば上書き
56
+ ...(requireReservedTicket && ticketTypeByTransaction !== undefined) // ticketTypeがあれば上書き
57
+ ? {
58
+ reservedTicket: {
59
+ ...reservedTicket, // 予約ドキュメントのreservedTicketはそのまま返す
60
+ ticketType: ticketTypeByTransaction
65
61
  }
66
- : undefined
67
- };
68
- });
69
- }
70
- ;
62
+ }
63
+ : undefined,
64
+ ...(requireReservationFor && reservationForByTransaction !== undefined)
65
+ ? { reservationFor: reservationForByTransaction }
66
+ : undefined, // reservationForがあれば上書き(2026-04-06~)
67
+ };
68
+ });
71
69
  }
72
- return reservations;
73
70
  };
74
71
  }
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.2.0-alpha.7",
15
- "@cinerino/sdk": "14.0.0-alpha.4",
14
+ "@chevre/factory": "6.2.0-alpha.8",
15
+ "@cinerino/sdk": "14.0.0-alpha.5",
16
16
  "@motionpicture/coa-service": "9.7.0-alpha.2",
17
17
  "@motionpicture/gmo-service": "5.4.0-alpha.1",
18
18
  "@sendgrid/client": "8.1.4",
@@ -97,5 +97,5 @@
97
97
  "postversion": "git push origin --tags",
98
98
  "prepublishOnly": "npm run clean && npm run build"
99
99
  },
100
- "version": "24.0.0-alpha.63"
100
+ "version": "24.0.0-alpha.65"
101
101
  }