relation.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/service/main/account/model"
  5. relation "go-common/app/service/main/relation/model"
  6. "go-common/library/net/metadata"
  7. "github.com/pkg/errors"
  8. )
  9. // Relation get user relation.
  10. func (s *Service) Relation(c context.Context, mid, fid int64) (r *model.Relation, err error) {
  11. ip := metadata.String(c, metadata.RemoteIP)
  12. arg := &relation.ArgRelation{Mid: mid, Fid: fid, RealIP: ip}
  13. res, err := s.relRPC.Relation(c, arg)
  14. if err != nil {
  15. err = errors.Wrap(err, "service relation")
  16. return
  17. }
  18. r = &model.Relation{}
  19. r.Following = res.Following()
  20. return
  21. }
  22. // Relations get user relations.
  23. func (s *Service) Relations(c context.Context, mid int64, fids []int64) (rs map[int64]*model.Relation, err error) {
  24. ip := metadata.String(c, metadata.RemoteIP)
  25. arg := &relation.ArgRelations{Mid: mid, Fids: fids, RealIP: ip}
  26. res, err := s.relRPC.Relations(c, arg)
  27. if err != nil {
  28. err = errors.Wrap(err, "service relations")
  29. return
  30. }
  31. rs = make(map[int64]*model.Relation, len(res))
  32. for _, fid := range fids {
  33. if f, ok := res[fid]; ok {
  34. rs[fid] = &model.Relation{Following: f.Following()}
  35. } else {
  36. rs[fid] = &model.Relation{Following: false}
  37. }
  38. }
  39. return
  40. }
  41. // RichRelations2 get mid relations of fids.
  42. func (s *Service) RichRelations2(c context.Context, mid int64, fids []int64) (rs map[int64]int, err error) {
  43. ip := metadata.String(c, metadata.RemoteIP)
  44. arg := &relation.ArgRelations{Mid: mid, Fids: fids, RealIP: ip}
  45. res, err := s.relRPC.Relations(c, arg)
  46. if err != nil {
  47. err = errors.Wrap(err, "service rich relation")
  48. return
  49. }
  50. rs = make(map[int64]int, len(res))
  51. for mid, f := range res {
  52. rs[mid] = int(f.Attribute)
  53. }
  54. return
  55. }
  56. // Blacks get user balcks.
  57. func (s *Service) Blacks(c context.Context, mid int64) (rs map[int64]struct{}, err error) {
  58. ip := metadata.String(c, metadata.RemoteIP)
  59. arg := &relation.ArgMid{Mid: mid, RealIP: ip}
  60. res, err := s.relRPC.Blacks(c, arg)
  61. if err != nil {
  62. err = errors.Wrap(err, "service blacks")
  63. return
  64. }
  65. rs = make(map[int64]struct{}, len(res))
  66. for _, r := range res {
  67. rs[r.Mid] = struct{}{}
  68. }
  69. return
  70. }
  71. // Attentions get all attentions list ,include followings and whispers.
  72. func (s *Service) Attentions(c context.Context, mid int64) (mids []int64, err error) {
  73. ip := metadata.String(c, metadata.RemoteIP)
  74. arg := &relation.ArgMid{Mid: mid, RealIP: ip}
  75. rls, err := s.relRPC.Followings(c, arg)
  76. if err != nil {
  77. err = errors.Wrap(err, "service attentions")
  78. return
  79. }
  80. for _, rl := range rls {
  81. mids = append(mids, rl.Mid)
  82. }
  83. whs, err := s.relRPC.Whispers(c, arg)
  84. if err != nil {
  85. err = errors.Wrap(err, "service whispers")
  86. return
  87. }
  88. for _, wh := range whs {
  89. mids = append(mids, wh.Mid)
  90. }
  91. return
  92. }