@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.
- package/example/src/chevre/iam/searchMemberOfIdsByMemberId.ts +31 -0
- package/example/src/chevre/iam/searchProjectIdsByMemberId.ts +32 -0
- package/example/src/chevre/migrateIAMMemberMemberOf.ts +1 -1
- package/lib/chevre/repo/member.d.ts +40 -2
- package/lib/chevre/repo/member.js +61 -16
- package/package.json +1 -1
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
259
|
-
|
|
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
|
-
|
|
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.
|
|
272
|
-
|
|
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