@chevre/domain 21.18.0-alpha.6 → 21.18.0-alpha.7

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,39 @@
1
+ // tslint:disable:no-console
2
+ import * as mongoose from 'mongoose';
3
+
4
+ import { chevre } from '../../../lib/index';
5
+
6
+ // const project = { id: String(process.env.PROJECT_ID) };
7
+
8
+ async function main() {
9
+ await mongoose.connect(<string>process.env.MONGOLAB_URI);
10
+
11
+ const acceptedOfferRepo = await chevre.repository.AcceptedOffer.createInstance(mongoose.connection);
12
+
13
+ let offerIds: string[];
14
+
15
+ // const searchConditions: chevre.factory.order.ISearchConditions = {
16
+ // limit: 10,
17
+ // page: 1,
18
+ // project: { id: { $eq: project.id } },
19
+ // orderNumbers: ['CIN1-3743286-2441943', 'CIN4-3943511-3323473'],
20
+ // acceptedOffers: { itemOffered: { typeOf: { $in: [chevre.factory.reservationType.EventReservation] } } }
21
+ // };
22
+ // let offerIds = await acceptedOfferRepo.__searchAcceptedOfferIds(searchConditions);
23
+ // console.log(offerIds);
24
+ offerIds = await acceptedOfferRepo.distinctValues(
25
+ { orderNumber: { $in: ['CIN1-3743286-2441943', 'CIN4-3943511-3323473'] } },
26
+ 'acceptedOffers.id'
27
+ );
28
+ console.log(offerIds);
29
+
30
+ const productIds = await acceptedOfferRepo.distinctValues(
31
+ { orderNumber: { $in: ['CIN1-3743286-2441943', 'CIN4-3943511-3323473'] } },
32
+ 'acceptedOffers.itemOffered.issuedThrough.id'
33
+ );
34
+ console.log(productIds);
35
+ }
36
+
37
+ main()
38
+ .then()
39
+ .catch(console.error);
@@ -5,16 +5,13 @@ type IProjection4searchWithUnwoundAcceptedOffers = {
5
5
  } & {
6
6
  _id?: 0 | 1;
7
7
  };
8
+ type IDistinctField = 'acceptedOffers.id' | 'acceptedOffers.itemOffered.reservationNumber' | 'acceptedOffers.itemOffered.reservationFor.id' | 'acceptedOffers.itemOffered.issuedThrough.id';
8
9
  /**
9
10
  * 注文オファーリポジトリ
10
11
  */
11
12
  export declare class MongoRepository {
12
13
  private readonly orderModel;
13
14
  constructor(connection: Connection);
14
- /**
15
- * 注文の受入オファーIDリストを検索する
16
- */
17
- searchAcceptedOfferIds(params: factory.order.ISearchConditions): Promise<(string)[]>;
18
15
  /**
19
16
  * オファー展開の注文検索
20
17
  */
@@ -24,21 +21,13 @@ export declare class MongoRepository {
24
21
  */
25
22
  searchAcceptedOffers(params: factory.order.ISearchConditions, inclusion?: (keyof factory.order.IAcceptedOffer<factory.order.IItemOffered>)[]): Promise<factory.order.IAcceptedOffer<factory.order.IItemOffered>[]>;
26
23
  /**
27
- * 注文に含まれる予約番号を検索する
28
- */
29
- searchReservationNumbersByOrderNumbers(params: {
30
- orderNumber: {
31
- $in: string[];
32
- };
33
- }): Promise<(string)[]>;
34
- /**
35
- * 注文に含まれるイベントIDを検索する
24
+ * 特定のフィールド値リストを検索する
36
25
  */
37
- searchReservationForIdsByOrderNumbers(params: {
26
+ distinctValues(filter: {
38
27
  orderNumber: {
39
28
  $in: string[];
40
29
  };
41
- }): Promise<string[]>;
30
+ }, field: IDistinctField): Promise<string[]>;
42
31
  /**
43
32
  * 注文に含まれるacceptedOffersを検索する
44
33
  */
@@ -20,33 +20,6 @@ class MongoRepository {
20
20
  constructor(connection) {
21
21
  this.orderModel = connection.model(order_1.modelName, (0, order_1.createSchema)());
22
22
  }
23
- /**
24
- * 注文の受入オファーIDリストを検索する
25
- */
26
- searchAcceptedOfferIds(params) {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- const conditions = order_2.MongoRepository.CREATE_MONGO_CONDITIONS(params);
29
- const query = this.orderModel.find((conditions.length > 0) ? { $and: conditions } : {})
30
- .select({
31
- 'acceptedOffers.id': 1
32
- });
33
- const orders = yield query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
34
- .exec()
35
- .then((docs) => docs.map((doc) => {
36
- return doc.toObject();
37
- }));
38
- const offerIds = orders.reduce((a, b) => {
39
- const offerIdsByOrder = (Array.isArray(b.acceptedOffers))
40
- ? b.acceptedOffers.filter((offer) => typeof offer.id === 'string')
41
- .map((offer) => {
42
- return String(offer.id);
43
- })
44
- : [];
45
- return [...a, ...offerIdsByOrder];
46
- }, []);
47
- return [...new Set(offerIds)];
48
- });
49
- }
50
23
  /**
51
24
  * オファー展開の注文検索
52
25
  */
@@ -127,38 +100,86 @@ class MongoRepository {
127
100
  .exec();
128
101
  });
129
102
  }
103
+ // public async __searchAcceptedOfferIds(
104
+ // params: factory.order.ISearchConditions
105
+ // ): Promise<(string)[]> {
106
+ // const conditions = OrderRepo.CREATE_MONGO_CONDITIONS(params);
107
+ // const query = this.orderModel.find<Document<any, any, { acceptedOffers: { id: string }[] }>>(
108
+ // (conditions.length > 0) ? { $and: conditions } : {}
109
+ // )
110
+ // .select({
111
+ // 'acceptedOffers.id': 1
112
+ // });
113
+ // const orders = await query.setOptions({ maxTimeMS: MONGO_MAX_TIME_MS })
114
+ // .exec()
115
+ // .then((docs) => docs.map((doc) => {
116
+ // return doc.toObject();
117
+ // }));
118
+ // const offerIds = orders.reduce<string[]>(
119
+ // (a, b) => {
120
+ // const offerIdsByOrder = (Array.isArray(b.acceptedOffers))
121
+ // ? b.acceptedOffers.filter((offer) => typeof offer.id === 'string')
122
+ // .map((offer) => {
123
+ // return String(offer.id);
124
+ // })
125
+ // : [];
126
+ // return [...a, ...offerIdsByOrder];
127
+ // },
128
+ // []
129
+ // );
130
+ // return [...new Set(offerIds)];
131
+ // }
130
132
  /**
131
- * 注文に含まれる予約番号を検索する
132
- */
133
- searchReservationNumbersByOrderNumbers(params) {
134
- return __awaiter(this, void 0, void 0, function* () {
135
- if (!Array.isArray(params.orderNumber.$in) || params.orderNumber.$in.length === 0) {
136
- return [];
137
- }
138
- return this.orderModel.distinct('acceptedOffers.itemOffered.reservationNumber', {
139
- 'acceptedOffers.itemOffered.reservationNumber': { $exists: true },
140
- orderNumber: { $in: params.orderNumber.$in }
141
- })
142
- .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
143
- .exec();
144
- });
145
- }
146
- /**
147
- * 注文に含まれるイベントIDを検索する
133
+ * 特定のフィールド値リストを検索する
148
134
  */
149
- searchReservationForIdsByOrderNumbers(params) {
135
+ distinctValues(filter, field) {
150
136
  return __awaiter(this, void 0, void 0, function* () {
151
- if (!Array.isArray(params.orderNumber.$in) || params.orderNumber.$in.length === 0) {
137
+ if (!Array.isArray(filter.orderNumber.$in) || filter.orderNumber.$in.length === 0) {
152
138
  return [];
153
139
  }
154
- return this.orderModel.distinct('acceptedOffers.itemOffered.reservationFor.id', {
155
- 'acceptedOffers.itemOffered.reservationFor.id': { $exists: true },
156
- orderNumber: { $in: params.orderNumber.$in }
157
- })
140
+ const filterQuery = {
141
+ orderNumber: { $in: filter.orderNumber.$in }
142
+ };
143
+ filterQuery[field] = { $exists: true };
144
+ return this.orderModel.distinct(field, filterQuery)
158
145
  .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
159
146
  .exec();
160
147
  });
161
148
  }
149
+ // public async searchReservationNumbersByOrderNumbers(
150
+ // params: {
151
+ // orderNumber: { $in: string[] };
152
+ // }
153
+ // ): Promise<(string)[]> {
154
+ // if (!Array.isArray(params.orderNumber.$in) || params.orderNumber.$in.length === 0) {
155
+ // return [];
156
+ // }
157
+ // return this.orderModel.distinct(
158
+ // 'acceptedOffers.itemOffered.reservationNumber',
159
+ // {
160
+ // 'acceptedOffers.itemOffered.reservationNumber': { $exists: true },
161
+ // orderNumber: { $in: params.orderNumber.$in }
162
+ // })
163
+ // .setOptions({ maxTimeMS: MONGO_MAX_TIME_MS })
164
+ // .exec();
165
+ // }
166
+ // public async searchReservationForIdsByOrderNumbers(
167
+ // params: {
168
+ // orderNumber: { $in: string[] };
169
+ // }
170
+ // ): Promise<string[]> {
171
+ // if (!Array.isArray(params.orderNumber.$in) || params.orderNumber.$in.length === 0) {
172
+ // return [];
173
+ // }
174
+ // return this.orderModel.distinct(
175
+ // 'acceptedOffers.itemOffered.reservationFor.id',
176
+ // {
177
+ // 'acceptedOffers.itemOffered.reservationFor.id': { $exists: true },
178
+ // orderNumber: { $in: params.orderNumber.$in }
179
+ // })
180
+ // .setOptions({ maxTimeMS: MONGO_MAX_TIME_MS })
181
+ // .exec();
182
+ // }
162
183
  /**
163
184
  * 注文に含まれるacceptedOffersを検索する
164
185
  */
@@ -58,12 +58,12 @@ function onAuthorizationCreated(params) {
58
58
  // 注文検索
59
59
  const orderNumber = authorizationObject.orderNumber;
60
60
  if (typeof orderNumber === 'string' && orderNumber.length > 0) {
61
- reservationNumbers = yield repos.acceptedOffer.searchReservationNumbersByOrderNumbers({
61
+ reservationNumbers = yield repos.acceptedOffer.distinctValues({
62
62
  orderNumber: { $in: [orderNumber] }
63
- });
64
- reservationForIds = yield repos.acceptedOffer.searchReservationForIdsByOrderNumbers({
63
+ }, 'acceptedOffers.itemOffered.reservationNumber');
64
+ reservationForIds = yield repos.acceptedOffer.distinctValues({
65
65
  orderNumber: { $in: [orderNumber] }
66
- });
66
+ }, 'acceptedOffers.itemOffered.reservationFor.id');
67
67
  // const order: Pick<factory.order.IOrder, 'acceptedOffers'> = await repos.order.findByOrderNumber(
68
68
  // {
69
69
  // orderNumber,
@@ -181,14 +181,23 @@ function fixOrders(params) {
181
181
  if (orders.length !== params.object.order.length) {
182
182
  throw new factory.errors.NotFound('Order');
183
183
  }
184
- const offerIds = yield repos.acceptedOffer.searchAcceptedOfferIds({
185
- project: { id: { $eq: params.project.id } },
186
- confirmationNumbers: [params.object.order[0].confirmationNumber],
187
- orderNumbers: [params.object.order[0].orderNumber]
188
- });
189
- const eventIds = yield repos.acceptedOffer.searchReservationForIdsByOrderNumbers({
184
+ // const offerIds = await repos.acceptedOffer.searchAcceptedOfferIds({
185
+ // project: { id: { $eq: params.project.id } },
186
+ // confirmationNumbers: [params.object.order[0].confirmationNumber],
187
+ // orderNumbers: [params.object.order[0].orderNumber]
188
+ // });
189
+ // const offerIds = await repos.acceptedOffer.searchAcceptedOfferIds({
190
+ // orderNumber: { $in: [params.object.order[0].orderNumber] }
191
+ // });
192
+ const offerIds = yield repos.acceptedOffer.distinctValues({
190
193
  orderNumber: { $in: [params.object.order[0].orderNumber] }
191
- });
194
+ }, 'acceptedOffers.id');
195
+ // const eventIds = await repos.acceptedOffer.searchReservationForIdsByOrderNumbers({
196
+ // orderNumber: { $in: [params.object.order[0].orderNumber] }
197
+ // });
198
+ const eventIds = yield repos.acceptedOffer.distinctValues({
199
+ orderNumber: { $in: [params.object.order[0].orderNumber] }
200
+ }, 'acceptedOffers.itemOffered.reservationFor.id');
192
201
  const acceptedOffers = yield repos.acceptedOffer.searchAcceptedOffersByOrderNumbers({
193
202
  orderNumber: { $in: [params.object.order[0].orderNumber] }
194
203
  });
@@ -208,9 +217,12 @@ function checkUsedReservationExists(params) {
208
217
  return (repos) => __awaiter(this, void 0, void 0, function* () {
209
218
  let usedReservationExists = false;
210
219
  // 注文に含まれる予約の状態検証
211
- const reservationNumbers = yield repos.acceptedOffer.searchReservationNumbersByOrderNumbers({
220
+ // const reservationNumbers = await repos.acceptedOffer.searchReservationNumbersByOrderNumbers({
221
+ // orderNumber: { $in: params.orders.map((order) => order.orderNumber) }
222
+ // });
223
+ const reservationNumbers = yield repos.acceptedOffer.distinctValues({
212
224
  orderNumber: { $in: params.orders.map((order) => order.orderNumber) }
213
- });
225
+ }, 'acceptedOffers.itemOffered.reservationNumber');
214
226
  if (reservationNumbers.length > 0) {
215
227
  // 使用済の予約がひとつでもあれば不可
216
228
  const existingUsedReservations = yield repos.reservation.search({
package/package.json CHANGED
@@ -115,5 +115,5 @@
115
115
  "postversion": "git push origin --tags",
116
116
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
117
117
  },
118
- "version": "21.18.0-alpha.6"
118
+ "version": "21.18.0-alpha.7"
119
119
  }