summaryrefslogtreecommitdiffstats
path: root/models/repo/star.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/repo/star.go')
-rw-r--r--models/repo/star.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/models/repo/star.go b/models/repo/star.go
index b3d3d795f8..89bdb7ac05 100644
--- a/models/repo/star.go
+++ b/models/repo/star.go
@@ -85,3 +85,17 @@ func GetStargazers(repo *Repository, opts db.ListOptions) ([]*user_model.User, e
users := make([]*user_model.User, 0, 8)
return users, sess.Find(&users)
}
+
+// ClearRepoStars clears all stars for a repository and from the user that starred it.
+// Used when a repository is set to private.
+func ClearRepoStars(ctx context.Context, repoID int64) error {
+ if _, err := db.Exec(ctx, "UPDATE `user` SET num_stars=num_stars-1 WHERE id IN (SELECT `uid` FROM `star` WHERE repo_id = ?)", repoID); err != nil {
+ return err
+ }
+
+ if _, err := db.Exec(ctx, "UPDATE `repository` SET num_stars = 0 WHERE id = ?", repoID); err != nil {
+ return err
+ }
+
+ return db.DeleteBeans(ctx, Star{RepoID: repoID})
+}