440 lines
9.9 KiB
Go
440 lines
9.9 KiB
Go
package resource
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"hyapp/services/wallet-service/internal/domain/ledger"
|
|
)
|
|
|
|
const (
|
|
TypeAvatarFrame = "avatar_frame"
|
|
TypeCoin = "coin"
|
|
TypeVehicle = "vehicle"
|
|
TypeChatBubble = "chat_bubble"
|
|
TypeBadge = "badge"
|
|
TypeFloatingScreen = "floating_screen"
|
|
TypeGift = "gift"
|
|
|
|
StatusActive = "active"
|
|
StatusDisabled = "disabled"
|
|
|
|
GrantStrategyWalletCredit = "wallet_credit"
|
|
GrantStrategyNewEntitlement = "new_entitlement"
|
|
GrantStrategyExtendExpiry = "extend_expiry"
|
|
GrantStrategyIncreaseQuantity = "increase_quantity"
|
|
GrantStrategySetActiveFlag = "set_active_flag"
|
|
|
|
GrantSubjectResource = "resource"
|
|
GrantSubjectGroup = "resource_group"
|
|
|
|
GrantSourceAdmin = "admin"
|
|
GrantSourceManagerCenter = "manager_center"
|
|
GrantStatusDone = "succeeded"
|
|
ResultWalletCredit = "wallet_credit"
|
|
ResultEntitlement = "entitlement"
|
|
|
|
GroupItemTypeResource = "resource"
|
|
GroupItemTypeWalletAsset = "wallet_asset"
|
|
|
|
GiftTypeNormal = "normal"
|
|
GiftTypeCP = "cp"
|
|
GiftTypeLucky = "lucky"
|
|
GiftTypeSuperLucky = "super_lucky"
|
|
GiftTypeExclusive = "exclusive"
|
|
GiftTypeNoble = "noble"
|
|
GiftTypeFlag = "flag"
|
|
GiftTypeActivity = "activity"
|
|
GiftTypeMagic = "magic"
|
|
GiftTypeCustom = "custom"
|
|
|
|
GiftEffectAnimation = "animation"
|
|
GiftEffectMusic = "music"
|
|
GiftEffectGlobalBroadcast = "global_broadcast"
|
|
)
|
|
|
|
type Resource struct {
|
|
AppCode string
|
|
ResourceID int64
|
|
ResourceCode string
|
|
ResourceType string
|
|
Name string
|
|
Status string
|
|
Grantable bool
|
|
GrantStrategy string
|
|
WalletAssetType string
|
|
WalletAssetAmount int64
|
|
UsageScopes []string
|
|
AssetURL string
|
|
PreviewURL string
|
|
AnimationURL string
|
|
MetadataJSON string
|
|
SortOrder int32
|
|
CreatedByUserID int64
|
|
UpdatedByUserID int64
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
ManagerGrantEnabled bool
|
|
}
|
|
|
|
type ResourceGroupItem struct {
|
|
GroupItemID int64
|
|
GroupID int64
|
|
ItemType string
|
|
ResourceID int64
|
|
Resource Resource
|
|
WalletAssetType string
|
|
WalletAssetAmount int64
|
|
Quantity int64
|
|
DurationMS int64
|
|
SortOrder int32
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
}
|
|
|
|
type ResourceGroup struct {
|
|
AppCode string
|
|
GroupID int64
|
|
GroupCode string
|
|
Name string
|
|
Status string
|
|
Description string
|
|
SortOrder int32
|
|
Items []ResourceGroupItem
|
|
CreatedByUserID int64
|
|
UpdatedByUserID int64
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
}
|
|
|
|
type GiftConfig struct {
|
|
AppCode string
|
|
GiftID string
|
|
ResourceID int64
|
|
Resource Resource
|
|
Status string
|
|
Name string
|
|
SortOrder int32
|
|
PresentationJSON string
|
|
PriceVersion string
|
|
CoinPrice int64
|
|
GiftPointAmount int64
|
|
HeatValue int64
|
|
GiftTypeCode string
|
|
ChargeAssetType string
|
|
EffectiveFromMS int64
|
|
EffectiveToMS int64
|
|
EffectTypes []string
|
|
CreatedByUserID int64
|
|
UpdatedByUserID int64
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
RegionIDs []int64
|
|
}
|
|
|
|
type UserResourceEntitlement struct {
|
|
AppCode string
|
|
EntitlementID string
|
|
UserID int64
|
|
ResourceID int64
|
|
Resource Resource
|
|
Status string
|
|
Quantity int64
|
|
RemainingQuantity int64
|
|
EffectiveAtMS int64
|
|
ExpiresAtMS int64
|
|
SourceGrantID string
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
}
|
|
|
|
type ResourceGrantItem struct {
|
|
GrantItemID int64
|
|
GrantID string
|
|
ResourceID int64
|
|
ResourceSnapshotJSON string
|
|
Quantity int64
|
|
DurationMS int64
|
|
ResultType string
|
|
WalletTransactionID string
|
|
EntitlementID string
|
|
CreatedAtMS int64
|
|
}
|
|
|
|
type ResourceGrant struct {
|
|
AppCode string
|
|
GrantID string
|
|
CommandID string
|
|
TargetUserID int64
|
|
GrantSource string
|
|
GrantSubjectType string
|
|
GrantSubjectID string
|
|
Status string
|
|
Reason string
|
|
OperatorUserID int64
|
|
Items []ResourceGrantItem
|
|
CreatedAtMS int64
|
|
UpdatedAtMS int64
|
|
}
|
|
|
|
type ListResourcesQuery struct {
|
|
AppCode string
|
|
ResourceType string
|
|
Status string
|
|
Keyword string
|
|
Page int32
|
|
PageSize int32
|
|
ActiveOnly bool
|
|
ManagerGrantOnly bool
|
|
}
|
|
|
|
type ResourceCommand struct {
|
|
AppCode string
|
|
ResourceID int64
|
|
ResourceCode string
|
|
ResourceType string
|
|
Name string
|
|
Status string
|
|
Grantable bool
|
|
GrantStrategy string
|
|
WalletAssetType string
|
|
WalletAssetAmount int64
|
|
UsageScopes []string
|
|
AssetURL string
|
|
PreviewURL string
|
|
AnimationURL string
|
|
MetadataJSON string
|
|
SortOrder int32
|
|
OperatorUserID int64
|
|
ManagerGrantEnabled bool
|
|
}
|
|
|
|
type StatusCommand struct {
|
|
AppCode string
|
|
ID int64
|
|
StringID string
|
|
Status string
|
|
OperatorUserID int64
|
|
}
|
|
|
|
type ResourceGroupItemInput struct {
|
|
ItemType string
|
|
ResourceID int64
|
|
WalletAssetType string
|
|
WalletAssetAmount int64
|
|
Quantity int64
|
|
DurationMS int64
|
|
SortOrder int32
|
|
}
|
|
|
|
type ListResourceGroupsQuery struct {
|
|
AppCode string
|
|
Status string
|
|
Keyword string
|
|
Page int32
|
|
PageSize int32
|
|
ActiveOnly bool
|
|
}
|
|
|
|
type ResourceGroupCommand struct {
|
|
AppCode string
|
|
GroupID int64
|
|
GroupCode string
|
|
Name string
|
|
Status string
|
|
Description string
|
|
SortOrder int32
|
|
Items []ResourceGroupItemInput
|
|
OperatorUserID int64
|
|
}
|
|
|
|
type ListGiftConfigsQuery struct {
|
|
AppCode string
|
|
Status string
|
|
Keyword string
|
|
Page int32
|
|
PageSize int32
|
|
ActiveOnly bool
|
|
RegionID int64
|
|
FilterRegion bool
|
|
}
|
|
|
|
type GiftConfigCommand struct {
|
|
AppCode string
|
|
GiftID string
|
|
ResourceID int64
|
|
Status string
|
|
Name string
|
|
SortOrder int32
|
|
PresentationJSON string
|
|
PriceVersion string
|
|
CoinPrice int64
|
|
GiftPointAmount int64
|
|
HeatValue int64
|
|
EffectiveAtMS int64
|
|
GiftTypeCode string
|
|
ChargeAssetType string
|
|
EffectiveFromMS int64
|
|
EffectiveToMS int64
|
|
EffectTypes []string
|
|
OperatorUserID int64
|
|
RegionIDs []int64
|
|
}
|
|
|
|
type GrantResourceCommand struct {
|
|
AppCode string
|
|
CommandID string
|
|
TargetUserID int64
|
|
ResourceID int64
|
|
Quantity int64
|
|
DurationMS int64
|
|
Reason string
|
|
OperatorUserID int64
|
|
GrantSource string
|
|
}
|
|
|
|
type GrantResourceGroupCommand struct {
|
|
AppCode string
|
|
CommandID string
|
|
TargetUserID int64
|
|
GroupID int64
|
|
Reason string
|
|
OperatorUserID int64
|
|
GrantSource string
|
|
}
|
|
|
|
type ListUserResourcesQuery struct {
|
|
AppCode string
|
|
UserID int64
|
|
ResourceType string
|
|
ActiveOnly bool
|
|
}
|
|
|
|
type EquipUserResourceCommand struct {
|
|
AppCode string
|
|
UserID int64
|
|
ResourceID int64
|
|
EntitlementID string
|
|
}
|
|
|
|
type ListResourceGrantsQuery struct {
|
|
AppCode string
|
|
TargetUserID int64
|
|
Status string
|
|
Page int32
|
|
PageSize int32
|
|
}
|
|
|
|
func NormalizeStatus(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
if value == "" {
|
|
return StatusActive
|
|
}
|
|
return value
|
|
}
|
|
|
|
func NormalizeGrantSource(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
if value == "" {
|
|
return GrantSourceAdmin
|
|
}
|
|
return value
|
|
}
|
|
|
|
func ValidResourceType(value string) bool {
|
|
switch strings.ToLower(strings.TrimSpace(value)) {
|
|
case TypeAvatarFrame, TypeCoin, TypeVehicle, TypeChatBubble, TypeBadge, TypeFloatingScreen, TypeGift:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func ValidStatus(value string) bool {
|
|
switch NormalizeStatus(value) {
|
|
case StatusActive, StatusDisabled:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func ValidGrantStrategy(value string) bool {
|
|
switch strings.ToLower(strings.TrimSpace(value)) {
|
|
case GrantStrategyWalletCredit, GrantStrategyNewEntitlement, GrantStrategyExtendExpiry, GrantStrategyIncreaseQuantity, GrantStrategySetActiveFlag:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func NormalizeGroupItemType(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
if value == "" {
|
|
return GroupItemTypeResource
|
|
}
|
|
return value
|
|
}
|
|
|
|
func ValidGroupItemType(value string) bool {
|
|
switch NormalizeGroupItemType(value) {
|
|
case GroupItemTypeResource, GroupItemTypeWalletAsset:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func NormalizeResourceType(value string) string {
|
|
return strings.ToLower(strings.TrimSpace(value))
|
|
}
|
|
|
|
func NormalizeGrantStrategy(value string) string {
|
|
return strings.ToLower(strings.TrimSpace(value))
|
|
}
|
|
|
|
func NormalizeWalletAssetType(value string) string {
|
|
return strings.ToUpper(strings.TrimSpace(value))
|
|
}
|
|
|
|
func NormalizeGiftTypeCode(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
if value == "" {
|
|
return GiftTypeNormal
|
|
}
|
|
return value
|
|
}
|
|
|
|
func ValidGiftTypeCode(value string) bool {
|
|
switch NormalizeGiftTypeCode(value) {
|
|
case GiftTypeNormal, GiftTypeCP, GiftTypeLucky, GiftTypeSuperLucky, GiftTypeExclusive, GiftTypeNoble, GiftTypeFlag, GiftTypeActivity, GiftTypeMagic, GiftTypeCustom:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func NormalizeGiftEffectType(value string) string {
|
|
return strings.ToLower(strings.TrimSpace(value))
|
|
}
|
|
|
|
func ValidGiftEffectType(value string) bool {
|
|
switch NormalizeGiftEffectType(value) {
|
|
case GiftEffectAnimation, GiftEffectMusic, GiftEffectGlobalBroadcast:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func IsWalletCredit(resource Resource) bool {
|
|
return NormalizeGrantStrategy(resource.GrantStrategy) == GrantStrategyWalletCredit
|
|
}
|
|
|
|
func IsCoinResource(resource Resource) bool {
|
|
return NormalizeResourceType(resource.ResourceType) == TypeCoin
|
|
}
|
|
|
|
func WalletAssetForCoin() string {
|
|
return ledger.AssetCoin
|
|
}
|