cnpmcore 3.77.0 → 3.78.0
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/dist/app/core/service/OrgService.d.ts +19 -0
- package/dist/app/core/service/OrgService.js +122 -0
- package/dist/app/core/service/TeamService.d.ts +16 -0
- package/dist/app/core/service/TeamService.js +111 -0
- package/dist/app/repository/OrgRepository.d.ts +7 -0
- package/dist/app/repository/OrgRepository.js +34 -1
- package/dist/app/repository/TeamRepository.d.ts +1 -0
- package/dist/app/repository/TeamRepository.js +8 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AbstractService } from '../../common/AbstractService';
|
|
2
|
+
import { Org } from '../entity/Org';
|
|
3
|
+
import { OrgMember } from '../entity/OrgMember';
|
|
4
|
+
export interface CreateOrgCmd {
|
|
5
|
+
name: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
creatorUserId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class OrgService extends AbstractService {
|
|
10
|
+
private readonly orgRepository;
|
|
11
|
+
private readonly teamRepository;
|
|
12
|
+
createOrg(cmd: CreateOrgCmd): Promise<Org>;
|
|
13
|
+
removeOrg(orgId: string): Promise<void>;
|
|
14
|
+
findOrgByName(name: string): Promise<Org | null>;
|
|
15
|
+
addMember(orgId: string, userId: string, role?: 'owner' | 'member'): Promise<OrgMember>;
|
|
16
|
+
removeMember(orgId: string, userId: string): Promise<void>;
|
|
17
|
+
listMembers(orgId: string): Promise<OrgMember[]>;
|
|
18
|
+
requiredOrgOwnerOrAdmin(orgId: string, userId: string, isAdmin: boolean): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OrgService = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
const egg_errors_1 = require("egg-errors");
|
|
15
|
+
const AbstractService_1 = require("../../common/AbstractService");
|
|
16
|
+
const constants_1 = require("../../common/constants");
|
|
17
|
+
const OrgRepository_1 = require("../../repository/OrgRepository");
|
|
18
|
+
const TeamRepository_1 = require("../../repository/TeamRepository");
|
|
19
|
+
const Org_1 = require("../entity/Org");
|
|
20
|
+
const OrgMember_1 = require("../entity/OrgMember");
|
|
21
|
+
const Team_1 = require("../entity/Team");
|
|
22
|
+
const TeamMember_1 = require("../entity/TeamMember");
|
|
23
|
+
let OrgService = class OrgService extends AbstractService_1.AbstractService {
|
|
24
|
+
async createOrg(cmd) {
|
|
25
|
+
const existing = await this.orgRepository.findOrgByName(cmd.name);
|
|
26
|
+
if (existing) {
|
|
27
|
+
throw new egg_errors_1.ForbiddenError(`Org "${cmd.name}" already exists`);
|
|
28
|
+
}
|
|
29
|
+
// Create org + developers team + owner + team member in one transaction
|
|
30
|
+
const org = Org_1.Org.create({
|
|
31
|
+
name: cmd.name,
|
|
32
|
+
description: cmd.description,
|
|
33
|
+
});
|
|
34
|
+
const developersTeam = Team_1.Team.create({
|
|
35
|
+
orgId: org.orgId,
|
|
36
|
+
name: constants_1.DEVELOPERS_TEAM,
|
|
37
|
+
description: 'default team',
|
|
38
|
+
});
|
|
39
|
+
const ownerMember = OrgMember_1.OrgMember.create({
|
|
40
|
+
orgId: org.orgId,
|
|
41
|
+
userId: cmd.creatorUserId,
|
|
42
|
+
role: 'owner',
|
|
43
|
+
});
|
|
44
|
+
const teamMember = TeamMember_1.TeamMember.create({
|
|
45
|
+
teamId: developersTeam.teamId,
|
|
46
|
+
userId: cmd.creatorUserId,
|
|
47
|
+
});
|
|
48
|
+
await this.orgRepository.createOrgCascade(org, developersTeam, ownerMember, teamMember);
|
|
49
|
+
this.logger.info('[OrgService:createOrg] orgId: %s, name: %s, creatorUserId: %s', org.orgId, org.name, cmd.creatorUserId);
|
|
50
|
+
return org;
|
|
51
|
+
}
|
|
52
|
+
async removeOrg(orgId) {
|
|
53
|
+
await this.orgRepository.removeOrgCascade(orgId);
|
|
54
|
+
this.logger.info('[OrgService:removeOrg] orgId: %s', orgId);
|
|
55
|
+
}
|
|
56
|
+
async findOrgByName(name) {
|
|
57
|
+
return await this.orgRepository.findOrgByName(name);
|
|
58
|
+
}
|
|
59
|
+
async addMember(orgId, userId, role = 'member') {
|
|
60
|
+
const org = await this.orgRepository.findOrgByOrgId(orgId);
|
|
61
|
+
if (!org) {
|
|
62
|
+
throw new egg_errors_1.NotFoundError('Org not found');
|
|
63
|
+
}
|
|
64
|
+
// Upsert org member
|
|
65
|
+
let member = await this.orgRepository.findMember(orgId, userId);
|
|
66
|
+
if (member) {
|
|
67
|
+
member.role = role;
|
|
68
|
+
await this.orgRepository.saveMember(member);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
member = OrgMember_1.OrgMember.create({ orgId, userId, role });
|
|
72
|
+
await this.orgRepository.saveMember(member);
|
|
73
|
+
}
|
|
74
|
+
// Auto-add to developers team
|
|
75
|
+
const developersTeam = await this.teamRepository.findTeam(orgId, constants_1.DEVELOPERS_TEAM);
|
|
76
|
+
if (developersTeam) {
|
|
77
|
+
const existingTeamMember = await this.teamRepository.findMember(developersTeam.teamId, userId);
|
|
78
|
+
if (!existingTeamMember) {
|
|
79
|
+
const teamMember = TeamMember_1.TeamMember.create({
|
|
80
|
+
teamId: developersTeam.teamId,
|
|
81
|
+
userId,
|
|
82
|
+
});
|
|
83
|
+
await this.teamRepository.addMember(teamMember);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.logger.info('[OrgService:addMember] orgId: %s, userId: %s, role: %s', orgId, userId, role);
|
|
87
|
+
return member;
|
|
88
|
+
}
|
|
89
|
+
async removeMember(orgId, userId) {
|
|
90
|
+
// Remove from all teams in this org
|
|
91
|
+
await this.teamRepository.removeMemberFromAllTeams(orgId, userId);
|
|
92
|
+
// Remove from org
|
|
93
|
+
await this.orgRepository.removeMember(orgId, userId);
|
|
94
|
+
this.logger.info('[OrgService:removeMember] orgId: %s, userId: %s', orgId, userId);
|
|
95
|
+
}
|
|
96
|
+
async listMembers(orgId) {
|
|
97
|
+
return await this.orgRepository.listMembers(orgId);
|
|
98
|
+
}
|
|
99
|
+
async requiredOrgOwnerOrAdmin(orgId, userId, isAdmin) {
|
|
100
|
+
if (isAdmin)
|
|
101
|
+
return;
|
|
102
|
+
const member = await this.orgRepository.findMember(orgId, userId);
|
|
103
|
+
if (!member || member.role !== 'owner') {
|
|
104
|
+
throw new egg_errors_1.ForbiddenError('Only org owner or admin can perform this action');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
exports.OrgService = OrgService;
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, tegg_1.Inject)(),
|
|
111
|
+
__metadata("design:type", OrgRepository_1.OrgRepository)
|
|
112
|
+
], OrgService.prototype, "orgRepository", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
(0, tegg_1.Inject)(),
|
|
115
|
+
__metadata("design:type", TeamRepository_1.TeamRepository)
|
|
116
|
+
], OrgService.prototype, "teamRepository", void 0);
|
|
117
|
+
exports.OrgService = OrgService = __decorate([
|
|
118
|
+
(0, tegg_1.SingletonProto)({
|
|
119
|
+
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
120
|
+
})
|
|
121
|
+
], OrgService);
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JnU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL3NlcnZpY2UvT3JnU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FJcUI7QUFDckIsMkNBQTJEO0FBQzNELGtFQUErRDtBQUMvRCxzREFBeUQ7QUFDekQsa0VBQStEO0FBQy9ELG9FQUFpRTtBQUNqRSx1Q0FBb0M7QUFDcEMsbURBQWdEO0FBQ2hELHlDQUFzQztBQUN0QyxxREFBa0Q7QUFXM0MsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLGlDQUFlO0lBTzdDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaUI7UUFDL0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLElBQUksMkJBQWMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7U0FDOUQ7UUFFRCx3RUFBd0U7UUFDeEUsTUFBTSxHQUFHLEdBQUcsU0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsV0FBSSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsSUFBSSxFQUFFLDJCQUFlO1lBQ3JCLFdBQVcsRUFBRSxjQUFjO1NBQzVCLENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLHFCQUFTLENBQUMsTUFBTSxDQUFDO1lBQ25DLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWE7WUFDekIsSUFBSSxFQUFFLE9B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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AbstractService } from '../../common/AbstractService';
|
|
2
|
+
import { Team } from '../entity/Team';
|
|
3
|
+
import { TeamMember } from '../entity/TeamMember';
|
|
4
|
+
import { TeamPackage } from '../entity/TeamPackage';
|
|
5
|
+
export declare class TeamService extends AbstractService {
|
|
6
|
+
private readonly orgRepository;
|
|
7
|
+
private readonly teamRepository;
|
|
8
|
+
createTeam(orgId: string, name: string, description?: string): Promise<Team>;
|
|
9
|
+
removeTeam(teamId: string): Promise<void>;
|
|
10
|
+
addMember(teamId: string, userId: string): Promise<TeamMember>;
|
|
11
|
+
removeMember(teamId: string, userId: string): Promise<void>;
|
|
12
|
+
listMembers(teamId: string): Promise<TeamMember[]>;
|
|
13
|
+
grantPackageAccess(teamId: string, packageId: string): Promise<TeamPackage>;
|
|
14
|
+
revokePackageAccess(teamId: string, packageId: string): Promise<void>;
|
|
15
|
+
listPackages(teamId: string): Promise<TeamPackage[]>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TeamService = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
const egg_errors_1 = require("egg-errors");
|
|
15
|
+
const AbstractService_1 = require("../../common/AbstractService");
|
|
16
|
+
const constants_1 = require("../../common/constants");
|
|
17
|
+
const OrgRepository_1 = require("../../repository/OrgRepository");
|
|
18
|
+
const TeamRepository_1 = require("../../repository/TeamRepository");
|
|
19
|
+
const Team_1 = require("../entity/Team");
|
|
20
|
+
const TeamMember_1 = require("../entity/TeamMember");
|
|
21
|
+
const TeamPackage_1 = require("../entity/TeamPackage");
|
|
22
|
+
let TeamService = class TeamService extends AbstractService_1.AbstractService {
|
|
23
|
+
async createTeam(orgId, name, description) {
|
|
24
|
+
const existing = await this.teamRepository.findTeam(orgId, name);
|
|
25
|
+
if (existing) {
|
|
26
|
+
throw new egg_errors_1.ForbiddenError(`Team "${name}" already exists`);
|
|
27
|
+
}
|
|
28
|
+
const team = Team_1.Team.create({
|
|
29
|
+
orgId,
|
|
30
|
+
name,
|
|
31
|
+
description,
|
|
32
|
+
});
|
|
33
|
+
await this.teamRepository.saveTeam(team);
|
|
34
|
+
this.logger.info('[TeamService:createTeam] teamId: %s, orgId: %s, name: %s', team.teamId, orgId, name);
|
|
35
|
+
return team;
|
|
36
|
+
}
|
|
37
|
+
async removeTeam(teamId) {
|
|
38
|
+
const team = await this.teamRepository.findTeamByTeamId(teamId);
|
|
39
|
+
if (!team) {
|
|
40
|
+
throw new egg_errors_1.NotFoundError('Team not found');
|
|
41
|
+
}
|
|
42
|
+
if (team.name === constants_1.DEVELOPERS_TEAM) {
|
|
43
|
+
throw new egg_errors_1.ForbiddenError('Cannot delete the developers team');
|
|
44
|
+
}
|
|
45
|
+
// Cascade: remove packages + members + team in one transaction
|
|
46
|
+
await this.teamRepository.removeTeamCascade(teamId);
|
|
47
|
+
this.logger.info('[TeamService:removeTeam] teamId: %s', teamId);
|
|
48
|
+
}
|
|
49
|
+
async addMember(teamId, userId) {
|
|
50
|
+
const team = await this.teamRepository.findTeamByTeamId(teamId);
|
|
51
|
+
if (!team) {
|
|
52
|
+
throw new egg_errors_1.NotFoundError('Team not found');
|
|
53
|
+
}
|
|
54
|
+
// Must be an org member
|
|
55
|
+
const orgMember = await this.orgRepository.findMember(team.orgId, userId);
|
|
56
|
+
if (!orgMember) {
|
|
57
|
+
throw new egg_errors_1.ForbiddenError('User must be an org member before joining a team');
|
|
58
|
+
}
|
|
59
|
+
const existing = await this.teamRepository.findMember(teamId, userId);
|
|
60
|
+
if (existing) {
|
|
61
|
+
return existing;
|
|
62
|
+
}
|
|
63
|
+
const member = TeamMember_1.TeamMember.create({ teamId, userId });
|
|
64
|
+
await this.teamRepository.addMember(member);
|
|
65
|
+
this.logger.info('[TeamService:addMember] teamId: %s, userId: %s', teamId, userId);
|
|
66
|
+
return member;
|
|
67
|
+
}
|
|
68
|
+
async removeMember(teamId, userId) {
|
|
69
|
+
await this.teamRepository.removeMember(teamId, userId);
|
|
70
|
+
this.logger.info('[TeamService:removeMember] teamId: %s, userId: %s', teamId, userId);
|
|
71
|
+
}
|
|
72
|
+
async listMembers(teamId) {
|
|
73
|
+
return await this.teamRepository.listMembers(teamId);
|
|
74
|
+
}
|
|
75
|
+
async grantPackageAccess(teamId, packageId) {
|
|
76
|
+
const team = await this.teamRepository.findTeamByTeamId(teamId);
|
|
77
|
+
if (!team) {
|
|
78
|
+
throw new egg_errors_1.NotFoundError('Team not found');
|
|
79
|
+
}
|
|
80
|
+
const existing = await this.teamRepository.findPackage(teamId, packageId);
|
|
81
|
+
if (existing) {
|
|
82
|
+
return existing;
|
|
83
|
+
}
|
|
84
|
+
const teamPackage = TeamPackage_1.TeamPackage.create({ teamId, packageId });
|
|
85
|
+
await this.teamRepository.addPackage(teamPackage);
|
|
86
|
+
this.logger.info('[TeamService:grantPackageAccess] teamId: %s, packageId: %s', teamId, packageId);
|
|
87
|
+
return teamPackage;
|
|
88
|
+
}
|
|
89
|
+
async revokePackageAccess(teamId, packageId) {
|
|
90
|
+
await this.teamRepository.removePackage(teamId, packageId);
|
|
91
|
+
this.logger.info('[TeamService:revokePackageAccess] teamId: %s, packageId: %s', teamId, packageId);
|
|
92
|
+
}
|
|
93
|
+
async listPackages(teamId) {
|
|
94
|
+
return await this.teamRepository.listPackages(teamId);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.TeamService = TeamService;
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, tegg_1.Inject)(),
|
|
100
|
+
__metadata("design:type", OrgRepository_1.OrgRepository)
|
|
101
|
+
], TeamService.prototype, "orgRepository", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
(0, tegg_1.Inject)(),
|
|
104
|
+
__metadata("design:type", TeamRepository_1.TeamRepository)
|
|
105
|
+
], TeamService.prototype, "teamRepository", void 0);
|
|
106
|
+
exports.TeamService = TeamService = __decorate([
|
|
107
|
+
(0, tegg_1.SingletonProto)({
|
|
108
|
+
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
109
|
+
})
|
|
110
|
+
], TeamService);
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVhbVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1RlYW1TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNDQUlxQjtBQUNyQiwyQ0FBMkQ7QUFDM0Qsa0VBQStEO0FBQy9ELHNEQUF5RDtBQUN6RCxrRUFBK0Q7QUFDL0Qsb0VBQWlFO0FBQ2pFLHlDQUFzQztBQUN0QyxxREFBa0Q7QUFDbEQsdURBQW9EO0FBSzdDLElBQU0sV0FBVyxHQUFqQixNQUFNLFdBQVksU0FBUSxpQ0FBZTtJQU85QyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsV0FBb0I7UUFDaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLElBQUksMkJBQWMsQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUMsQ0FBQztTQUMzRDtRQUVELE1BQU0sSUFBSSxHQUFHLFdBQUksQ0FBQyxNQUFNLENBQUM7WUFDdkIsS0FBSztZQUNMLElBQUk7WUFDSixXQUFXO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwREFBMEQsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQWM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FB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
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { AbstractRepository } from './AbstractRepository';
|
|
2
2
|
import { Org } from '../core/entity/Org';
|
|
3
3
|
import { OrgMember } from '../core/entity/OrgMember';
|
|
4
|
+
import { Team } from '../core/entity/Team';
|
|
5
|
+
import { TeamMember } from '../core/entity/TeamMember';
|
|
4
6
|
export declare class OrgRepository extends AbstractRepository {
|
|
5
7
|
private readonly Org;
|
|
6
8
|
private readonly OrgMember;
|
|
9
|
+
private readonly Team;
|
|
10
|
+
private readonly TeamMember;
|
|
11
|
+
private readonly TeamPackage;
|
|
7
12
|
findOrgByName(name: string): Promise<Org | null>;
|
|
8
13
|
findOrgByOrgId(orgId: string): Promise<Org | null>;
|
|
9
14
|
saveOrg(org: Org): Promise<void>;
|
|
@@ -13,4 +18,6 @@ export declare class OrgRepository extends AbstractRepository {
|
|
|
13
18
|
removeMember(orgId: string, userId: string): Promise<void>;
|
|
14
19
|
listMembers(orgId: string): Promise<OrgMember[]>;
|
|
15
20
|
removeAllMembers(orgId: string): Promise<void>;
|
|
21
|
+
createOrgCascade(org: Org, developersTeam: Team, ownerMember: OrgMember, teamMember: TeamMember): Promise<void>;
|
|
22
|
+
removeOrgCascade(orgId: string): Promise<void>;
|
|
16
23
|
}
|
|
@@ -67,6 +67,27 @@ let OrgRepository = class OrgRepository extends AbstractRepository_1.AbstractRep
|
|
|
67
67
|
async removeAllMembers(orgId) {
|
|
68
68
|
await this.OrgMember.remove({ orgId });
|
|
69
69
|
}
|
|
70
|
+
async createOrgCascade(org, developersTeam, ownerMember, teamMember) {
|
|
71
|
+
await this.Org.transaction(async ({ connection }) => {
|
|
72
|
+
await ModelConvertor_1.ModelConvertor.convertEntityToModel(org, this.Org, { connection });
|
|
73
|
+
await ModelConvertor_1.ModelConvertor.convertEntityToModel(developersTeam, this.Team, { connection });
|
|
74
|
+
await ModelConvertor_1.ModelConvertor.convertEntityToModel(ownerMember, this.OrgMember, { connection });
|
|
75
|
+
await ModelConvertor_1.ModelConvertor.convertEntityToModel(teamMember, this.TeamMember, { connection });
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async removeOrgCascade(orgId) {
|
|
79
|
+
const teams = await this.Team.find({ orgId });
|
|
80
|
+
const teamIds = teams.map(t => t.teamId);
|
|
81
|
+
await this.Org.transaction(async ({ connection }) => {
|
|
82
|
+
if (teamIds.length > 0) {
|
|
83
|
+
await this.TeamPackage.remove({ teamId: { $in: teamIds } }, true, { connection });
|
|
84
|
+
await this.TeamMember.remove({ teamId: { $in: teamIds } }, true, { connection });
|
|
85
|
+
}
|
|
86
|
+
await this.Team.remove({ orgId }, true, { connection });
|
|
87
|
+
await this.OrgMember.remove({ orgId }, true, { connection });
|
|
88
|
+
await this.Org.remove({ orgId }, true, { connection });
|
|
89
|
+
});
|
|
90
|
+
}
|
|
70
91
|
};
|
|
71
92
|
exports.OrgRepository = OrgRepository;
|
|
72
93
|
__decorate([
|
|
@@ -77,9 +98,21 @@ __decorate([
|
|
|
77
98
|
(0, tegg_1.Inject)(),
|
|
78
99
|
__metadata("design:type", Object)
|
|
79
100
|
], OrgRepository.prototype, "OrgMember", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
(0, tegg_1.Inject)(),
|
|
103
|
+
__metadata("design:type", Object)
|
|
104
|
+
], OrgRepository.prototype, "Team", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, tegg_1.Inject)(),
|
|
107
|
+
__metadata("design:type", Object)
|
|
108
|
+
], OrgRepository.prototype, "TeamMember", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, tegg_1.Inject)(),
|
|
111
|
+
__metadata("design:type", Object)
|
|
112
|
+
], OrgRepository.prototype, "TeamPackage", void 0);
|
|
80
113
|
exports.OrgRepository = OrgRepository = __decorate([
|
|
81
114
|
(0, tegg_1.SingletonProto)({
|
|
82
115
|
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
83
116
|
})
|
|
84
117
|
], OrgRepository);
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JnUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwcC9yZXBvc2l0b3J5L09yZ1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQWtFO0FBQ2xFLDBEQUF1RDtBQUN2RCw2REFBMEQ7QUFNMUQsNENBQXlDO0FBQ3pDLHdEQUFxRDtBQU85QyxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsdUNBQWtCO0lBZ0JuRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVk7UUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQWE7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLEtBQUssRUFBRTtnQkFDVCxNQUFNLCtCQUFjLENB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
|
|
@@ -25,6 +25,7 @@ export declare class TeamRepository extends AbstractRepository {
|
|
|
25
25
|
removePackage(teamId: string, packageId: string): Promise<void>;
|
|
26
26
|
listPackages(teamId: string): Promise<TeamPackage[]>;
|
|
27
27
|
removeAllPackagesByTeamId(teamId: string): Promise<void>;
|
|
28
|
+
removeTeamCascade(teamId: string): Promise<void>;
|
|
28
29
|
removeAllPackagesByOrgId(orgId: string): Promise<void>;
|
|
29
30
|
hasPackageAccess(packageId: string, userId: string): Promise<boolean>;
|
|
30
31
|
}
|
|
@@ -118,6 +118,13 @@ let TeamRepository = class TeamRepository extends AbstractRepository_1.AbstractR
|
|
|
118
118
|
async removeAllPackagesByTeamId(teamId) {
|
|
119
119
|
await this.TeamPackage.remove({ teamId });
|
|
120
120
|
}
|
|
121
|
+
async removeTeamCascade(teamId) {
|
|
122
|
+
await this.Team.transaction(async ({ connection }) => {
|
|
123
|
+
await this.TeamPackage.remove({ teamId }, true, { connection });
|
|
124
|
+
await this.TeamMember.remove({ teamId }, true, { connection });
|
|
125
|
+
await this.Team.remove({ teamId }, true, { connection });
|
|
126
|
+
});
|
|
127
|
+
}
|
|
121
128
|
async removeAllPackagesByOrgId(orgId) {
|
|
122
129
|
const teams = await this.Team.find({ orgId });
|
|
123
130
|
if (teams.length === 0)
|
|
@@ -153,4 +160,4 @@ exports.TeamRepository = TeamRepository = __decorate([
|
|
|
153
160
|
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
154
161
|
})
|
|
155
162
|
], TeamRepository);
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVhbVJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9UZWFtUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsMERBQXVEO0FBQ3ZELDZEQUEwRDtBQUkxRCw4Q0FBMkM7QUFDM0MsMERBQXVEO0FBQ3ZELDREQUF5RDtBQUtsRCxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFlLFNBQVEsdUNBQWtCO0lBVXBELG9CQUFvQjtJQUVwQixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLE9BQU8sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsV0FBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsT0FBTywrQkFBYyxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxXQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWE7UUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FB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
|