2023-09-09 00:09:23 +03:00
// Copyright 2016 The Gogs Authors. All rights reserved.
// Copyright 2020 The Gitea Authors.
// SPDX-License-Identifier: MIT
package repository
import (
2023-09-16 17:39:12 +03:00
"context"
2023-09-09 00:09:23 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/db"
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
2024-03-04 11:16:03 +03:00
user_model "code.gitea.io/gitea/models/user"
2023-09-09 00:09:23 +03:00
)
// DeleteCollaboration removes collaboration relation between the user and repository.
2024-03-04 11:16:03 +03:00
func DeleteCollaboration ( ctx context . Context , repo * repo_model . Repository , collaborator * user_model . User ) ( err error ) {
2023-09-09 00:09:23 +03:00
collaboration := & repo_model . Collaboration {
RepoID : repo . ID ,
2024-03-04 11:16:03 +03:00
UserID : collaborator . ID ,
2023-09-09 00:09:23 +03:00
}
2023-09-16 17:39:12 +03:00
ctx , committer , err := db . TxContext ( ctx )
2023-09-09 00:09:23 +03:00
if err != nil {
return err
}
defer committer . Close ( )
2024-01-22 10:19:56 +03:00
if has , err := db . GetEngine ( ctx ) . Delete ( collaboration ) ; err != nil {
2023-09-09 00:09:23 +03:00
return err
2024-01-22 10:19:56 +03:00
} else if has == 0 {
return committer . Commit ( )
}
2024-03-04 11:16:03 +03:00
if err := repo . LoadOwner ( ctx ) ; err != nil {
return err
}
2024-01-22 10:19:56 +03:00
if err = access_model . RecalculateAccesses ( ctx , repo ) ; err != nil {
2023-09-09 00:09:23 +03:00
return err
}
2024-03-04 11:16:03 +03:00
if err = repo_model . WatchRepo ( ctx , collaborator , repo , false ) ; err != nil {
2023-09-09 00:09:23 +03:00
return err
}
2024-03-04 11:16:03 +03:00
if err = models . ReconsiderWatches ( ctx , repo , collaborator ) ; err != nil {
2023-09-09 00:09:23 +03:00
return err
}
// Unassign a user from any issue (s)he has been assigned to in the repository
2024-03-04 11:16:03 +03:00
if err := models . ReconsiderRepoIssuesAssignee ( ctx , repo , collaborator ) ; err != nil {
2023-09-09 00:09:23 +03:00
return err
}
return committer . Commit ( )
}