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

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,59 @@
1
+ // tslint:disable:no-console
2
+ // import * as moment from 'moment';
3
+ import * as mongoose from 'mongoose';
4
+
5
+ import { chevre } from '../../../lib/index';
6
+
7
+ // const project = { id: String(process.env.PROJECT_ID) };
8
+ // const EXCLUDED_PROJECT_ID = process.env.EXCLUDED_PROJECT_ID;
9
+
10
+ // tslint:disable-next-line:max-func-body-length
11
+ async function main() {
12
+ await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: true });
13
+
14
+ const memberRepo = new chevre.repository.Member(mongoose.connection);
15
+
16
+ const cursor = memberRepo.getCursor(
17
+ {},
18
+ {
19
+ // _id: 1,
20
+ }
21
+ );
22
+ console.log('members found');
23
+
24
+ let i = 0;
25
+ let updateCount = 0;
26
+ await cursor.eachAsync(async (doc) => {
27
+ i += 1;
28
+ const iamMember: chevre.factory.iam.IMember = doc.toObject();
29
+
30
+ const memberOfId = iamMember.member.memberOf?.id;
31
+ const alreadyMigrated = typeof memberOfId === 'string';
32
+
33
+ if (alreadyMigrated) {
34
+ console.log('already exist...', iamMember.project.id, iamMember.member.id, iamMember.member.typeOf, memberOfId, i);
35
+ } else {
36
+ console.log(
37
+ 'updating reservation...', iamMember.project.id, iamMember.member.id, iamMember.member.typeOf, memberOfId, i);
38
+ await memberRepo.updateByMemberId({
39
+ project: { id: iamMember.project.id },
40
+ member: {
41
+ id: iamMember.member.id,
42
+ memberOf: {
43
+ id: iamMember.project.id,
44
+ typeOf: chevre.factory.organizationType.Project
45
+ }
46
+ }
47
+ });
48
+ updateCount += 1;
49
+ console.log('updated.', iamMember.project.id, iamMember.member.id, iamMember.member.typeOf, memberOfId, i);
50
+ }
51
+ });
52
+
53
+ console.log(i, 'members checked');
54
+ console.log(updateCount, 'members updated');
55
+ }
56
+
57
+ main()
58
+ .then()
59
+ .catch(console.error);
@@ -9,7 +9,7 @@ import { chevre } from '../../../lib/index';
9
9
 
10
10
  // tslint:disable-next-line:max-func-body-length
11
11
  async function main() {
12
- await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: true });
12
+ await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
13
13
 
14
14
  const reservationRepo = new chevre.repository.Reservation(mongoose.connection);
15
15
  const placeRepo = new chevre.repository.Place(mongoose.connection);
@@ -22,9 +22,11 @@ async function main() {
22
22
  ]
23
23
  },
24
24
  // bookingTime: {
25
- // $gte: moment('2023-06-09T00:00:00Z')
25
+ // $gte: moment('2022-07-01T00:00:00Z')
26
+ // .toDate(),
27
+ // $lte: moment('2022-03-01T00:00:00Z')
26
28
  // .toDate()
27
- // }
29
+ // },
28
30
  'provider.id': { $exists: false }
29
31
  },
30
32
  {
@@ -15,24 +15,16 @@ async function main() {
15
15
 
16
16
  let now: Date;
17
17
 
18
- // let now = new Date();
19
- // const aggregateRoleNamesResult = await memberRepo.aggregateRoleNames({
20
- // project: { id: { $eq: PROJECT_ID } },
21
- // member: { id: { $eq: memberId } }
22
- // });
23
-
24
- // const aggregatePermissionsResult = await roleRepo.aggregatePermissions({
25
- // roleName: {
26
- // $in: aggregateRoleNamesResult.map((r) => r.roleName)
27
- // }
28
- // });
29
- // console.log('time cost:', moment()
30
- // .diff(now));
31
-
32
18
  now = new Date();
33
19
  const searchPermissionsResult = await chevre.service.iam.searchPermissions({
34
20
  project: { id: PROJECT_ID },
35
- member: { id: memberId }
21
+ member: {
22
+ id: memberId,
23
+ memberOf: {
24
+ id: PROJECT_ID,
25
+ typeOf: chevre.factory.organizationType.Project
26
+ }
27
+ }
36
28
  })({
37
29
  member: memberRepo,
38
30
  role: roleRepo
@@ -1,3 +1,27 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
1
25
  import { Connection } from 'mongoose';
2
26
  import * as factory from '../factory';
3
27
  /**
@@ -19,6 +43,14 @@ export declare class MongoRepository {
19
43
  id: {
20
44
  $eq: string;
21
45
  };
46
+ memberOf: {
47
+ id: {
48
+ $eq: string;
49
+ };
50
+ typeOf: {
51
+ $eq: factory.organizationType.Project;
52
+ };
53
+ };
22
54
  };
23
55
  }): Promise<{
24
56
  roleName: string;
@@ -47,6 +79,10 @@ export declare class MongoRepository {
47
79
  id: string;
48
80
  image?: string;
49
81
  name?: string;
82
+ memberOf?: {
83
+ id: string;
84
+ typeOf: factory.organizationType.Project;
85
+ };
50
86
  };
51
87
  }): Promise<void>;
52
88
  /**
@@ -75,4 +111,5 @@ export declare class MongoRepository {
75
111
  limit: number;
76
112
  page: number;
77
113
  }): Promise<string[]>;
114
+ getCursor(conditions: any, projection: any): import("mongoose").Cursor<any, import("mongoose").QueryOptions<any>>;
78
115
  }
@@ -22,7 +22,7 @@ class MongoRepository {
22
22
  }
23
23
  // tslint:disable-next-line:cyclomatic-complexity max-func-body-length
24
24
  static CREATE_MONGO_CONDITIONS(params) {
25
- var _a, _b, _c, _d, _e, _f, _g;
25
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
26
26
  const andConditions = [];
27
27
  // tslint:disable-next-line:no-single-line-block-comment
28
28
  /* istanbul ignore else */
@@ -48,6 +48,14 @@ class MongoRepository {
48
48
  }
49
49
  }
50
50
  }
51
+ const memberMemberOfTypeOfEq = (_c = (_b = (_a = params.member) === null || _a === void 0 ? void 0 : _a.memberOf) === null || _b === void 0 ? void 0 : _b.typeOf) === null || _c === void 0 ? void 0 : _c.$eq;
52
+ if (typeof memberMemberOfTypeOfEq === 'string') {
53
+ andConditions.push({ 'member.memberOf.typeOf': { $eq: memberMemberOfTypeOfEq } });
54
+ }
55
+ const memberMemberOfIdEq = (_f = (_e = (_d = params.member) === null || _d === void 0 ? void 0 : _d.memberOf) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.$eq;
56
+ if (typeof memberMemberOfIdEq === 'string') {
57
+ andConditions.push({ 'member.memberOf.id': { $eq: memberMemberOfIdEq } });
58
+ }
51
59
  // tslint:disable-next-line:no-single-line-block-comment
52
60
  /* istanbul ignore else */
53
61
  if (params.member !== undefined && params.member !== null) {
@@ -71,7 +79,7 @@ class MongoRepository {
71
79
  }
72
80
  }
73
81
  }
74
- const memberIdIn = (_b = (_a = params.member) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.$in;
82
+ const memberIdIn = (_h = (_g = params.member) === null || _g === void 0 ? void 0 : _g.id) === null || _h === void 0 ? void 0 : _h.$in;
75
83
  if (Array.isArray(memberIdIn)) {
76
84
  andConditions.push({
77
85
  'member.id': {
@@ -79,7 +87,7 @@ class MongoRepository {
79
87
  }
80
88
  });
81
89
  }
82
- const memberNameRegex = (_d = (_c = params.member) === null || _c === void 0 ? void 0 : _c.name) === null || _d === void 0 ? void 0 : _d.$regex;
90
+ const memberNameRegex = (_k = (_j = params.member) === null || _j === void 0 ? void 0 : _j.name) === null || _k === void 0 ? void 0 : _k.$regex;
83
91
  if (typeof memberNameRegex === 'string' && memberNameRegex.length > 0) {
84
92
  andConditions.push({
85
93
  'member.name': {
@@ -88,7 +96,7 @@ class MongoRepository {
88
96
  }
89
97
  });
90
98
  }
91
- const memberHasRoleRoleNameEq = (_g = (_f = (_e = params.member) === null || _e === void 0 ? void 0 : _e.hasRole) === null || _f === void 0 ? void 0 : _f.roleName) === null || _g === void 0 ? void 0 : _g.$eq;
99
+ const memberHasRoleRoleNameEq = (_o = (_m = (_l = params.member) === null || _l === void 0 ? void 0 : _l.hasRole) === null || _m === void 0 ? void 0 : _m.roleName) === null || _o === void 0 ? void 0 : _o.$eq;
92
100
  if (typeof memberHasRoleRoleNameEq === 'string') {
93
101
  andConditions.push({
94
102
  'member.hasRole.roleName': {
@@ -136,7 +144,9 @@ class MongoRepository {
136
144
  return __awaiter(this, void 0, void 0, function* () {
137
145
  const matchStages = [
138
146
  { $match: { 'project.id': { $eq: params.project.id.$eq } } },
139
- { $match: { 'member.id': { $eq: params.member.id.$eq } } }
147
+ { $match: { 'member.id': { $eq: params.member.id.$eq } } },
148
+ { $match: { 'member.memberOf.id': { $eq: params.member.memberOf.id.$eq } } },
149
+ { $match: { 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf.$eq } } }
140
150
  ];
141
151
  const aggregate = this.memberModel.aggregate([
142
152
  // ...(typeof params.sort?.productID === 'number')
@@ -212,11 +222,12 @@ class MongoRepository {
212
222
  * メンバー更新
213
223
  */
214
224
  updateByMemberId(params) {
225
+ var _a;
215
226
  return __awaiter(this, void 0, void 0, function* () {
216
227
  const doc = yield this.memberModel.findOneAndUpdate({
217
228
  'project.id': { $eq: params.project.id },
218
229
  'member.id': { $eq: params.member.id }
219
- }, 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))
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))
220
231
  .exec();
221
232
  if (doc === null) {
222
233
  throw new factory.errors.NotFound(this.memberModel.modelName);
@@ -261,5 +272,10 @@ class MongoRepository {
261
272
  return projectMembers.map((m) => m.project.id);
262
273
  });
263
274
  }
275
+ getCursor(conditions, projection) {
276
+ return this.memberModel.find(conditions, projection)
277
+ .sort({ 'member.id': factory.sortType.Ascending })
278
+ .cursor();
279
+ }
264
280
  }
265
281
  exports.MongoRepository = MongoRepository;
@@ -25,7 +25,7 @@
25
25
  import { Schema } from 'mongoose';
26
26
  declare const modelName = "Member";
27
27
  /**
28
- * プロジェクトメンバースキーマ
28
+ * IAMメンバースキーマ
29
29
  */
30
30
  declare const schema: Schema<any, import("mongoose").Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
31
31
  collection: string;
@@ -53,16 +53,16 @@ declare const schema: Schema<any, import("mongoose").Model<any, any, any, any, a
53
53
  };
54
54
  }, {
55
55
  typeOf: string;
56
- project?: any;
57
- member?: any;
56
+ project: any;
57
+ member: any;
58
58
  }, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<{
59
59
  typeOf: string;
60
- project?: any;
61
- member?: any;
60
+ project: any;
61
+ member: any;
62
62
  }>> & Omit<import("mongoose").FlatRecord<{
63
63
  typeOf: string;
64
- project?: any;
65
- member?: any;
64
+ project: any;
65
+ member: any;
66
66
  }> & {
67
67
  _id: import("mongoose").Types.ObjectId;
68
68
  }, never>>;
@@ -6,15 +6,21 @@ const writeConcern_1 = require("../writeConcern");
6
6
  const modelName = 'Member';
7
7
  exports.modelName = modelName;
8
8
  /**
9
- * プロジェクトメンバースキーマ
9
+ * IAMメンバースキーマ
10
10
  */
11
11
  const schema = new mongoose_1.Schema({
12
- project: mongoose_1.SchemaTypes.Mixed,
12
+ project: {
13
+ type: mongoose_1.SchemaTypes.Mixed,
14
+ required: true
15
+ },
13
16
  typeOf: {
14
17
  type: String,
15
18
  required: true
16
19
  },
17
- member: mongoose_1.SchemaTypes.Mixed
20
+ member: {
21
+ type: mongoose_1.SchemaTypes.Mixed,
22
+ required: true
23
+ }
18
24
  }, {
19
25
  collection: 'members',
20
26
  id: true,
@@ -43,9 +49,7 @@ const schema = new mongoose_1.Schema({
43
49
  exports.schema = schema;
44
50
  schema.index({ createdAt: 1 }, { name: 'searchByCreatedAt' });
45
51
  schema.index({ updatedAt: 1 }, { name: 'searchByUpdatedAt' });
46
- schema.index({ 'member.id': 1 }, {
47
- name: 'searchByMemberId'
48
- });
52
+ schema.index({ 'member.id': 1 }, { name: 'searchByMemberId' });
49
53
  schema.index({ 'project.id': 1, 'member.id': 1 }, {
50
54
  name: 'uniqueProjectMember',
51
55
  unique: true
@@ -62,3 +66,5 @@ schema.index({ 'member.hasRole.roleName': 1, 'member.id': 1 }, {
62
66
  'member.hasRole.roleName': { $exists: true }
63
67
  }
64
68
  });
69
+ schema.index({ 'member.memberOf.typeOf': 1, 'member.id': 1 }, { name: 'searchByMemberMemberOfTypeOf' });
70
+ schema.index({ 'member.memberOf.id': 1, 'member.id': 1 }, { name: 'searchByMemberMemberOfId' });
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { MongoRepository as MemberRepo } from '../repo/member';
5
5
  import { MongoRepository as RoleRepo } from '../repo/role';
6
+ import * as factory from '../factory';
6
7
  export type IPermission = string;
7
8
  /**
8
9
  * プロジェクトメンバーの権限を検索する
@@ -13,6 +14,10 @@ export declare function searchPermissions(params: {
13
14
  };
14
15
  member: {
15
16
  id: string;
17
+ memberOf: {
18
+ id: string;
19
+ typeOf: factory.organizationType.Project;
20
+ };
16
21
  };
17
22
  }): (repos: {
18
23
  member: MemberRepo;
@@ -18,30 +18,18 @@ function searchPermissions(params) {
18
18
  let permissions = [];
19
19
  const hasRole = yield repos.member.aggregateRoleNames({
20
20
  project: { id: { $eq: params.project.id } },
21
- member: { id: { $eq: params.member.id } }
21
+ member: {
22
+ id: { $eq: params.member.id },
23
+ memberOf: {
24
+ id: { $eq: params.member.memberOf.id },
25
+ typeOf: { $eq: params.member.memberOf.typeOf }
26
+ }
27
+ }
22
28
  });
23
29
  if (hasRole.length > 0) {
24
30
  permissions = yield repos.role.aggregatePermissions({ roleName: { $in: hasRole.map((r) => r.roleName) } });
25
31
  }
26
32
  return { hasRole, permissions };
27
- // let permissions: IPermission[] = [];
28
- // const projectMembers = await repos.member.search({
29
- // project: { id: { $eq: params.project.id } },
30
- // member: { id: { $eq: params.member.id } }
31
- // });
32
- // // 持っているロールを検索
33
- // const roleNames = projectMembers.reduce<string[]>(
34
- // (a, b) => [...a, ...(Array.isArray(b.member.hasRole)) ? b.member.hasRole.map((r) => r.roleName) : []],
35
- // []
36
- // );
37
- // const roles = await repos.role.search({ roleName: { $in: roleNames } });
38
- // // 権限をまとめる
39
- // permissions = roles.reduce<string[]>(
40
- // (a, b) => [...a, ...b.permissions],
41
- // []
42
- // );
43
- // permissions = [...new Set(permissions)];
44
- // return { roleNames, permissions };
45
33
  });
46
34
  }
47
35
  exports.searchPermissions = searchPermissions;
@@ -116,8 +116,10 @@ function reserveIfNotYet(params, options) {
116
116
  }
117
117
  }
118
118
  else {
119
+ // 旧予約取引に対して本処理が走る可能性がなくはないが、
120
+ // それらについては実質Confirmedの予約はすでに存在するはずなので、何もしない
119
121
  // 完全廃止(2023-07-19~)
120
- throw new factory.errors.NotImplemented('disablePendingReservations must be true');
122
+ // throw new factory.errors.NotImplemented('disablePendingReservations must be true');
121
123
  }
122
124
  }
123
125
  else {
package/package.json CHANGED
@@ -9,8 +9,8 @@
9
9
  }
10
10
  ],
11
11
  "dependencies": {
12
- "@chevre/factory": "4.316.0-alpha.4",
13
- "@cinerino/sdk": "3.161.0-alpha.0",
12
+ "@chevre/factory": "4.316.0-alpha.5",
13
+ "@cinerino/sdk": "3.162.0-alpha.1",
14
14
  "@motionpicture/coa-service": "9.2.0",
15
15
  "@motionpicture/gmo-service": "5.2.0",
16
16
  "@sendgrid/mail": "6.4.0",
@@ -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.23"
120
+ "version": "21.4.0-alpha.25"
121
121
  }