package logic import ( "context" "strconv" "lone-services/pkg/modelbase" "lone-services/pkg/utils" message "lone-services/rpc/message/pb" "lone-services/services/message/internal/dao" "lone-services/services/message/internal/model" "lone-services/services/message/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type ApiMessageLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewApiMessageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ApiMessageLogic { return &ApiMessageLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *ApiMessageLogic) ApiMessage(in *message.ApiMessageNumberRequest) (*message.Response, error) { loginUser := utils.GetUserFromCtx(l.ctx) if loginUser.ID < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo) } eq := map[string]string{ "target_id": strconv.FormatInt(loginUser.ID, utils.NumberTen), } if in.Type > utils.NumberZero { eq["type"] = strconv.Itoa(int(in.Type)) } var info []dao.MessageInfo w := modelbase.Params{ Page: modelbase.DefaultPage, Size: 10, Order: "id desc", Eq: eq, } messageModel := model.MessageModel{}.Init() _, err := messageModel.Page(w, &info) if err != nil { l.Errorf("get message list failed: %v", err) return l.fail(utils.Fail) } if len(info) > utils.NumberZero { ids := make([]string, 0, len(info)) for _, row := range info { ids = append(ids, strconv.FormatInt(row.Id, utils.NumberTen)) } _, editErr := messageModel.Edit(modelbase.Params{ In: map[string][]string{"id": ids}, Eq: map[string]string{"target_id": strconv.FormatInt(loginUser.ID, utils.NumberTen)}, }, &dao.MessageStatus{Status: utils.StatusOk}) if editErr != nil { l.Errorf("mark message read failed: %v", editErr) return l.fail(utils.Fail) } for i := range info { info[i].Status = utils.StatusOk } } return l.ok(info) }