follower.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package user
  2. import (
  3. api "github.com/gogs/go-gogs-client"
  4. "gogs.io/gogs/internal/context"
  5. "gogs.io/gogs/internal/database"
  6. )
  7. func responseAPIUsers(c *context.APIContext, users []*database.User) {
  8. apiUsers := make([]*api.User, len(users))
  9. for i := range users {
  10. apiUsers[i] = users[i].APIFormat()
  11. }
  12. c.JSONSuccess(&apiUsers)
  13. }
  14. func listUserFollowers(c *context.APIContext, u *database.User) {
  15. users, err := database.Handle.Users().ListFollowers(c.Req.Context(), u.ID, c.QueryInt("page"), database.ItemsPerPage)
  16. if err != nil {
  17. c.Error(err, "list followers")
  18. return
  19. }
  20. responseAPIUsers(c, users)
  21. }
  22. func ListMyFollowers(c *context.APIContext) {
  23. listUserFollowers(c, c.User)
  24. }
  25. func ListFollowers(c *context.APIContext) {
  26. u := GetUserByParams(c)
  27. if c.Written() {
  28. return
  29. }
  30. listUserFollowers(c, u)
  31. }
  32. func listUserFollowing(c *context.APIContext, u *database.User) {
  33. users, err := database.Handle.Users().ListFollowings(c.Req.Context(), u.ID, c.QueryInt("page"), database.ItemsPerPage)
  34. if err != nil {
  35. c.Error(err, "list followings")
  36. return
  37. }
  38. responseAPIUsers(c, users)
  39. }
  40. func ListMyFollowing(c *context.APIContext) {
  41. listUserFollowing(c, c.User)
  42. }
  43. func ListFollowing(c *context.APIContext) {
  44. u := GetUserByParams(c)
  45. if c.Written() {
  46. return
  47. }
  48. listUserFollowing(c, u)
  49. }
  50. func checkUserFollowing(c *context.APIContext, u *database.User, followID int64) {
  51. if database.Handle.Users().IsFollowing(c.Req.Context(), u.ID, followID) {
  52. c.NoContent()
  53. } else {
  54. c.NotFound()
  55. }
  56. }
  57. func CheckMyFollowing(c *context.APIContext) {
  58. target := GetUserByParams(c)
  59. if c.Written() {
  60. return
  61. }
  62. checkUserFollowing(c, c.User, target.ID)
  63. }
  64. func CheckFollowing(c *context.APIContext) {
  65. u := GetUserByParams(c)
  66. if c.Written() {
  67. return
  68. }
  69. target := GetUserByParamsName(c, ":target")
  70. if c.Written() {
  71. return
  72. }
  73. checkUserFollowing(c, u, target.ID)
  74. }
  75. func Follow(c *context.APIContext) {
  76. target := GetUserByParams(c)
  77. if c.Written() {
  78. return
  79. }
  80. if err := database.Handle.Users().Follow(c.Req.Context(), c.User.ID, target.ID); err != nil {
  81. c.Error(err, "follow user")
  82. return
  83. }
  84. c.NoContent()
  85. }
  86. func Unfollow(c *context.APIContext) {
  87. target := GetUserByParams(c)
  88. if c.Written() {
  89. return
  90. }
  91. if err := database.Handle.Users().Unfollow(c.Req.Context(), c.User.ID, target.ID); err != nil {
  92. c.Error(err, "unfollow user")
  93. return
  94. }
  95. c.NoContent()
  96. }