package logic import ( "bp.jydev.jianyu360.cn/SocialPlatform/messageCenter/api/messagecenter/util" "context" "net/http" quitl "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/encrypt" "app.yhyue.com/moapp/jybase/fsw" "bp.jydev.jianyu360.cn/SocialPlatform/messageCenter/api/messagecenter/internal/svc" "bp.jydev.jianyu360.cn/SocialPlatform/messageCenter/api/messagecenter/internal/types" "bp.jydev.jianyu360.cn/SocialPlatform/messageCenter/rpc/messagecenter/messagecenter" "github.com/microcosm-cc/bluemonday" "github.com/gogf/gf/v2/util/gconv" "github.com/zeromicro/go-zero/core/logx" ) type MessageAddLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext r *http.Request } func NewMessageAddLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *MessageAddLogic { return &MessageAddLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, r: r, } } var ( htmlFilter = bluemonday.NewPolicy() ) func init() { htmlFilter.AllowStandardURLs() htmlFilter.AllowAttrs("href").OnElements("a") htmlFilter.AllowAttrs("class").OnElements("li") htmlFilter.AllowAttrs("src").OnElements("img") } func (l *MessageAddLogic) MessageAdd(req *types.MessageEntity) (*types.CommonRes, error) { if req.NewUserId == 0 { r, err := util.GetTouristInfo(l.r, l.svcCtx.Social, l.ctx) if err != nil || r.BaseUserId == 0 { return nil, err } req.NewUserId = r.BaseUserId req.PositionId = r.BaseUserId } receiverIds := []int64{} for _, v := range req.ReceiverIds { receiverIds = append(receiverIds, gconv.Int64(encrypt.SE.Decode4Hex(v))) } groupIds := []int64{} for _, v := range req.GroupIds { groupIds = append(groupIds, gconv.Int64(encrypt.SE.Decode4Hex(v))) } sendId := quitl.Int64All(encrypt.SE.Decode4Hex(req.SendId)) if req.SendId == "" { sendId = req.PositionId } typ := func(typ int64) int64 { if typ == 5 || typ == 6 { return 1 } return typ }(req.Type) resp, err := l.svcCtx.Message.SaveMessage(l.ctx, &messagecenter.MessageEntity{ OwnType: req.OwnType, Title: req.Title, SendId: sendId, Content: quitl.ObjToString(quitl.If(req.Type == 3 || req.Type == 4 || req.Type == 5, fsw.Repl(req.Content), htmlFilter.Sanitize(fsw.Repl(req.Content)))), Item: req.Item, Type: typ, Link: req.Link, Appid: req.Appid, ItemType: req.ItemType, ReceiveId: quitl.Int64All(encrypt.SE.Decode4Hex(req.ReceiveId)), NewUserId: req.NewUserId, EntUserId: req.EntUserId, ReceiverIds: receiverIds, GroupIds: groupIds, }) if err != nil { return nil, err } return &types.CommonRes{ Error_msg: resp.ErrorMsg, Error_code: int(resp.ErrorCode), Data: resp.Data, }, nil }