2026-06-23 11:53:00 +08:00

147 lines
3.2 KiB
Go

package ledger
import (
"strings"
)
// RedPacketConfig 是后台红包配置的服务端事实,发送路径必须由 wallet-service 强校验。
type RedPacketConfig struct {
AppCode string
Enabled bool
CountTiers []int32
AmountTiers []int64
DelayedOpenSeconds int32
ExpireSeconds int32
DailySendLimit int32
UpdatedByAdminID int64
RuleURL string
CreatedAtMS int64
UpdatedAtMS int64
}
// RedPacket 是红包资金池和状态的只读投影。
type RedPacket struct {
AppCode string
PacketID string
CommandID string
SenderUserID int64
RoomID string
RegionID int64
PacketType string
TotalAmount int64
PacketCount int32
RemainingAmount int64
RemainingCount int32
Status string
OpenAtMS int64
ExpiresAtMS int64
CreatedAtMS int64
UpdatedAtMS int64
ClaimedByViewer bool
ViewerClaimAmount int64
Claims []RedPacketClaim
RefundAmount int64
RefundStatus string
RefundedAtMS int64
}
// RedPacketClaim 是单个用户抢红包的到账事实。
type RedPacketClaim struct {
AppCode string
ClaimID string
CommandID string
PacketID string
UserID int64
Amount int64
WalletTransactionID string
Status string
FailureReason string
CreatedAtMS int64
UpdatedAtMS int64
}
type RedPacketCreateCommand struct {
AppCode string
CommandID string
SenderUserID int64
RoomID string
RegionID int64
PacketType string
TotalAmount int64
PacketCount int32
}
type RedPacketCreateReceipt struct {
Packet RedPacket
BalanceAfter int64
}
type RedPacketClaimCommand struct {
AppCode string
CommandID string
PacketID string
UserID int64
}
type RedPacketClaimReceipt struct {
Claim RedPacketClaim
Packet RedPacket
BalanceAfter int64
}
type RedPacketRefundReceipt struct {
Packet RedPacket
RefundedAmount int64
}
type RedPacketQuery struct {
AppCode string
RoomID string
SenderUserID int64
RegionID int64
PacketType string
Status string
ViewerUserID int64
StartAtMS int64
EndAtMS int64
Page int32
PageSize int32
}
type RedPacketExpireResult struct {
ExpiredCount int32
RefundedAmount int64
}
func NormalizeRedPacketType(packetType string) string {
switch strings.ToUpper(strings.TrimSpace(packetType)) {
case "IMMEDIATE":
return RedPacketTypeNormal
case "DELAYED":
return RedPacketTypeDelayed
}
switch strings.ToLower(strings.TrimSpace(packetType)) {
case RedPacketTypeNormal:
return RedPacketTypeNormal
case RedPacketTypeDelayed:
return RedPacketTypeDelayed
default:
return ""
}
}
func NormalizeRedPacketStatus(status string) string {
switch strings.ToLower(strings.TrimSpace(status)) {
case RedPacketStatusWaitingOpen:
return RedPacketStatusWaitingOpen
case RedPacketStatusActive:
return RedPacketStatusActive
case RedPacketStatusFinished:
return RedPacketStatusFinished
case RedPacketStatusRefunded:
return RedPacketStatusRefunded
default:
return ""
}
}