@@ -163,6 +163,67 @@ func UpdateTeam(ctx context.Context, t *organization.Team, authChanged, includeA
163163 return committer .Commit ()
164164}
165165
166+ // DeleteTeam deletes given team.
167+ // It's caller's responsibility to assign organization ID.
168+ func DeleteTeam (ctx context.Context , t * organization.Team ) error {
169+ ctx , committer , err := db .TxContext (ctx )
170+ if err != nil {
171+ return err
172+ }
173+ defer committer .Close ()
174+
175+ if err := t .LoadRepositories (ctx ); err != nil {
176+ return err
177+ }
178+
179+ if err := t .LoadMembers (ctx ); err != nil {
180+ return err
181+ }
182+
183+ // update branch protections
184+ {
185+ protections := make ([]* git_model.ProtectedBranch , 0 , 10 )
186+ err := db .GetEngine (ctx ).In ("repo_id" ,
187+ builder .Select ("id" ).From ("repository" ).Where (builder.Eq {"owner_id" : t .OrgID })).
188+ Find (& protections )
189+ if err != nil {
190+ return fmt .Errorf ("findProtectedBranches: %w" , err )
191+ }
192+ for _ , p := range protections {
193+ if err := git_model .RemoveTeamIDFromProtectedBranch (ctx , p , t .ID ); err != nil {
194+ return err
195+ }
196+ }
197+ }
198+
199+ if err := repo_service .RemoveAllRepositoriesFromTeam (ctx , t ); err != nil {
200+ return err
201+ }
202+
203+ if err := db .DeleteBeans (ctx ,
204+ & organization.Team {ID : t .ID },
205+ & organization.TeamUser {OrgID : t .OrgID , TeamID : t .ID },
206+ & organization.TeamUnit {TeamID : t .ID },
207+ & organization.TeamInvite {TeamID : t .ID },
208+ & issues_model.Review {Type : issues_model .ReviewTypeRequest , ReviewerTeamID : t .ID }, // batch delete the binding relationship between team and PR (request review from team)
209+ ); err != nil {
210+ return err
211+ }
212+
213+ for _ , tm := range t .Members {
214+ if err := removeInvalidOrgUser (ctx , t .OrgID , tm ); err != nil {
215+ return err
216+ }
217+ }
218+
219+ // Update organization number of teams.
220+ if _ , err := db .Exec (ctx , "UPDATE `user` SET num_teams=num_teams-1 WHERE id=?" , t .OrgID ); err != nil {
221+ return err
222+ }
223+
224+ return committer .Commit ()
225+ }
226+
166227// AddTeamMember adds new membership of given team to given organization,
167228// the user will have membership to given organization automatically when needed.
168229func AddTeamMember (ctx context.Context , team * organization.Team , user * user_model.User ) error {
@@ -257,80 +318,6 @@ func AddTeamMember(ctx context.Context, team *organization.Team, user *user_mode
257318 return nil
258319}
259320
260- // DeleteTeam deletes given team.
261- // It's caller's responsibility to assign organization ID.
262- func DeleteTeam (ctx context.Context , t * organization.Team ) error {
263- ctx , committer , err := db .TxContext (ctx )
264- if err != nil {
265- return err
266- }
267- defer committer .Close ()
268-
269- if err := t .LoadRepositories (ctx ); err != nil {
270- return err
271- }
272-
273- if err := t .LoadMembers (ctx ); err != nil {
274- return err
275- }
276-
277- // update branch protections
278- {
279- protections := make ([]* git_model.ProtectedBranch , 0 , 10 )
280- err := db .GetEngine (ctx ).In ("repo_id" ,
281- builder .Select ("id" ).From ("repository" ).Where (builder.Eq {"owner_id" : t .OrgID })).
282- Find (& protections )
283- if err != nil {
284- return fmt .Errorf ("findProtectedBranches: %w" , err )
285- }
286- for _ , p := range protections {
287- if err := git_model .RemoveTeamIDFromProtectedBranch (ctx , p , t .ID ); err != nil {
288- return err
289- }
290- }
291- }
292-
293- if err := repo_service .RemoveAllRepositoriesFromTeam (ctx , t ); err != nil {
294- return err
295- }
296-
297- if err := db .DeleteBeans (ctx ,
298- & organization.Team {ID : t .ID },
299- & organization.TeamUser {OrgID : t .OrgID , TeamID : t .ID },
300- & organization.TeamUnit {TeamID : t .ID },
301- & organization.TeamInvite {TeamID : t .ID },
302- & issues_model.Review {Type : issues_model .ReviewTypeRequest , ReviewerTeamID : t .ID }, // batch delete the binding relationship between team and PR (request review from team)
303- ); err != nil {
304- return err
305- }
306-
307- for _ , tm := range t .Members {
308- if err := removeInvalidOrgUser (ctx , t .OrgID , tm ); err != nil {
309- return err
310- }
311- }
312-
313- // Update organization number of teams.
314- if _ , err := db .Exec (ctx , "UPDATE `user` SET num_teams=num_teams-1 WHERE id=?" , t .OrgID ); err != nil {
315- return err
316- }
317-
318- return committer .Commit ()
319- }
320-
321- // RemoveTeamMember removes member from given team of given organization.
322- func RemoveTeamMember (ctx context.Context , team * organization.Team , user * user_model.User ) error {
323- ctx , committer , err := db .TxContext (ctx )
324- if err != nil {
325- return err
326- }
327- defer committer .Close ()
328- if err := removeTeamMember (ctx , team , user ); err != nil {
329- return err
330- }
331- return committer .Commit ()
332- }
333-
334321func removeTeamMember (ctx context.Context , team * organization.Team , user * user_model.User ) error {
335322 e := db .GetEngine (ctx )
336323 isMember , err := organization .IsTeamMember (ctx , team .OrgID , team .ID , user .ID )
@@ -399,3 +386,16 @@ func removeInvalidOrgUser(ctx context.Context, orgID int64, user *user_model.Use
399386 }
400387 return nil
401388}
389+
390+ // RemoveTeamMember removes member from given team of given organization.
391+ func RemoveTeamMember (ctx context.Context , team * organization.Team , user * user_model.User ) error {
392+ ctx , committer , err := db .TxContext (ctx )
393+ if err != nil {
394+ return err
395+ }
396+ defer committer .Close ()
397+ if err := removeTeamMember (ctx , team , user ); err != nil {
398+ return err
399+ }
400+ return committer .Commit ()
401+ }
0 commit comments