// Copyright 2022 ROC. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. package web import ( "github.com/alimy/mir/v4" "github.com/gin-gonic/gin" api "github.com/rocboss/paopao-ce/auto/api/v1" "github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/chain" "github.com/rocboss/paopao-ce/pkg/xerror" "github.com/sirupsen/logrus" ) var ( _ api.Friendship = (*friendshipSrv)(nil) ) type friendshipSrv struct { api.UnimplementedFriendshipServant *base.DaoServant } func (s *friendshipSrv) Chain() gin.HandlersChain { return gin.HandlersChain{chain.JWT()} } func (s *friendshipSrv) GetContacts(req *web.GetContactsReq) (*web.GetContactsResp, mir.Error) { if req.User == nil { return nil, xerror.ServerError } res, err := s.Ds.GetContacts(req.User.ID, (req.Page-1)*req.PageSize, req.PageSize) if err != nil { logrus.Errorf("service.GetContacts err: %s", err) return nil, web.ErrGetContactsFailed } resp := base.PageRespFrom(res.Contacts, req.Page, req.PageSize, res.Total) return (*web.GetContactsResp)(resp), nil } func (s *friendshipSrv) DeleteFriend(req *web.DeleteFriendReq) mir.Error { if req.User == nil { return xerror.ServerError } if req.User != nil && req.User.ID == req.UserId { return web.ErrNoActionToSelf } if _, err := s.Ds.GetUserByID(req.UserId); err != nil { return web.ErrNotExistFriendId } if err := s.Ds.DeleteFriend(req.User.ID, req.UserId); err != nil { logrus.Errorf("Ds.DeleteFriend err: %s", err) return web.ErrDeleteFriendFailed } // 触发用户关系缓存更新事件 // cache.OnCacheMyFriendIdsEvent(s.Ds, req.User.ID, req.UserId) onTrendsActionEvent(_trendsActionDeleteFriend, req.User.ID, req.UserId) return nil } func (s *friendshipSrv) RejectFriend(req *web.RejectFriendReq) mir.Error { if req.User == nil { return xerror.ServerError } if req.User.ID == req.UserId { return web.ErrNoActionToSelf } if _, err := s.Ds.GetUserByID(req.UserId); err != nil { return web.ErrNotExistFriendId } if err := s.Ds.RejectFriend(req.User.ID, req.UserId); err != nil { logrus.Errorf("Ds.RejectFriend err: %s", err) return web.ErrRejectFriendFailed } return nil } func (s *friendshipSrv) AddFriend(req *web.AddFriendReq) mir.Error { if req.User == nil { return xerror.ServerError } if req.User.ID == req.UserId { return web.ErrNoActionToSelf } if _, err := s.Ds.GetUserByID(req.UserId); err != nil { return web.ErrNotExistFriendId } if err := s.Ds.AddFriend(req.User.ID, req.UserId); err != nil { logrus.Errorf("Ds.AddFriend err: %s", err) return web.ErrAddFriendFailed } // 触发用户关系缓存更新事件 // cache.OnCacheMyFriendIdsEvent(s.Ds, req.User.ID, req.UserId) onTrendsActionEvent(_trendsActionAddFriend, req.User.ID, req.UserId) return nil } func (s *friendshipSrv) RequestingFriend(req *web.RequestingFriendReq) mir.Error { if req.User == nil { return xerror.ServerError } if req.User.ID == req.UserId { return web.ErrNoRequestingFriendToSelf } if _, err := s.Ds.GetUserByID(req.UserId); err != nil { return web.ErrNotExistFriendId } if err := s.Ds.RequestingFriend(req.User.ID, req.UserId, req.Greetings); err != nil { logrus.Errorf("Ds.RequestingFriend err: %s", err) return web.ErrSendRequestingFriendFailed } return nil } func newFriendshipSrv(s *base.DaoServant) api.Friendship { return &friendshipSrv{ DaoServant: s, } }