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

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.
@@ -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,
@@ -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 = 'xxx';
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);
@@ -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
  /**
@@ -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,31 @@ 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');
280
+ }
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) } } });
268
287
  }
269
- const projectMembers = yield query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
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));
273
303
  });
274
304
  }
275
305
  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.26"
121
121
  }