summaryrefslogtreecommitdiffstats
path: root/models/user_follow.go
diff options
context:
space:
mode:
authorEthan Koenig <etk39@cornell.edu>2017-03-11 03:46:53 -0500
committerLunny Xiao <xiaolunwen@gmail.com>2017-03-11 16:46:53 +0800
commit3803f257fb5cfa3419f0d91ccbae1c128f0fcca1 (patch)
treef771af0252ae57f9be20ff56952a34aeb9c820ab /models/user_follow.go
parent1e3548b7e764c60aad2eb315a65e146264c11a7d (diff)
downloadgitea-3803f257fb5cfa3419f0d91ccbae1c128f0fcca1.tar.gz
gitea-3803f257fb5cfa3419f0d91ccbae1c128f0fcca1.zip
Move user_follow to separate file (#1210)
Also add unit tests
Diffstat (limited to 'models/user_follow.go')
-rw-r--r--models/user_follow.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/models/user_follow.go b/models/user_follow.go
new file mode 100644
index 0000000000..ac0cf0a8f3
--- /dev/null
+++ b/models/user_follow.go
@@ -0,0 +1,71 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package models
+
+// Follow represents relations of user and his/her followers.
+type Follow struct {
+ ID int64 `xorm:"pk autoincr"`
+ UserID int64 `xorm:"UNIQUE(follow)"`
+ FollowID int64 `xorm:"UNIQUE(follow)"`
+}
+
+// IsFollowing returns true if user is following followID.
+func IsFollowing(userID, followID int64) bool {
+ has, _ := x.Get(&Follow{UserID: userID, FollowID: followID})
+ return has
+}
+
+// FollowUser marks someone be another's follower.
+func FollowUser(userID, followID int64) (err error) {
+ if userID == followID || IsFollowing(userID, followID) {
+ return nil
+ }
+
+ sess := x.NewSession()
+ defer sessionRelease(sess)
+ if err = sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err = sess.Insert(&Follow{UserID: userID, FollowID: followID}); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers + 1 WHERE id = ?", followID); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_following = num_following + 1 WHERE id = ?", userID); err != nil {
+ return err
+ }
+ return sess.Commit()
+}
+
+// UnfollowUser unmarks someone as another's follower.
+func UnfollowUser(userID, followID int64) (err error) {
+ if userID == followID || !IsFollowing(userID, followID) {
+ return nil
+ }
+
+ sess := x.NewSession()
+ defer sessionRelease(sess)
+ if err = sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err = sess.Delete(&Follow{UserID: userID, FollowID: followID}); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers - 1 WHERE id = ?", followID); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_following = num_following - 1 WHERE id = ?", userID); err != nil {
+ return err
+ }
+ return sess.Commit()
+}
+