81 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package registerreward
import (
"context"
"time"
"chatapp3-golang/internal/integration"
"chatapp3-golang/internal/model"
)
const (
// registerRewardNoticeType 是注册奖励实时通知的消息类型,供 app 侧按 socket 事件识别后弹奖励页。
registerRewardNoticeType = "REGISTER_REWARD_GRANTED"
// registerRewardNoticeTitle 是兜底展示标题;正常情况下端上会直接消费 expand 并展示奖励页。
registerRewardNoticeTitle = "Register reward"
// registerRewardNoticeContent 是兜底展示文案。
registerRewardNoticeContent = "Reward granted"
)
// registerRewardNoticeExpand 是通过 IM/socket 下发给 app 的扩展载荷。
type registerRewardNoticeExpand struct {
Scene string `json:"scene"` // 固定业务场景,便于端上统一分发
ShowRewardPopup bool `json:"showRewardPopup"` // 端上接到后是否直接展示奖励弹层
UserID int64 `json:"userId"` // 用户 ID
SysOrigin string `json:"sysOrigin"` // 系统标识
EventID string `json:"eventId"` // 注册奖励事件 ID
ClaimDate string `json:"claimDate,omitempty"` // 占用奖励日期
ClaimResult string `json:"claimResult"` // 当前领取结果,注册奖励实际发放时固定为 REWARDED
GoldAmount int64 `json:"goldAmount"` // 实际金币奖励
RewardGroupID *int64 `json:"rewardGroupId,omitempty"` // 实际道具奖励组 ID
}
// pushRewardArrivalNotice 在自动发奖成功后给用户推送一条实时官方通知app 通过 noticeType + expand 弹奖励页。
func (s *RegisterRewardService) pushRewardArrivalNotice(
ctx context.Context,
event registerRewardEvent,
logRecord *model.ResidentRegisterRewardLog,
resolved registerRewardResolvedConfig,
) error {
if event.UserID <= 0 {
return nil
}
if resolved.GoldAmount <= 0 && resolved.RewardGroupID == nil {
return nil
}
if err := s.java.SendOfficialNoticeCustomize(ctx, integration.OfficialNoticeCustomizeRequest{
ToAccounts: []int64{event.UserID},
NoticeType: registerRewardNoticeType,
Title: registerRewardNoticeTitle,
Content: registerRewardNoticeContent,
Expand: registerRewardNoticeExpand{
Scene: "REGISTER_REWARD",
ShowRewardPopup: true,
UserID: event.UserID,
SysOrigin: event.SysOrigin,
EventID: event.EventID,
ClaimDate: logRecord.ClaimDate,
ClaimResult: registerRewardClaimResultRewarded,
GoldAmount: resolved.GoldAmount,
RewardGroupID: resolved.RewardGroupID,
},
}); err != nil {
return err
}
s.publishDebugNotice(RegisterRewardNoticeEvent{
NoticeType: registerRewardNoticeType,
Scene: "REGISTER_REWARD",
UserID: event.UserID,
SysOrigin: event.SysOrigin,
EventID: event.EventID,
ClaimDate: logRecord.ClaimDate,
ClaimResult: registerRewardClaimResultRewarded,
GoldAmount: resolved.GoldAmount,
RewardGroupID: resolved.RewardGroupID,
SentAt: time.Now(),
})
return nil
}