@chevre/domain 21.4.0-alpha.25 → 21.4.0-alpha.27

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,31 @@
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
+ const memberId = String(process.env.MEMBER_ID);
8
+
9
+ async function main() {
10
+ await mongoose.connect(<string>process.env.MONGOLAB_URI);
11
+
12
+ const memberRepo = new chevre.repository.Member(mongoose.connection);
13
+
14
+ const ids = await memberRepo.searchMemberOfIdsByMemberId({
15
+ member: {
16
+ id: memberId,
17
+ memberOf: {
18
+ // typeOf: chevre.factory.organizationType.Corporation,
19
+ typeOf: chevre.factory.organizationType.Project
20
+ }
21
+ },
22
+ project: {
23
+ id: PROJECT_ID
24
+ }
25
+ });
26
+ console.log(ids);
27
+ }
28
+
29
+ main()
30
+ .then(console.log)
31
+ .catch(console.error);
@@ -0,0 +1,32 @@
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
+ const memberId = String(process.env.MEMBER_ID);
8
+
9
+ async function main() {
10
+ await mongoose.connect(<string>process.env.MONGOLAB_URI);
11
+
12
+ const memberRepo = new chevre.repository.Member(mongoose.connection);
13
+
14
+ const ids = await memberRepo.searchProjectIdsByMemberId({
15
+ member: {
16
+ id: memberId
17
+ },
18
+ project: {
19
+ id: {
20
+ // $regex: 'c'
21
+ }
22
+ },
23
+ limit: 3,
24
+ page: 1
25
+
26
+ });
27
+ console.log(ids);
28
+ }
29
+
30
+ main()
31
+ .then(console.log)
32
+ .catch(console.error);
@@ -35,7 +35,7 @@ async function main() {
35
35
  } else {
36
36
  console.log(
37
37
  'updating reservation...', iamMember.project.id, iamMember.member.id, iamMember.member.typeOf, memberOfId, i);
38
- await memberRepo.updateByMemberId({
38
+ await memberRepo.updateByMemberMemberOf({
39
39
  project: { id: iamMember.project.id },
40
40
  member: {
41
41
  id: iamMember.member.id,
@@ -75,11 +75,26 @@ export declare class MongoRepository {
75
75
  id: string;
76
76
  };
77
77
  member: {
78
- hasRole?: factory.iam.IMemberHasRole;
79
78
  id: string;
79
+ memberOf: {
80
+ id: string;
81
+ typeOf: factory.organizationType.Project;
82
+ };
83
+ hasRole?: factory.iam.IMemberHasRole;
80
84
  image?: string;
81
85
  name?: string;
82
- memberOf?: {
86
+ };
87
+ }): Promise<void>;
88
+ /**
89
+ * 互換性維持プログラム専用
90
+ */
91
+ updateByMemberMemberOf(params: {
92
+ project: {
93
+ id: string;
94
+ };
95
+ member: {
96
+ id: string;
97
+ memberOf: {
83
98
  id: string;
84
99
  typeOf: factory.organizationType.Project;
85
100
  };
@@ -94,6 +109,14 @@ export declare class MongoRepository {
94
109
  };
95
110
  member: {
96
111
  id: string;
112
+ memberOf: {
113
+ id: {
114
+ $eq: string;
115
+ };
116
+ typeOf: {
117
+ $eq: factory.organizationType.Project;
118
+ };
119
+ };
97
120
  };
98
121
  }): Promise<void>;
99
122
  /**
@@ -111,5 +134,20 @@ export declare class MongoRepository {
111
134
  limit: number;
112
135
  page: number;
113
136
  }): Promise<string[]>;
137
+ /**
138
+ * member.memberOf.typeOfからmember.memberOf.idのリストを検索する
139
+ * 権限を持つ販売者IDの検索など
140
+ */
141
+ searchMemberOfIdsByMemberId(params: {
142
+ member: {
143
+ id: string;
144
+ memberOf: {
145
+ typeOf: factory.organizationType.Project | factory.organizationType.Corporation;
146
+ };
147
+ };
148
+ project: {
149
+ id: string;
150
+ };
151
+ }): Promise<string[]>;
114
152
  getCursor(conditions: any, projection: any): import("mongoose").Cursor<any, import("mongoose").QueryOptions<any>>;
115
153
  }
@@ -222,12 +222,30 @@ class MongoRepository {
222
222
  * メンバー更新
223
223
  */
224
224
  updateByMemberId(params) {
225
- var _a;
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ const doc = yield this.memberModel.findOneAndUpdate({
227
+ 'project.id': { $eq: params.project.id },
228
+ 'member.id': { $eq: params.member.id },
229
+ 'member.memberOf.id': { $eq: params.member.memberOf.id },
230
+ 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf }
231
+ }, Object.assign(Object.assign(Object.assign({ updatedAt: new Date() }, (Array.isArray(params.member.hasRole)) ? { 'member.hasRole': params.member.hasRole } : undefined), (typeof params.member.image === 'string') ? { 'member.image': params.member.image } : undefined), (typeof params.member.name === 'string') ? { 'member.name': params.member.name } : undefined))
232
+ .exec();
233
+ if (doc === null) {
234
+ throw new factory.errors.NotFound(this.memberModel.modelName);
235
+ }
236
+ });
237
+ }
238
+ /**
239
+ * 互換性維持プログラム専用
240
+ */
241
+ updateByMemberMemberOf(params) {
226
242
  return __awaiter(this, void 0, void 0, function* () {
227
243
  const doc = yield this.memberModel.findOneAndUpdate({
228
244
  'project.id': { $eq: params.project.id },
229
245
  'member.id': { $eq: params.member.id }
230
- }, Object.assign(Object.assign(Object.assign(Object.assign({ updatedAt: new Date() }, (Array.isArray(params.member.hasRole)) ? { 'member.hasRole': params.member.hasRole } : undefined), (typeof params.member.image === 'string') ? { 'member.image': params.member.image } : undefined), (typeof params.member.name === 'string') ? { 'member.name': params.member.name } : undefined), (typeof ((_a = params.member.memberOf) === null || _a === void 0 ? void 0 : _a.id) === 'string') ? { 'member.memberOf': params.member.memberOf } : undefined))
246
+ }, {
247
+ 'member.memberOf': params.member.memberOf
248
+ })
231
249
  .exec();
232
250
  if (doc === null) {
233
251
  throw new factory.errors.NotFound(this.memberModel.modelName);
@@ -241,7 +259,9 @@ class MongoRepository {
241
259
  return __awaiter(this, void 0, void 0, function* () {
242
260
  const doc = yield this.memberModel.findOneAndDelete({
243
261
  'project.id': { $eq: params.project.id },
244
- 'member.id': { $eq: params.member.id }
262
+ 'member.id': { $eq: params.member.id },
263
+ 'member.memberOf.id': { $eq: params.member.memberOf.id.$eq },
264
+ 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf.$eq }
245
265
  })
246
266
  .exec();
247
267
  if (doc === null) {
@@ -255,21 +275,46 @@ class MongoRepository {
255
275
  searchProjectIdsByMemberId(params) {
256
276
  var _a, _b;
257
277
  return __awaiter(this, void 0, void 0, function* () {
258
- const searchConditions = Object.assign({ 'member.id': { $eq: params.member.id } }, (typeof ((_b = (_a = params.project) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.$regex) === 'string' && params.project.id.$regex.length > 0)
259
- ? { 'project.id': { $regex: new RegExp(params.project.id.$regex) } }
260
- : undefined);
261
- const query = this.memberModel.find(searchConditions, { project: 1 })
262
- // sortを保証する
263
- .sort({ 'project.id': factory.sortType.Ascending });
264
- if (typeof params.limit === 'number' && params.limit > 0) {
265
- const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
266
- query.limit(params.limit)
267
- .skip(params.limit * (page - 1));
278
+ if (typeof params.limit !== 'number') {
279
+ throw new factory.errors.ArgumentNull('limit');
268
280
  }
269
- const projectMembers = yield query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
281
+ if (typeof params.page !== 'number') {
282
+ throw new factory.errors.ArgumentNull('page');
283
+ }
284
+ const matchStages = [{ $match: { 'member.id': { $eq: params.member.id } } }];
285
+ if (typeof ((_b = (_a = params.project) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.$regex) === 'string' && params.project.id.$regex.length > 0) {
286
+ matchStages.push({ $match: { 'project.id': { $regex: new RegExp(params.project.id.$regex) } } });
287
+ }
288
+ const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
289
+ const aggregate = this.memberModel.aggregate([
290
+ ...matchStages,
291
+ {
292
+ $group: {
293
+ _id: '$project.id'
294
+ }
295
+ },
296
+ { $sort: { _id: factory.sortType.Ascending } }
297
+ ])
298
+ .limit(params.limit * page)
299
+ .skip(params.limit * (page - 1));
300
+ return aggregate
270
301
  .exec()
271
- .then((docs) => docs.map((doc) => doc.toObject()));
272
- return projectMembers.map((m) => m.project.id);
302
+ .then((docs) => docs.map((doc) => doc._id));
303
+ });
304
+ }
305
+ /**
306
+ * member.memberOf.typeOfからmember.memberOf.idのリストを検索する
307
+ * 権限を持つ販売者IDの検索など
308
+ */
309
+ searchMemberOfIdsByMemberId(params) {
310
+ return __awaiter(this, void 0, void 0, function* () {
311
+ const query = this.memberModel.distinct('member.memberOf.id', {
312
+ 'project.id': { $eq: params.project.id },
313
+ 'member.id': { $eq: params.member.id },
314
+ 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf }
315
+ });
316
+ return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
317
+ .exec();
273
318
  });
274
319
  }
275
320
  getCursor(conditions, projection) {
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  "postversion": "git push origin --tags",
118
118
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
119
119
  },
120
- "version": "21.4.0-alpha.25"
120
+ "version": "21.4.0-alpha.27"
121
121
  }