@@ -3,27 +3,18 @@ import mongoose from "mongoose";
3
3
import logger from "./logger.js" ;
4
4
5
5
class TeamsService {
6
- async updateTeams ( org : string , teams : Endpoints [ "GET /orgs/{org}/teams" ] [ "response" ] [ "data" ] ) {
7
- const Team = mongoose . model ( 'Team' ) ;
6
+ async updateTeams (
7
+ org : string ,
8
+ teams : Endpoints [ "GET /orgs/{org}/teams" ] [ "response" ] [ "data" ]
9
+ ) {
10
+ const Team = mongoose . model ( "Team" ) ;
8
11
9
12
for ( const team of teams ) {
10
13
await Team . findOneAndUpdate (
11
14
{ githubId : team . id } , // search criteria
12
15
{
13
16
org,
14
- team : team . slug ,
15
- githubId : team . id ,
16
- node_id : team . node_id ,
17
- name : team . name ,
18
- slug : team . slug ,
19
- description : team . description ,
20
- privacy : team . privacy || 'unknown' ,
21
- notification_setting : team . notification_setting || 'unknown' ,
22
- permission : team . permission ,
23
- url : team . url ,
24
- html_url : team . html_url ,
25
- members_url : team . members_url ,
26
- repositories_url : team . repositories_url
17
+ ...team ,
27
18
} ,
28
19
{ upsert : true , new : true } // create if doesn't exist, return updated doc
29
20
) ;
@@ -46,37 +37,40 @@ class TeamsService {
46
37
{ githubId : - 1 } ,
47
38
{
48
39
org,
49
- name : ' No Team' ,
50
- slug : ' no-team' ,
51
- description : ' No team assigned' ,
52
- node_id : '' ,
53
- permission : '' ,
54
- url : '' ,
55
- html_url : '' ,
56
- members_url : '' ,
57
- repositories_url : '' ,
58
- githubId : - 1
40
+ name : " No Team" ,
41
+ slug : " no-team" ,
42
+ description : " No team assigned" ,
43
+ node_id : "" ,
44
+ permission : "" ,
45
+ url : "" ,
46
+ html_url : "" ,
47
+ members_url : "" ,
48
+ repositories_url : "" ,
49
+ githubId : - 1 ,
59
50
} ,
60
51
{ upsert : true , new : true }
61
52
) ;
62
53
}
63
54
64
- async updateMembers ( org : string , members : Endpoints [ "GET /orgs/{org}/teams/{team_slug}/members" ] [ "response" ] [ "data" ] ) {
65
- const Members = mongoose . model ( 'Member' ) ;
55
+ async updateMembers (
56
+ org : string ,
57
+ members : Endpoints [ "GET /orgs/{org}/teams/{team_slug}/members" ] [ "response" ] [ "data" ]
58
+ ) {
59
+ const Members = mongoose . model ( "Member" ) ;
66
60
const bulkOps = members . map ( ( member ) => ( {
67
61
updateOne : {
68
62
filter : { org, id : member . id } ,
69
63
update : { $set : member } ,
70
- upsert : true
71
- }
64
+ upsert : true ,
65
+ } ,
72
66
} ) ) ;
73
67
await Members . bulkWrite ( bulkOps , { ordered : false } ) ;
74
68
}
75
69
76
70
async addMemberToTeam ( teamId : number , memberId : number ) {
77
- const Team = mongoose . model ( ' Team' ) ;
78
- const Member = mongoose . model ( ' Member' ) ;
79
- const TeamMember = mongoose . model ( ' TeamMember' ) ;
71
+ const Team = mongoose . model ( " Team" ) ;
72
+ const Member = mongoose . model ( " Member" ) ;
73
+ const TeamMember = mongoose . model ( " TeamMember" ) ;
80
74
81
75
// Find Team and Member documents to get their MongoDB _ids
82
76
const team = await Team . findOne ( { githubId : teamId } ) ;
@@ -96,17 +90,20 @@ class TeamsService {
96
90
}
97
91
98
92
async deleteMemberFromTeam ( teamId : number , memberId : number ) {
99
- const TeamMember = mongoose . model ( 'TeamMember' ) ;
100
- const deleted = await TeamMember . deleteOne ( { team : teamId , member : memberId } ) ;
93
+ const TeamMember = mongoose . model ( "TeamMember" ) ;
94
+ const deleted = await TeamMember . deleteOne ( {
95
+ team : teamId ,
96
+ member : memberId ,
97
+ } ) ;
101
98
if ( deleted . deletedCount === 0 ) {
102
99
throw new Error ( `Member ${ memberId } is not part of team ${ teamId } ` ) ;
103
100
}
104
101
return true ;
105
102
}
106
103
107
104
async deleteMember ( memberId : number ) {
108
- const Member = mongoose . model ( ' Member' ) ;
109
- const TeamMember = mongoose . model ( ' TeamMember' ) ;
105
+ const Member = mongoose . model ( " Member" ) ;
106
+ const TeamMember = mongoose . model ( " TeamMember" ) ;
110
107
111
108
await TeamMember . deleteMany ( { member : memberId } ) ;
112
109
const deleted = await Member . deleteOne ( { id : memberId } ) ;
@@ -117,8 +114,8 @@ class TeamsService {
117
114
}
118
115
119
116
async deleteTeam ( teamId : number ) {
120
- const Team = mongoose . model ( ' Team' ) ;
121
- const TeamMember = mongoose . model ( ' TeamMember' ) ;
117
+ const Team = mongoose . model ( " Team" ) ;
118
+ const TeamMember = mongoose . model ( " TeamMember" ) ;
122
119
123
120
await TeamMember . deleteMany ( { team : teamId } ) ;
124
121
const deleted = await Team . deleteOne ( { githubId : teamId } ) ;
@@ -129,59 +126,59 @@ class TeamsService {
129
126
}
130
127
131
128
async getLastUpdatedAt ( org ?: string ) : Promise < Date > {
132
- const Team = mongoose . model ( ' Member' ) ;
129
+ const Team = mongoose . model ( " Member" ) ;
133
130
const team = await Team . findOne ( org ? { org } : { } ) . sort ( { updatedAt : - 1 } ) ;
134
131
return team ?. updatedAt || new Date ( 0 ) ;
135
132
}
136
133
137
134
async getMemberByLogin ( login : string ) {
138
- const Member = mongoose . model ( ' Member' ) ;
135
+ const Member = mongoose . model ( " Member" ) ;
139
136
return await Member . findOne ( { login } )
140
- . select ( ' login name url avatar_url' )
137
+ . select ( " login name url avatar_url" )
141
138
. exec ( ) ;
142
139
}
143
140
144
141
async getAllMembers ( org ?: string ) {
145
- const Member = mongoose . model ( ' Member' ) ;
142
+ const Member = mongoose . model ( " Member" ) ;
146
143
try {
147
144
return await Member . find ( {
148
- ...org ? { org } : { }
145
+ ...( org ? { org } : { } ) ,
149
146
} )
150
- . select ( ' login org name url avatar_url' )
147
+ . select ( " login org name url avatar_url" )
151
148
. populate ( {
152
- path : ' seat' ,
153
- select : ' -_id -__v' ,
154
- options : { lean : true }
149
+ path : " seat" ,
150
+ select : " -_id -__v" ,
151
+ options : { lean : true } ,
155
152
} )
156
- . sort ( { login : ' asc' } )
153
+ . sort ( { login : " asc" } )
157
154
. exec ( ) ;
158
155
} catch ( error ) {
159
- logger . error ( ' Failed to get all members:' , error ) ;
156
+ logger . error ( " Failed to get all members:" , error ) ;
160
157
throw error ;
161
158
}
162
159
}
163
160
164
161
async getTeams ( org ?: string ) {
165
- const Team = mongoose . model ( ' Team' ) ;
166
- const Member = mongoose . model ( ' Member' ) ;
162
+ const Team = mongoose . model ( " Team" ) ;
163
+ const Member = mongoose . model ( " Member" ) ;
167
164
return await Team . find ( {
168
- ...org ? { org } : { }
165
+ ...( org ? { org } : { } ) ,
169
166
} )
170
167
. populate ( {
171
- path : ' members' ,
172
- select : ' login avatar_url' ,
173
- model : Member
168
+ path : " members" ,
169
+ select : " login avatar_url" ,
170
+ model : Member ,
174
171
} )
175
172
. populate ( {
176
- path : ' children' ,
177
- select : ' name org slug description html_url' ,
173
+ path : " children" ,
174
+ select : " name org slug description html_url" ,
178
175
populate : {
179
- path : ' members' ,
180
- select : ' login avatar_url' ,
181
- model : Member
182
- }
176
+ path : " members" ,
177
+ select : " login avatar_url" ,
178
+ model : Member ,
179
+ } ,
183
180
} )
184
- . sort ( { name : ' asc' , ' members.login' : ' asc' } )
181
+ . sort ( { name : " asc" , " members.login" : " asc" } )
185
182
. exec ( ) ;
186
183
}
187
184
}
0 commit comments