From 113c5096e0040081b1e1232ef60b0ec58fa5ec30 Mon Sep 17 00:00:00 2001 From: zhx Date: Tue, 26 May 2026 05:16:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B9=B8=E8=BF=90=E7=A4=BC?= =?UTF-8?q?=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/proto/wallet/v1/wallet.pb.go | 1955 +++++++++++------ api/proto/wallet/v1/wallet.proto | 70 + api/proto/wallet/v1/wallet_grpc.pb.go | 114 + pkg/tencentim/rest_client.go | 47 + pkg/tencentim/rest_client_real_test.go | 12 +- pkg/tencentim/rest_client_test.go | 42 + server/admin/docs/权限管理.md | 2 + .../integration/walletclient/client.go | 15 + server/admin/internal/modules/resource/dto.go | 41 + .../internal/modules/resource/handler.go | 73 + .../internal/modules/resource/request.go | 39 + .../admin/internal/modules/resource/routes.go | 5 + server/admin/internal/repository/seed.go | 18 +- .../026_resource_shop_navigation.sql | 69 + .../storage/mysql/lucky_gift_repository.go | 32 +- .../mysql/lucky_gift_repository_test.go | 57 +- .../configs/config.docker.yaml | 3 + .../configs/config.tencent.example.yaml | 5 + services/gateway-service/configs/config.yaml | 3 + services/gateway-service/internal/app/app.go | 31 + .../internal/client/wallet_client.go | 5 + .../gateway-service/internal/config/config.go | 42 + .../internal/transport/http/handler.go | 28 + .../transport/http/httproutes/router.go | 2 + .../transport/http/resourceapi/handler.go | 4 + .../http/resourceapi/resource_handler.go | 63 + .../internal/transport/http/response_test.go | 135 ++ .../internal/transport/http/router.go | 1 + .../user-service/configs/config.docker.yaml | 12 +- .../configs/config.tencent.example.yaml | 2 +- services/user-service/configs/config.yaml | 12 +- services/user-service/internal/app/app.go | 15 + .../internal/service/auth/im_account.go | 26 + .../internal/service/auth/quick_account.go | 1 + .../internal/service/auth/service.go | 16 + .../internal/service/auth/service_test.go | 25 +- .../internal/service/auth/third_party.go | 1 + .../mysql/initdb/001_wallet_service.sql | 18 + .../internal/domain/resource/resource.go | 73 + .../internal/service/wallet/resource.go | 34 + .../internal/service/wallet/service.go | 3 + .../storage/mysql/resource_repository.go | 368 ++++ .../internal/transport/grpc/resource.go | 88 + 43 files changed, 2948 insertions(+), 659 deletions(-) create mode 100644 server/admin/migrations/026_resource_shop_navigation.sql create mode 100644 services/user-service/internal/service/auth/im_account.go diff --git a/api/proto/wallet/v1/wallet.pb.go b/api/proto/wallet/v1/wallet.pb.go index ade872a5..ea80decc 100644 --- a/api/proto/wallet/v1/wallet.pb.go +++ b/api/proto/wallet/v1/wallet.pb.go @@ -1866,6 +1866,162 @@ func (x *GiftTypeConfig) GetUpdatedAtMs() int64 { return 0 } +type ResourceShopItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ShopItemId int64 `protobuf:"varint,2,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + ResourceId int64 `protobuf:"varint,3,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + DurationDays int32 `protobuf:"varint,6,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + PriceType string `protobuf:"bytes,7,opt,name=price_type,json=priceType,proto3" json:"price_type,omitempty"` + CoinPrice int64 `protobuf:"varint,8,opt,name=coin_price,json=coinPrice,proto3" json:"coin_price,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,9,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,10,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + SortOrder int32 `protobuf:"varint,11,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + CreatedByUserId int64 `protobuf:"varint,12,opt,name=created_by_user_id,json=createdByUserId,proto3" json:"created_by_user_id,omitempty"` + UpdatedByUserId int64 `protobuf:"varint,13,opt,name=updated_by_user_id,json=updatedByUserId,proto3" json:"updated_by_user_id,omitempty"` + CreatedAtMs int64 `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,15,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResourceShopItem) Reset() { + *x = ResourceShopItem{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResourceShopItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceShopItem) ProtoMessage() {} + +func (x *ResourceShopItem) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceShopItem.ProtoReflect.Descriptor instead. +func (*ResourceShopItem) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{16} +} + +func (x *ResourceShopItem) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *ResourceShopItem) GetShopItemId() int64 { + if x != nil { + return x.ShopItemId + } + return 0 +} + +func (x *ResourceShopItem) GetResourceId() int64 { + if x != nil { + return x.ResourceId + } + return 0 +} + +func (x *ResourceShopItem) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceShopItem) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ResourceShopItem) GetDurationDays() int32 { + if x != nil { + return x.DurationDays + } + return 0 +} + +func (x *ResourceShopItem) GetPriceType() string { + if x != nil { + return x.PriceType + } + return "" +} + +func (x *ResourceShopItem) GetCoinPrice() int64 { + if x != nil { + return x.CoinPrice + } + return 0 +} + +func (x *ResourceShopItem) GetEffectiveFromMs() int64 { + if x != nil { + return x.EffectiveFromMs + } + return 0 +} + +func (x *ResourceShopItem) GetEffectiveToMs() int64 { + if x != nil { + return x.EffectiveToMs + } + return 0 +} + +func (x *ResourceShopItem) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *ResourceShopItem) GetCreatedByUserId() int64 { + if x != nil { + return x.CreatedByUserId + } + return 0 +} + +func (x *ResourceShopItem) GetUpdatedByUserId() int64 { + if x != nil { + return x.UpdatedByUserId + } + return 0 +} + +func (x *ResourceShopItem) GetCreatedAtMs() int64 { + if x != nil { + return x.CreatedAtMs + } + return 0 +} + +func (x *ResourceShopItem) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + type UserResourceEntitlement struct { state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` @@ -1887,7 +2043,7 @@ type UserResourceEntitlement struct { func (x *UserResourceEntitlement) Reset() { *x = UserResourceEntitlement{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[16] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1899,7 +2055,7 @@ func (x *UserResourceEntitlement) String() string { func (*UserResourceEntitlement) ProtoMessage() {} func (x *UserResourceEntitlement) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[16] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1912,7 +2068,7 @@ func (x *UserResourceEntitlement) ProtoReflect() protoreflect.Message { // Deprecated: Use UserResourceEntitlement.ProtoReflect.Descriptor instead. func (*UserResourceEntitlement) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{16} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{17} } func (x *UserResourceEntitlement) GetAppCode() string { @@ -2024,7 +2180,7 @@ type ResourceGrantItem struct { func (x *ResourceGrantItem) Reset() { *x = ResourceGrantItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[17] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2036,7 +2192,7 @@ func (x *ResourceGrantItem) String() string { func (*ResourceGrantItem) ProtoMessage() {} func (x *ResourceGrantItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[17] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2049,7 +2205,7 @@ func (x *ResourceGrantItem) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrantItem.ProtoReflect.Descriptor instead. func (*ResourceGrantItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{17} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{18} } func (x *ResourceGrantItem) GetGrantItemId() int64 { @@ -2143,7 +2299,7 @@ type ResourceGrant struct { func (x *ResourceGrant) Reset() { *x = ResourceGrant{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[18] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2155,7 +2311,7 @@ func (x *ResourceGrant) String() string { func (*ResourceGrant) ProtoMessage() {} func (x *ResourceGrant) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[18] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2168,7 +2324,7 @@ func (x *ResourceGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrant.ProtoReflect.Descriptor instead. func (*ResourceGrant) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{18} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{19} } func (x *ResourceGrant) GetAppCode() string { @@ -2277,7 +2433,7 @@ type ResourceGroupItemInput struct { func (x *ResourceGroupItemInput) Reset() { *x = ResourceGroupItemInput{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[19] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2289,7 +2445,7 @@ func (x *ResourceGroupItemInput) String() string { func (*ResourceGroupItemInput) ProtoMessage() {} func (x *ResourceGroupItemInput) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[19] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2302,7 +2458,7 @@ func (x *ResourceGroupItemInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGroupItemInput.ProtoReflect.Descriptor instead. func (*ResourceGroupItemInput) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{19} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{20} } func (x *ResourceGroupItemInput) GetResourceId() int64 { @@ -2371,7 +2527,7 @@ type ListResourcesRequest struct { func (x *ListResourcesRequest) Reset() { *x = ListResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[20] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2383,7 +2539,7 @@ func (x *ListResourcesRequest) String() string { func (*ListResourcesRequest) ProtoMessage() {} func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[20] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2396,7 +2552,7 @@ func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesRequest.ProtoReflect.Descriptor instead. func (*ListResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{20} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{21} } func (x *ListResourcesRequest) GetRequestId() string { @@ -2472,7 +2628,7 @@ type ListResourcesResponse struct { func (x *ListResourcesResponse) Reset() { *x = ListResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[21] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2484,7 +2640,7 @@ func (x *ListResourcesResponse) String() string { func (*ListResourcesResponse) ProtoMessage() {} func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[21] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2497,7 +2653,7 @@ func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesResponse.ProtoReflect.Descriptor instead. func (*ListResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{21} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{22} } func (x *ListResourcesResponse) GetResources() []*Resource { @@ -2525,7 +2681,7 @@ type GetResourceRequest struct { func (x *GetResourceRequest) Reset() { *x = GetResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[22] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2537,7 +2693,7 @@ func (x *GetResourceRequest) String() string { func (*GetResourceRequest) ProtoMessage() {} func (x *GetResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[22] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2550,7 +2706,7 @@ func (x *GetResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceRequest.ProtoReflect.Descriptor instead. func (*GetResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{22} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{23} } func (x *GetResourceRequest) GetRequestId() string { @@ -2583,7 +2739,7 @@ type GetResourceResponse struct { func (x *GetResourceResponse) Reset() { *x = GetResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[23] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2595,7 +2751,7 @@ func (x *GetResourceResponse) String() string { func (*GetResourceResponse) ProtoMessage() {} func (x *GetResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[23] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2608,7 +2764,7 @@ func (x *GetResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceResponse.ProtoReflect.Descriptor instead. func (*GetResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{23} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{24} } func (x *GetResourceResponse) GetResource() *Resource { @@ -2647,7 +2803,7 @@ type CreateResourceRequest struct { func (x *CreateResourceRequest) Reset() { *x = CreateResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[24] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2659,7 +2815,7 @@ func (x *CreateResourceRequest) String() string { func (*CreateResourceRequest) ProtoMessage() {} func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[24] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2672,7 +2828,7 @@ func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceRequest.ProtoReflect.Descriptor instead. func (*CreateResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{24} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{25} } func (x *CreateResourceRequest) GetRequestId() string { @@ -2852,7 +3008,7 @@ type UpdateResourceRequest struct { func (x *UpdateResourceRequest) Reset() { *x = UpdateResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[25] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2864,7 +3020,7 @@ func (x *UpdateResourceRequest) String() string { func (*UpdateResourceRequest) ProtoMessage() {} func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[25] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2877,7 +3033,7 @@ func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceRequest.ProtoReflect.Descriptor instead. func (*UpdateResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{25} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{26} } func (x *UpdateResourceRequest) GetRequestId() string { @@ -3047,7 +3203,7 @@ type SetResourceStatusRequest struct { func (x *SetResourceStatusRequest) Reset() { *x = SetResourceStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[26] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3059,7 +3215,7 @@ func (x *SetResourceStatusRequest) String() string { func (*SetResourceStatusRequest) ProtoMessage() {} func (x *SetResourceStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[26] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3072,7 +3228,7 @@ func (x *SetResourceStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResourceStatusRequest.ProtoReflect.Descriptor instead. func (*SetResourceStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{26} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{27} } func (x *SetResourceStatusRequest) GetRequestId() string { @@ -3119,7 +3275,7 @@ type ResourceResponse struct { func (x *ResourceResponse) Reset() { *x = ResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[27] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3131,7 +3287,7 @@ func (x *ResourceResponse) String() string { func (*ResourceResponse) ProtoMessage() {} func (x *ResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[27] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3144,7 +3300,7 @@ func (x *ResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceResponse.ProtoReflect.Descriptor instead. func (*ResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{27} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{28} } func (x *ResourceResponse) GetResource() *Resource { @@ -3169,7 +3325,7 @@ type ListResourceGroupsRequest struct { func (x *ListResourceGroupsRequest) Reset() { *x = ListResourceGroupsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[28] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3181,7 +3337,7 @@ func (x *ListResourceGroupsRequest) String() string { func (*ListResourceGroupsRequest) ProtoMessage() {} func (x *ListResourceGroupsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[28] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3194,7 +3350,7 @@ func (x *ListResourceGroupsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGroupsRequest.ProtoReflect.Descriptor instead. func (*ListResourceGroupsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{28} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{29} } func (x *ListResourceGroupsRequest) GetRequestId() string { @@ -3256,7 +3412,7 @@ type ListResourceGroupsResponse struct { func (x *ListResourceGroupsResponse) Reset() { *x = ListResourceGroupsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[29] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3268,7 +3424,7 @@ func (x *ListResourceGroupsResponse) String() string { func (*ListResourceGroupsResponse) ProtoMessage() {} func (x *ListResourceGroupsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[29] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3281,7 +3437,7 @@ func (x *ListResourceGroupsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGroupsResponse.ProtoReflect.Descriptor instead. func (*ListResourceGroupsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{29} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{30} } func (x *ListResourceGroupsResponse) GetGroups() []*ResourceGroup { @@ -3309,7 +3465,7 @@ type GetResourceGroupRequest struct { func (x *GetResourceGroupRequest) Reset() { *x = GetResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[30] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3321,7 +3477,7 @@ func (x *GetResourceGroupRequest) String() string { func (*GetResourceGroupRequest) ProtoMessage() {} func (x *GetResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[30] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3334,7 +3490,7 @@ func (x *GetResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceGroupRequest.ProtoReflect.Descriptor instead. func (*GetResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{30} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{31} } func (x *GetResourceGroupRequest) GetRequestId() string { @@ -3367,7 +3523,7 @@ type GetResourceGroupResponse struct { func (x *GetResourceGroupResponse) Reset() { *x = GetResourceGroupResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[31] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3379,7 +3535,7 @@ func (x *GetResourceGroupResponse) String() string { func (*GetResourceGroupResponse) ProtoMessage() {} func (x *GetResourceGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[31] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3392,7 +3548,7 @@ func (x *GetResourceGroupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResourceGroupResponse.ProtoReflect.Descriptor instead. func (*GetResourceGroupResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{31} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{32} } func (x *GetResourceGroupResponse) GetGroup() *ResourceGroup { @@ -3419,7 +3575,7 @@ type CreateResourceGroupRequest struct { func (x *CreateResourceGroupRequest) Reset() { *x = CreateResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[32] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3431,7 +3587,7 @@ func (x *CreateResourceGroupRequest) String() string { func (*CreateResourceGroupRequest) ProtoMessage() {} func (x *CreateResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[32] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3444,7 +3600,7 @@ func (x *CreateResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceGroupRequest.ProtoReflect.Descriptor instead. func (*CreateResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{32} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{33} } func (x *CreateResourceGroupRequest) GetRequestId() string { @@ -3528,7 +3684,7 @@ type UpdateResourceGroupRequest struct { func (x *UpdateResourceGroupRequest) Reset() { *x = UpdateResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[33] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3540,7 +3696,7 @@ func (x *UpdateResourceGroupRequest) String() string { func (*UpdateResourceGroupRequest) ProtoMessage() {} func (x *UpdateResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[33] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3553,7 +3709,7 @@ func (x *UpdateResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceGroupRequest.ProtoReflect.Descriptor instead. func (*UpdateResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{33} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{34} } func (x *UpdateResourceGroupRequest) GetRequestId() string { @@ -3639,7 +3795,7 @@ type SetResourceGroupStatusRequest struct { func (x *SetResourceGroupStatusRequest) Reset() { *x = SetResourceGroupStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[34] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3651,7 +3807,7 @@ func (x *SetResourceGroupStatusRequest) String() string { func (*SetResourceGroupStatusRequest) ProtoMessage() {} func (x *SetResourceGroupStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[34] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3664,7 +3820,7 @@ func (x *SetResourceGroupStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResourceGroupStatusRequest.ProtoReflect.Descriptor instead. func (*SetResourceGroupStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{34} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{35} } func (x *SetResourceGroupStatusRequest) GetRequestId() string { @@ -3711,7 +3867,7 @@ type ResourceGroupResponse struct { func (x *ResourceGroupResponse) Reset() { *x = ResourceGroupResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[35] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3723,7 +3879,7 @@ func (x *ResourceGroupResponse) String() string { func (*ResourceGroupResponse) ProtoMessage() {} func (x *ResourceGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[35] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3736,7 +3892,7 @@ func (x *ResourceGroupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGroupResponse.ProtoReflect.Descriptor instead. func (*ResourceGroupResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{35} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{36} } func (x *ResourceGroupResponse) GetGroup() *ResourceGroup { @@ -3763,7 +3919,7 @@ type ListGiftConfigsRequest struct { func (x *ListGiftConfigsRequest) Reset() { *x = ListGiftConfigsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[36] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3775,7 +3931,7 @@ func (x *ListGiftConfigsRequest) String() string { func (*ListGiftConfigsRequest) ProtoMessage() {} func (x *ListGiftConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[36] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3788,7 +3944,7 @@ func (x *ListGiftConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftConfigsRequest.ProtoReflect.Descriptor instead. func (*ListGiftConfigsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{36} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{37} } func (x *ListGiftConfigsRequest) GetRequestId() string { @@ -3864,7 +4020,7 @@ type ListGiftConfigsResponse struct { func (x *ListGiftConfigsResponse) Reset() { *x = ListGiftConfigsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[37] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3876,7 +4032,7 @@ func (x *ListGiftConfigsResponse) String() string { func (*ListGiftConfigsResponse) ProtoMessage() {} func (x *ListGiftConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[37] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3889,7 +4045,7 @@ func (x *ListGiftConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftConfigsResponse.ProtoReflect.Descriptor instead. func (*ListGiftConfigsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{37} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{38} } func (x *ListGiftConfigsResponse) GetGifts() []*GiftConfig { @@ -3918,7 +4074,7 @@ type ListGiftTypeConfigsRequest struct { func (x *ListGiftTypeConfigsRequest) Reset() { *x = ListGiftTypeConfigsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[38] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3930,7 +4086,7 @@ func (x *ListGiftTypeConfigsRequest) String() string { func (*ListGiftTypeConfigsRequest) ProtoMessage() {} func (x *ListGiftTypeConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[38] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3943,7 +4099,7 @@ func (x *ListGiftTypeConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftTypeConfigsRequest.ProtoReflect.Descriptor instead. func (*ListGiftTypeConfigsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{38} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{39} } func (x *ListGiftTypeConfigsRequest) GetRequestId() string { @@ -3983,7 +4139,7 @@ type ListGiftTypeConfigsResponse struct { func (x *ListGiftTypeConfigsResponse) Reset() { *x = ListGiftTypeConfigsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[39] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3995,7 +4151,7 @@ func (x *ListGiftTypeConfigsResponse) String() string { func (*ListGiftTypeConfigsResponse) ProtoMessage() {} func (x *ListGiftTypeConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[39] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4008,7 +4164,7 @@ func (x *ListGiftTypeConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGiftTypeConfigsResponse.ProtoReflect.Descriptor instead. func (*ListGiftTypeConfigsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{39} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{40} } func (x *ListGiftTypeConfigsResponse) GetGiftTypes() []*GiftTypeConfig { @@ -4034,7 +4190,7 @@ type UpsertGiftTypeConfigRequest struct { func (x *UpsertGiftTypeConfigRequest) Reset() { *x = UpsertGiftTypeConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[40] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4046,7 +4202,7 @@ func (x *UpsertGiftTypeConfigRequest) String() string { func (*UpsertGiftTypeConfigRequest) ProtoMessage() {} func (x *UpsertGiftTypeConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[40] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4059,7 +4215,7 @@ func (x *UpsertGiftTypeConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertGiftTypeConfigRequest.ProtoReflect.Descriptor instead. func (*UpsertGiftTypeConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{40} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{41} } func (x *UpsertGiftTypeConfigRequest) GetRequestId() string { @@ -4127,7 +4283,7 @@ type GiftTypeConfigResponse struct { func (x *GiftTypeConfigResponse) Reset() { *x = GiftTypeConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[41] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4139,7 +4295,7 @@ func (x *GiftTypeConfigResponse) String() string { func (*GiftTypeConfigResponse) ProtoMessage() {} func (x *GiftTypeConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[41] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4152,7 +4308,7 @@ func (x *GiftTypeConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftTypeConfigResponse.ProtoReflect.Descriptor instead. func (*GiftTypeConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{41} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{42} } func (x *GiftTypeConfigResponse) GetGiftType() *GiftTypeConfig { @@ -4190,7 +4346,7 @@ type CreateGiftConfigRequest struct { func (x *CreateGiftConfigRequest) Reset() { *x = CreateGiftConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[42] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4202,7 +4358,7 @@ func (x *CreateGiftConfigRequest) String() string { func (*CreateGiftConfigRequest) ProtoMessage() {} func (x *CreateGiftConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[42] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4215,7 +4371,7 @@ func (x *CreateGiftConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGiftConfigRequest.ProtoReflect.Descriptor instead. func (*CreateGiftConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{42} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{43} } func (x *CreateGiftConfigRequest) GetRequestId() string { @@ -4386,7 +4542,7 @@ type UpdateGiftConfigRequest struct { func (x *UpdateGiftConfigRequest) Reset() { *x = UpdateGiftConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[43] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4398,7 +4554,7 @@ func (x *UpdateGiftConfigRequest) String() string { func (*UpdateGiftConfigRequest) ProtoMessage() {} func (x *UpdateGiftConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[43] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4411,7 +4567,7 @@ func (x *UpdateGiftConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGiftConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateGiftConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{43} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{44} } func (x *UpdateGiftConfigRequest) GetRequestId() string { @@ -4567,7 +4723,7 @@ type SetGiftConfigStatusRequest struct { func (x *SetGiftConfigStatusRequest) Reset() { *x = SetGiftConfigStatusRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[44] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4579,7 +4735,7 @@ func (x *SetGiftConfigStatusRequest) String() string { func (*SetGiftConfigStatusRequest) ProtoMessage() {} func (x *SetGiftConfigStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[44] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4592,7 +4748,7 @@ func (x *SetGiftConfigStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGiftConfigStatusRequest.ProtoReflect.Descriptor instead. func (*SetGiftConfigStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{44} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{45} } func (x *SetGiftConfigStatusRequest) GetRequestId() string { @@ -4639,7 +4795,7 @@ type GiftConfigResponse struct { func (x *GiftConfigResponse) Reset() { *x = GiftConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[45] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4651,7 +4807,7 @@ func (x *GiftConfigResponse) String() string { func (*GiftConfigResponse) ProtoMessage() {} func (x *GiftConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[45] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4664,7 +4820,7 @@ func (x *GiftConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftConfigResponse.ProtoReflect.Descriptor instead. func (*GiftConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{45} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{46} } func (x *GiftConfigResponse) GetGift() *GiftConfig { @@ -4691,7 +4847,7 @@ type GrantResourceRequest struct { func (x *GrantResourceRequest) Reset() { *x = GrantResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[46] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4703,7 +4859,7 @@ func (x *GrantResourceRequest) String() string { func (*GrantResourceRequest) ProtoMessage() {} func (x *GrantResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[46] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4716,7 +4872,7 @@ func (x *GrantResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantResourceRequest.ProtoReflect.Descriptor instead. func (*GrantResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{46} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{47} } func (x *GrantResourceRequest) GetCommandId() string { @@ -4797,7 +4953,7 @@ type GrantResourceGroupRequest struct { func (x *GrantResourceGroupRequest) Reset() { *x = GrantResourceGroupRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[47] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4809,7 +4965,7 @@ func (x *GrantResourceGroupRequest) String() string { func (*GrantResourceGroupRequest) ProtoMessage() {} func (x *GrantResourceGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[47] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4822,7 +4978,7 @@ func (x *GrantResourceGroupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantResourceGroupRequest.ProtoReflect.Descriptor instead. func (*GrantResourceGroupRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{47} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{48} } func (x *GrantResourceGroupRequest) GetCommandId() string { @@ -4883,7 +5039,7 @@ type ResourceGrantResponse struct { func (x *ResourceGrantResponse) Reset() { *x = ResourceGrantResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[48] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4895,7 +5051,7 @@ func (x *ResourceGrantResponse) String() string { func (*ResourceGrantResponse) ProtoMessage() {} func (x *ResourceGrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[48] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4908,7 +5064,7 @@ func (x *ResourceGrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceGrantResponse.ProtoReflect.Descriptor instead. func (*ResourceGrantResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{48} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{49} } func (x *ResourceGrantResponse) GetGrant() *ResourceGrant { @@ -4931,7 +5087,7 @@ type ListUserResourcesRequest struct { func (x *ListUserResourcesRequest) Reset() { *x = ListUserResourcesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[49] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4943,7 +5099,7 @@ func (x *ListUserResourcesRequest) String() string { func (*ListUserResourcesRequest) ProtoMessage() {} func (x *ListUserResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[49] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4956,7 +5112,7 @@ func (x *ListUserResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserResourcesRequest.ProtoReflect.Descriptor instead. func (*ListUserResourcesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{49} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{50} } func (x *ListUserResourcesRequest) GetRequestId() string { @@ -5003,7 +5159,7 @@ type ListUserResourcesResponse struct { func (x *ListUserResourcesResponse) Reset() { *x = ListUserResourcesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[50] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5015,7 +5171,7 @@ func (x *ListUserResourcesResponse) String() string { func (*ListUserResourcesResponse) ProtoMessage() {} func (x *ListUserResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[50] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5028,7 +5184,7 @@ func (x *ListUserResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserResourcesResponse.ProtoReflect.Descriptor instead. func (*ListUserResourcesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{50} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{51} } func (x *ListUserResourcesResponse) GetResources() []*UserResourceEntitlement { @@ -5051,7 +5207,7 @@ type EquipUserResourceRequest struct { func (x *EquipUserResourceRequest) Reset() { *x = EquipUserResourceRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5063,7 +5219,7 @@ func (x *EquipUserResourceRequest) String() string { func (*EquipUserResourceRequest) ProtoMessage() {} func (x *EquipUserResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[51] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5076,7 +5232,7 @@ func (x *EquipUserResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipUserResourceRequest.ProtoReflect.Descriptor instead. func (*EquipUserResourceRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{51} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{52} } func (x *EquipUserResourceRequest) GetRequestId() string { @@ -5123,7 +5279,7 @@ type EquipUserResourceResponse struct { func (x *EquipUserResourceResponse) Reset() { *x = EquipUserResourceResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5135,7 +5291,7 @@ func (x *EquipUserResourceResponse) String() string { func (*EquipUserResourceResponse) ProtoMessage() {} func (x *EquipUserResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[52] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5148,7 +5304,7 @@ func (x *EquipUserResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EquipUserResourceResponse.ProtoReflect.Descriptor instead. func (*EquipUserResourceResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{52} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{53} } func (x *EquipUserResourceResponse) GetResource() *UserResourceEntitlement { @@ -5172,7 +5328,7 @@ type ListResourceGrantsRequest struct { func (x *ListResourceGrantsRequest) Reset() { *x = ListResourceGrantsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5184,7 +5340,7 @@ func (x *ListResourceGrantsRequest) String() string { func (*ListResourceGrantsRequest) ProtoMessage() {} func (x *ListResourceGrantsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[53] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5197,7 +5353,7 @@ func (x *ListResourceGrantsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGrantsRequest.ProtoReflect.Descriptor instead. func (*ListResourceGrantsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{53} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{54} } func (x *ListResourceGrantsRequest) GetRequestId() string { @@ -5252,7 +5408,7 @@ type ListResourceGrantsResponse struct { func (x *ListResourceGrantsResponse) Reset() { *x = ListResourceGrantsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5264,7 +5420,7 @@ func (x *ListResourceGrantsResponse) String() string { func (*ListResourceGrantsResponse) ProtoMessage() {} func (x *ListResourceGrantsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[54] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5277,7 +5433,7 @@ func (x *ListResourceGrantsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceGrantsResponse.ProtoReflect.Descriptor instead. func (*ListResourceGrantsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{54} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{55} } func (x *ListResourceGrantsResponse) GetGrants() []*ResourceGrant { @@ -5294,6 +5450,482 @@ func (x *ListResourceGrantsResponse) GetTotal() int64 { return 0 } +type ResourceShopItemInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + ShopItemId int64 `protobuf:"varint,1,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + ResourceId int64 `protobuf:"varint,2,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + DurationDays int32 `protobuf:"varint,4,opt,name=duration_days,json=durationDays,proto3" json:"duration_days,omitempty"` + EffectiveFromMs int64 `protobuf:"varint,5,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"` + EffectiveToMs int64 `protobuf:"varint,6,opt,name=effective_to_ms,json=effectiveToMs,proto3" json:"effective_to_ms,omitempty"` + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResourceShopItemInput) Reset() { + *x = ResourceShopItemInput{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResourceShopItemInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceShopItemInput) ProtoMessage() {} + +func (x *ResourceShopItemInput) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceShopItemInput.ProtoReflect.Descriptor instead. +func (*ResourceShopItemInput) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{56} +} + +func (x *ResourceShopItemInput) GetShopItemId() int64 { + if x != nil { + return x.ShopItemId + } + return 0 +} + +func (x *ResourceShopItemInput) GetResourceId() int64 { + if x != nil { + return x.ResourceId + } + return 0 +} + +func (x *ResourceShopItemInput) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ResourceShopItemInput) GetDurationDays() int32 { + if x != nil { + return x.DurationDays + } + return 0 +} + +func (x *ResourceShopItemInput) GetEffectiveFromMs() int64 { + if x != nil { + return x.EffectiveFromMs + } + return 0 +} + +func (x *ResourceShopItemInput) GetEffectiveToMs() int64 { + if x != nil { + return x.EffectiveToMs + } + return 0 +} + +func (x *ResourceShopItemInput) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +type ListResourceShopItemsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ResourceType string `protobuf:"bytes,3,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Keyword string `protobuf:"bytes,5,opt,name=keyword,proto3" json:"keyword,omitempty"` + Page int32 `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + ActiveOnly bool `protobuf:"varint,8,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListResourceShopItemsRequest) Reset() { + *x = ListResourceShopItemsRequest{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListResourceShopItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListResourceShopItemsRequest) ProtoMessage() {} + +func (x *ListResourceShopItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListResourceShopItemsRequest.ProtoReflect.Descriptor instead. +func (*ListResourceShopItemsRequest) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{57} +} + +func (x *ListResourceShopItemsRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +func (x *ListResourceShopItemsRequest) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *ListResourceShopItemsRequest) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + +func (x *ListResourceShopItemsRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListResourceShopItemsRequest) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +func (x *ListResourceShopItemsRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListResourceShopItemsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListResourceShopItemsRequest) GetActiveOnly() bool { + if x != nil { + return x.ActiveOnly + } + return false +} + +type ListResourceShopItemsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListResourceShopItemsResponse) Reset() { + *x = ListResourceShopItemsResponse{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListResourceShopItemsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListResourceShopItemsResponse) ProtoMessage() {} + +func (x *ListResourceShopItemsResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListResourceShopItemsResponse.ProtoReflect.Descriptor instead. +func (*ListResourceShopItemsResponse) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{58} +} + +func (x *ListResourceShopItemsResponse) GetItems() []*ResourceShopItem { + if x != nil { + return x.Items + } + return nil +} + +func (x *ListResourceShopItemsResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +type UpsertResourceShopItemsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + Items []*ResourceShopItemInput `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` + OperatorUserId int64 `protobuf:"varint,4,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpsertResourceShopItemsRequest) Reset() { + *x = UpsertResourceShopItemsRequest{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpsertResourceShopItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertResourceShopItemsRequest) ProtoMessage() {} + +func (x *UpsertResourceShopItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertResourceShopItemsRequest.ProtoReflect.Descriptor instead. +func (*UpsertResourceShopItemsRequest) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{59} +} + +func (x *UpsertResourceShopItemsRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +func (x *UpsertResourceShopItemsRequest) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *UpsertResourceShopItemsRequest) GetItems() []*ResourceShopItemInput { + if x != nil { + return x.Items + } + return nil +} + +func (x *UpsertResourceShopItemsRequest) GetOperatorUserId() int64 { + if x != nil { + return x.OperatorUserId + } + return 0 +} + +type UpsertResourceShopItemsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*ResourceShopItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpsertResourceShopItemsResponse) Reset() { + *x = UpsertResourceShopItemsResponse{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpsertResourceShopItemsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertResourceShopItemsResponse) ProtoMessage() {} + +func (x *UpsertResourceShopItemsResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertResourceShopItemsResponse.ProtoReflect.Descriptor instead. +func (*UpsertResourceShopItemsResponse) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{60} +} + +func (x *UpsertResourceShopItemsResponse) GetItems() []*ResourceShopItem { + if x != nil { + return x.Items + } + return nil +} + +type SetResourceShopItemStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + ShopItemId int64 `protobuf:"varint,3,opt,name=shop_item_id,json=shopItemId,proto3" json:"shop_item_id,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + OperatorUserId int64 `protobuf:"varint,5,opt,name=operator_user_id,json=operatorUserId,proto3" json:"operator_user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetResourceShopItemStatusRequest) Reset() { + *x = SetResourceShopItemStatusRequest{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetResourceShopItemStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetResourceShopItemStatusRequest) ProtoMessage() {} + +func (x *SetResourceShopItemStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetResourceShopItemStatusRequest.ProtoReflect.Descriptor instead. +func (*SetResourceShopItemStatusRequest) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{61} +} + +func (x *SetResourceShopItemStatusRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +func (x *SetResourceShopItemStatusRequest) GetAppCode() string { + if x != nil { + return x.AppCode + } + return "" +} + +func (x *SetResourceShopItemStatusRequest) GetShopItemId() int64 { + if x != nil { + return x.ShopItemId + } + return 0 +} + +func (x *SetResourceShopItemStatusRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *SetResourceShopItemStatusRequest) GetOperatorUserId() int64 { + if x != nil { + return x.OperatorUserId + } + return 0 +} + +type ResourceShopItemResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Item *ResourceShopItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResourceShopItemResponse) Reset() { + *x = ResourceShopItemResponse{} + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResourceShopItemResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceShopItemResponse) ProtoMessage() {} + +func (x *ResourceShopItemResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceShopItemResponse.ProtoReflect.Descriptor instead. +func (*ResourceShopItemResponse) Descriptor() ([]byte, []int) { + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{62} +} + +func (x *ResourceShopItemResponse) GetItem() *ResourceShopItem { + if x != nil { + return x.Item + } + return nil +} + type RechargeBill struct { state protoimpl.MessageState `protogen:"open.v1"` AppCode string `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` @@ -5320,7 +5952,7 @@ type RechargeBill struct { func (x *RechargeBill) Reset() { *x = RechargeBill{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5332,7 +5964,7 @@ func (x *RechargeBill) String() string { func (*RechargeBill) ProtoMessage() {} func (x *RechargeBill) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[55] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5345,7 +5977,7 @@ func (x *RechargeBill) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeBill.ProtoReflect.Descriptor instead. func (*RechargeBill) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{55} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{63} } func (x *RechargeBill) GetAppCode() string { @@ -5494,7 +6126,7 @@ type ListRechargeBillsRequest struct { func (x *ListRechargeBillsRequest) Reset() { *x = ListRechargeBillsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5506,7 +6138,7 @@ func (x *ListRechargeBillsRequest) String() string { func (*ListRechargeBillsRequest) ProtoMessage() {} func (x *ListRechargeBillsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[56] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5519,7 +6151,7 @@ func (x *ListRechargeBillsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeBillsRequest.ProtoReflect.Descriptor instead. func (*ListRechargeBillsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{56} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{64} } func (x *ListRechargeBillsRequest) GetRequestId() string { @@ -5616,7 +6248,7 @@ type ListRechargeBillsResponse struct { func (x *ListRechargeBillsResponse) Reset() { *x = ListRechargeBillsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5628,7 +6260,7 @@ func (x *ListRechargeBillsResponse) String() string { func (*ListRechargeBillsResponse) ProtoMessage() {} func (x *ListRechargeBillsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[57] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5641,7 +6273,7 @@ func (x *ListRechargeBillsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeBillsResponse.ProtoReflect.Descriptor instead. func (*ListRechargeBillsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{57} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{65} } func (x *ListRechargeBillsResponse) GetBills() []*RechargeBill { @@ -5670,7 +6302,7 @@ type WalletFeatureFlags struct { func (x *WalletFeatureFlags) Reset() { *x = WalletFeatureFlags{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5682,7 +6314,7 @@ func (x *WalletFeatureFlags) String() string { func (*WalletFeatureFlags) ProtoMessage() {} func (x *WalletFeatureFlags) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[58] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5695,7 +6327,7 @@ func (x *WalletFeatureFlags) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletFeatureFlags.ProtoReflect.Descriptor instead. func (*WalletFeatureFlags) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{58} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{66} } func (x *WalletFeatureFlags) GetRechargeEnabled() bool { @@ -5730,7 +6362,7 @@ type GetWalletOverviewRequest struct { func (x *GetWalletOverviewRequest) Reset() { *x = GetWalletOverviewRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5742,7 +6374,7 @@ func (x *GetWalletOverviewRequest) String() string { func (*GetWalletOverviewRequest) ProtoMessage() {} func (x *GetWalletOverviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[59] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5755,7 +6387,7 @@ func (x *GetWalletOverviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletOverviewRequest.ProtoReflect.Descriptor instead. func (*GetWalletOverviewRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{59} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{67} } func (x *GetWalletOverviewRequest) GetRequestId() string { @@ -5789,7 +6421,7 @@ type GetWalletOverviewResponse struct { func (x *GetWalletOverviewResponse) Reset() { *x = GetWalletOverviewResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5801,7 +6433,7 @@ func (x *GetWalletOverviewResponse) String() string { func (*GetWalletOverviewResponse) ProtoMessage() {} func (x *GetWalletOverviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[60] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5814,7 +6446,7 @@ func (x *GetWalletOverviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletOverviewResponse.ProtoReflect.Descriptor instead. func (*GetWalletOverviewResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{60} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{68} } func (x *GetWalletOverviewResponse) GetBalances() []*AssetBalance { @@ -5842,7 +6474,7 @@ type WalletValueSummary struct { func (x *WalletValueSummary) Reset() { *x = WalletValueSummary{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5854,7 +6486,7 @@ func (x *WalletValueSummary) String() string { func (*WalletValueSummary) ProtoMessage() {} func (x *WalletValueSummary) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[61] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5867,7 +6499,7 @@ func (x *WalletValueSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletValueSummary.ProtoReflect.Descriptor instead. func (*WalletValueSummary) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{61} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{69} } func (x *WalletValueSummary) GetCoinAmount() int64 { @@ -5895,7 +6527,7 @@ type GetWalletValueSummaryRequest struct { func (x *GetWalletValueSummaryRequest) Reset() { *x = GetWalletValueSummaryRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5907,7 +6539,7 @@ func (x *GetWalletValueSummaryRequest) String() string { func (*GetWalletValueSummaryRequest) ProtoMessage() {} func (x *GetWalletValueSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[62] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5920,7 +6552,7 @@ func (x *GetWalletValueSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletValueSummaryRequest.ProtoReflect.Descriptor instead. func (*GetWalletValueSummaryRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{62} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{70} } func (x *GetWalletValueSummaryRequest) GetRequestId() string { @@ -5953,7 +6585,7 @@ type GetWalletValueSummaryResponse struct { func (x *GetWalletValueSummaryResponse) Reset() { *x = GetWalletValueSummaryResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5965,7 +6597,7 @@ func (x *GetWalletValueSummaryResponse) String() string { func (*GetWalletValueSummaryResponse) ProtoMessage() {} func (x *GetWalletValueSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[63] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5978,7 +6610,7 @@ func (x *GetWalletValueSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletValueSummaryResponse.ProtoReflect.Descriptor instead. func (*GetWalletValueSummaryResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{63} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{71} } func (x *GetWalletValueSummaryResponse) GetSummary() *WalletValueSummary { @@ -6015,7 +6647,7 @@ type GiftWallItem struct { func (x *GiftWallItem) Reset() { *x = GiftWallItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6027,7 +6659,7 @@ func (x *GiftWallItem) String() string { func (*GiftWallItem) ProtoMessage() {} func (x *GiftWallItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[64] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6040,7 +6672,7 @@ func (x *GiftWallItem) ProtoReflect() protoreflect.Message { // Deprecated: Use GiftWallItem.ProtoReflect.Descriptor instead. func (*GiftWallItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{64} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{72} } func (x *GiftWallItem) GetGiftId() string { @@ -6180,7 +6812,7 @@ type GetUserGiftWallRequest struct { func (x *GetUserGiftWallRequest) Reset() { *x = GetUserGiftWallRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6192,7 +6824,7 @@ func (x *GetUserGiftWallRequest) String() string { func (*GetUserGiftWallRequest) ProtoMessage() {} func (x *GetUserGiftWallRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[65] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6205,7 +6837,7 @@ func (x *GetUserGiftWallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserGiftWallRequest.ProtoReflect.Descriptor instead. func (*GetUserGiftWallRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{65} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{73} } func (x *GetUserGiftWallRequest) GetRequestId() string { @@ -6245,7 +6877,7 @@ type GetUserGiftWallResponse struct { func (x *GetUserGiftWallResponse) Reset() { *x = GetUserGiftWallResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6257,7 +6889,7 @@ func (x *GetUserGiftWallResponse) String() string { func (*GetUserGiftWallResponse) ProtoMessage() {} func (x *GetUserGiftWallResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[66] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6270,7 +6902,7 @@ func (x *GetUserGiftWallResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserGiftWallResponse.ProtoReflect.Descriptor instead. func (*GetUserGiftWallResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{66} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{74} } func (x *GetUserGiftWallResponse) GetItems() []*GiftWallItem { @@ -6359,7 +6991,7 @@ type RechargeProduct struct { func (x *RechargeProduct) Reset() { *x = RechargeProduct{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6371,7 +7003,7 @@ func (x *RechargeProduct) String() string { func (*RechargeProduct) ProtoMessage() {} func (x *RechargeProduct) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[67] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6384,7 +7016,7 @@ func (x *RechargeProduct) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeProduct.ProtoReflect.Descriptor instead. func (*RechargeProduct) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{67} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{75} } func (x *RechargeProduct) GetProductId() int64 { @@ -6548,7 +7180,7 @@ type ListRechargeProductsRequest struct { func (x *ListRechargeProductsRequest) Reset() { *x = ListRechargeProductsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6560,7 +7192,7 @@ func (x *ListRechargeProductsRequest) String() string { func (*ListRechargeProductsRequest) ProtoMessage() {} func (x *ListRechargeProductsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[68] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6573,7 +7205,7 @@ func (x *ListRechargeProductsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeProductsRequest.ProtoReflect.Descriptor instead. func (*ListRechargeProductsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{68} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{76} } func (x *ListRechargeProductsRequest) GetRequestId() string { @@ -6621,7 +7253,7 @@ type ListRechargeProductsResponse struct { func (x *ListRechargeProductsResponse) Reset() { *x = ListRechargeProductsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6633,7 +7265,7 @@ func (x *ListRechargeProductsResponse) String() string { func (*ListRechargeProductsResponse) ProtoMessage() {} func (x *ListRechargeProductsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[69] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6646,7 +7278,7 @@ func (x *ListRechargeProductsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRechargeProductsResponse.ProtoReflect.Descriptor instead. func (*ListRechargeProductsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{69} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{77} } func (x *ListRechargeProductsResponse) GetProducts() []*RechargeProduct { @@ -6682,7 +7314,7 @@ type ConfirmGooglePaymentRequest struct { func (x *ConfirmGooglePaymentRequest) Reset() { *x = ConfirmGooglePaymentRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6694,7 +7326,7 @@ func (x *ConfirmGooglePaymentRequest) String() string { func (*ConfirmGooglePaymentRequest) ProtoMessage() {} func (x *ConfirmGooglePaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[70] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6707,7 +7339,7 @@ func (x *ConfirmGooglePaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmGooglePaymentRequest.ProtoReflect.Descriptor instead. func (*ConfirmGooglePaymentRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{70} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{78} } func (x *ConfirmGooglePaymentRequest) GetRequestId() string { @@ -6804,7 +7436,7 @@ type ConfirmGooglePaymentResponse struct { func (x *ConfirmGooglePaymentResponse) Reset() { *x = ConfirmGooglePaymentResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6816,7 +7448,7 @@ func (x *ConfirmGooglePaymentResponse) String() string { func (*ConfirmGooglePaymentResponse) ProtoMessage() {} func (x *ConfirmGooglePaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[71] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6829,7 +7461,7 @@ func (x *ConfirmGooglePaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmGooglePaymentResponse.ProtoReflect.Descriptor instead. func (*ConfirmGooglePaymentResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{71} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{79} } func (x *ConfirmGooglePaymentResponse) GetPaymentOrderId() string { @@ -6912,7 +7544,7 @@ type ListAdminRechargeProductsRequest struct { func (x *ListAdminRechargeProductsRequest) Reset() { *x = ListAdminRechargeProductsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6924,7 +7556,7 @@ func (x *ListAdminRechargeProductsRequest) String() string { func (*ListAdminRechargeProductsRequest) ProtoMessage() {} func (x *ListAdminRechargeProductsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[72] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6937,7 +7569,7 @@ func (x *ListAdminRechargeProductsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminRechargeProductsRequest.ProtoReflect.Descriptor instead. func (*ListAdminRechargeProductsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{72} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{80} } func (x *ListAdminRechargeProductsRequest) GetRequestId() string { @@ -7006,7 +7638,7 @@ type ListAdminRechargeProductsResponse struct { func (x *ListAdminRechargeProductsResponse) Reset() { *x = ListAdminRechargeProductsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7018,7 +7650,7 @@ func (x *ListAdminRechargeProductsResponse) String() string { func (*ListAdminRechargeProductsResponse) ProtoMessage() {} func (x *ListAdminRechargeProductsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[73] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7031,7 +7663,7 @@ func (x *ListAdminRechargeProductsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ListAdminRechargeProductsResponse.ProtoReflect.Descriptor instead. func (*ListAdminRechargeProductsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{73} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{81} } func (x *ListAdminRechargeProductsResponse) GetProducts() []*RechargeProduct { @@ -7067,7 +7699,7 @@ type CreateRechargeProductRequest struct { func (x *CreateRechargeProductRequest) Reset() { *x = CreateRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7079,7 +7711,7 @@ func (x *CreateRechargeProductRequest) String() string { func (*CreateRechargeProductRequest) ProtoMessage() {} func (x *CreateRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[74] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7092,7 +7724,7 @@ func (x *CreateRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRechargeProductRequest.ProtoReflect.Descriptor instead. func (*CreateRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{74} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{82} } func (x *CreateRechargeProductRequest) GetRequestId() string { @@ -7184,7 +7816,7 @@ type UpdateRechargeProductRequest struct { func (x *UpdateRechargeProductRequest) Reset() { *x = UpdateRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7196,7 +7828,7 @@ func (x *UpdateRechargeProductRequest) String() string { func (*UpdateRechargeProductRequest) ProtoMessage() {} func (x *UpdateRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[75] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7209,7 +7841,7 @@ func (x *UpdateRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRechargeProductRequest.ProtoReflect.Descriptor instead. func (*UpdateRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{75} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{83} } func (x *UpdateRechargeProductRequest) GetRequestId() string { @@ -7301,7 +7933,7 @@ type DeleteRechargeProductRequest struct { func (x *DeleteRechargeProductRequest) Reset() { *x = DeleteRechargeProductRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7313,7 +7945,7 @@ func (x *DeleteRechargeProductRequest) String() string { func (*DeleteRechargeProductRequest) ProtoMessage() {} func (x *DeleteRechargeProductRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[76] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7326,7 +7958,7 @@ func (x *DeleteRechargeProductRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRechargeProductRequest.ProtoReflect.Descriptor instead. func (*DeleteRechargeProductRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{76} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{84} } func (x *DeleteRechargeProductRequest) GetRequestId() string { @@ -7366,7 +7998,7 @@ type RechargeProductResponse struct { func (x *RechargeProductResponse) Reset() { *x = RechargeProductResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7378,7 +8010,7 @@ func (x *RechargeProductResponse) String() string { func (*RechargeProductResponse) ProtoMessage() {} func (x *RechargeProductResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[77] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7391,7 +8023,7 @@ func (x *RechargeProductResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RechargeProductResponse.ProtoReflect.Descriptor instead. func (*RechargeProductResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{77} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{85} } func (x *RechargeProductResponse) GetProduct() *RechargeProduct { @@ -7410,7 +8042,7 @@ type DeleteRechargeProductResponse struct { func (x *DeleteRechargeProductResponse) Reset() { *x = DeleteRechargeProductResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7422,7 +8054,7 @@ func (x *DeleteRechargeProductResponse) String() string { func (*DeleteRechargeProductResponse) ProtoMessage() {} func (x *DeleteRechargeProductResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[78] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7435,7 +8067,7 @@ func (x *DeleteRechargeProductResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRechargeProductResponse.ProtoReflect.Descriptor instead. func (*DeleteRechargeProductResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{78} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{86} } func (x *DeleteRechargeProductResponse) GetDeleted() bool { @@ -7459,7 +8091,7 @@ type DiamondExchangeRule struct { func (x *DiamondExchangeRule) Reset() { *x = DiamondExchangeRule{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7471,7 +8103,7 @@ func (x *DiamondExchangeRule) String() string { func (*DiamondExchangeRule) ProtoMessage() {} func (x *DiamondExchangeRule) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[79] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7484,7 +8116,7 @@ func (x *DiamondExchangeRule) ProtoReflect() protoreflect.Message { // Deprecated: Use DiamondExchangeRule.ProtoReflect.Descriptor instead. func (*DiamondExchangeRule) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{79} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{87} } func (x *DiamondExchangeRule) GetExchangeType() string { @@ -7540,7 +8172,7 @@ type GetDiamondExchangeConfigRequest struct { func (x *GetDiamondExchangeConfigRequest) Reset() { *x = GetDiamondExchangeConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7552,7 +8184,7 @@ func (x *GetDiamondExchangeConfigRequest) String() string { func (*GetDiamondExchangeConfigRequest) ProtoMessage() {} func (x *GetDiamondExchangeConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[80] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7565,7 +8197,7 @@ func (x *GetDiamondExchangeConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiamondExchangeConfigRequest.ProtoReflect.Descriptor instead. func (*GetDiamondExchangeConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{80} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{88} } func (x *GetDiamondExchangeConfigRequest) GetRequestId() string { @@ -7598,7 +8230,7 @@ type GetDiamondExchangeConfigResponse struct { func (x *GetDiamondExchangeConfigResponse) Reset() { *x = GetDiamondExchangeConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7610,7 +8242,7 @@ func (x *GetDiamondExchangeConfigResponse) String() string { func (*GetDiamondExchangeConfigResponse) ProtoMessage() {} func (x *GetDiamondExchangeConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[81] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7623,7 +8255,7 @@ func (x *GetDiamondExchangeConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiamondExchangeConfigResponse.ProtoReflect.Descriptor instead. func (*GetDiamondExchangeConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{81} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{89} } func (x *GetDiamondExchangeConfigResponse) GetRules() []*DiamondExchangeRule { @@ -7653,7 +8285,7 @@ type WalletTransaction struct { func (x *WalletTransaction) Reset() { *x = WalletTransaction{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7665,7 +8297,7 @@ func (x *WalletTransaction) String() string { func (*WalletTransaction) ProtoMessage() {} func (x *WalletTransaction) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[82] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7678,7 +8310,7 @@ func (x *WalletTransaction) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletTransaction.ProtoReflect.Descriptor instead. func (*WalletTransaction) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{82} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{90} } func (x *WalletTransaction) GetEntryId() int64 { @@ -7772,7 +8404,7 @@ type ListWalletTransactionsRequest struct { func (x *ListWalletTransactionsRequest) Reset() { *x = ListWalletTransactionsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7784,7 +8416,7 @@ func (x *ListWalletTransactionsRequest) String() string { func (*ListWalletTransactionsRequest) ProtoMessage() {} func (x *ListWalletTransactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[83] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7797,7 +8429,7 @@ func (x *ListWalletTransactionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWalletTransactionsRequest.ProtoReflect.Descriptor instead. func (*ListWalletTransactionsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{83} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{91} } func (x *ListWalletTransactionsRequest) GetRequestId() string { @@ -7852,7 +8484,7 @@ type ListWalletTransactionsResponse struct { func (x *ListWalletTransactionsResponse) Reset() { *x = ListWalletTransactionsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7864,7 +8496,7 @@ func (x *ListWalletTransactionsResponse) String() string { func (*ListWalletTransactionsResponse) ProtoMessage() {} func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[84] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7877,7 +8509,7 @@ func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWalletTransactionsResponse.ProtoReflect.Descriptor instead. func (*ListWalletTransactionsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{84} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{92} } func (x *ListWalletTransactionsResponse) GetTransactions() []*WalletTransaction { @@ -7911,7 +8543,7 @@ type WithdrawalRequest struct { func (x *WithdrawalRequest) Reset() { *x = WithdrawalRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7923,7 +8555,7 @@ func (x *WithdrawalRequest) String() string { func (*WithdrawalRequest) ProtoMessage() {} func (x *WithdrawalRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[85] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7936,7 +8568,7 @@ func (x *WithdrawalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WithdrawalRequest.ProtoReflect.Descriptor instead. func (*WithdrawalRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{85} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{93} } func (x *WithdrawalRequest) GetWithdrawalId() string { @@ -8016,7 +8648,7 @@ type ApplyWithdrawalRequest struct { func (x *ApplyWithdrawalRequest) Reset() { *x = ApplyWithdrawalRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8028,7 +8660,7 @@ func (x *ApplyWithdrawalRequest) String() string { func (*ApplyWithdrawalRequest) ProtoMessage() {} func (x *ApplyWithdrawalRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[86] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8041,7 +8673,7 @@ func (x *ApplyWithdrawalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyWithdrawalRequest.ProtoReflect.Descriptor instead. func (*ApplyWithdrawalRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{86} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{94} } func (x *ApplyWithdrawalRequest) GetCommandId() string { @@ -8096,7 +8728,7 @@ type ApplyWithdrawalResponse struct { func (x *ApplyWithdrawalResponse) Reset() { *x = ApplyWithdrawalResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8108,7 +8740,7 @@ func (x *ApplyWithdrawalResponse) String() string { func (*ApplyWithdrawalResponse) ProtoMessage() {} func (x *ApplyWithdrawalResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[87] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8121,7 +8753,7 @@ func (x *ApplyWithdrawalResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyWithdrawalResponse.ProtoReflect.Descriptor instead. func (*ApplyWithdrawalResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{87} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{95} } func (x *ApplyWithdrawalResponse) GetWithdrawal() *WithdrawalRequest { @@ -8152,7 +8784,7 @@ type VipRewardItem struct { func (x *VipRewardItem) Reset() { *x = VipRewardItem{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8164,7 +8796,7 @@ func (x *VipRewardItem) String() string { func (*VipRewardItem) ProtoMessage() {} func (x *VipRewardItem) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[88] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8177,7 +8809,7 @@ func (x *VipRewardItem) ProtoReflect() protoreflect.Message { // Deprecated: Use VipRewardItem.ProtoReflect.Descriptor instead. func (*VipRewardItem) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{88} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{96} } func (x *VipRewardItem) GetResourceId() int64 { @@ -8245,7 +8877,7 @@ type VipLevel struct { func (x *VipLevel) Reset() { *x = VipLevel{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8257,7 +8889,7 @@ func (x *VipLevel) String() string { func (*VipLevel) ProtoMessage() {} func (x *VipLevel) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[89] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8270,7 +8902,7 @@ func (x *VipLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use VipLevel.ProtoReflect.Descriptor instead. func (*VipLevel) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{89} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{97} } func (x *VipLevel) GetLevel() int32 { @@ -8393,7 +9025,7 @@ type UserVip struct { func (x *UserVip) Reset() { *x = UserVip{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8405,7 +9037,7 @@ func (x *UserVip) String() string { func (*UserVip) ProtoMessage() {} func (x *UserVip) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[90] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8418,7 +9050,7 @@ func (x *UserVip) ProtoReflect() protoreflect.Message { // Deprecated: Use UserVip.ProtoReflect.Descriptor instead. func (*UserVip) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{90} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{98} } func (x *UserVip) GetUserId() int64 { @@ -8481,7 +9113,7 @@ type ListVipPackagesRequest struct { func (x *ListVipPackagesRequest) Reset() { *x = ListVipPackagesRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8493,7 +9125,7 @@ func (x *ListVipPackagesRequest) String() string { func (*ListVipPackagesRequest) ProtoMessage() {} func (x *ListVipPackagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[91] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8506,7 +9138,7 @@ func (x *ListVipPackagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVipPackagesRequest.ProtoReflect.Descriptor instead. func (*ListVipPackagesRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{91} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{99} } func (x *ListVipPackagesRequest) GetRequestId() string { @@ -8540,7 +9172,7 @@ type ListVipPackagesResponse struct { func (x *ListVipPackagesResponse) Reset() { *x = ListVipPackagesResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8552,7 +9184,7 @@ func (x *ListVipPackagesResponse) String() string { func (*ListVipPackagesResponse) ProtoMessage() {} func (x *ListVipPackagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[92] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8565,7 +9197,7 @@ func (x *ListVipPackagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVipPackagesResponse.ProtoReflect.Descriptor instead. func (*ListVipPackagesResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{92} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{100} } func (x *ListVipPackagesResponse) GetCurrentVip() *UserVip { @@ -8593,7 +9225,7 @@ type GetMyVipRequest struct { func (x *GetMyVipRequest) Reset() { *x = GetMyVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8605,7 +9237,7 @@ func (x *GetMyVipRequest) String() string { func (*GetMyVipRequest) ProtoMessage() {} func (x *GetMyVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[93] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8618,7 +9250,7 @@ func (x *GetMyVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyVipRequest.ProtoReflect.Descriptor instead. func (*GetMyVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{93} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{101} } func (x *GetMyVipRequest) GetRequestId() string { @@ -8651,7 +9283,7 @@ type GetMyVipResponse struct { func (x *GetMyVipResponse) Reset() { *x = GetMyVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8663,7 +9295,7 @@ func (x *GetMyVipResponse) String() string { func (*GetMyVipResponse) ProtoMessage() {} func (x *GetMyVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[94] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8676,7 +9308,7 @@ func (x *GetMyVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyVipResponse.ProtoReflect.Descriptor instead. func (*GetMyVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{94} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{102} } func (x *GetMyVipResponse) GetVip() *UserVip { @@ -8698,7 +9330,7 @@ type PurchaseVipRequest struct { func (x *PurchaseVipRequest) Reset() { *x = PurchaseVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8710,7 +9342,7 @@ func (x *PurchaseVipRequest) String() string { func (*PurchaseVipRequest) ProtoMessage() {} func (x *PurchaseVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[95] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8723,7 +9355,7 @@ func (x *PurchaseVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseVipRequest.ProtoReflect.Descriptor instead. func (*PurchaseVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{95} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{103} } func (x *PurchaseVipRequest) GetCommandId() string { @@ -8768,7 +9400,7 @@ type PurchaseVipResponse struct { func (x *PurchaseVipResponse) Reset() { *x = PurchaseVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8780,7 +9412,7 @@ func (x *PurchaseVipResponse) String() string { func (*PurchaseVipResponse) ProtoMessage() {} func (x *PurchaseVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[96] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8793,7 +9425,7 @@ func (x *PurchaseVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PurchaseVipResponse.ProtoReflect.Descriptor instead. func (*PurchaseVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{96} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{104} } func (x *PurchaseVipResponse) GetOrderId() string { @@ -8853,7 +9485,7 @@ type GrantVipRequest struct { func (x *GrantVipRequest) Reset() { *x = GrantVipRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8865,7 +9497,7 @@ func (x *GrantVipRequest) String() string { func (*GrantVipRequest) ProtoMessage() {} func (x *GrantVipRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[97] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8878,7 +9510,7 @@ func (x *GrantVipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipRequest.ProtoReflect.Descriptor instead. func (*GrantVipRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{97} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{105} } func (x *GrantVipRequest) GetCommandId() string { @@ -8942,7 +9574,7 @@ type GrantVipResponse struct { func (x *GrantVipResponse) Reset() { *x = GrantVipResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8954,7 +9586,7 @@ func (x *GrantVipResponse) String() string { func (*GrantVipResponse) ProtoMessage() {} func (x *GrantVipResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[98] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8967,7 +9599,7 @@ func (x *GrantVipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantVipResponse.ProtoReflect.Descriptor instead. func (*GrantVipResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{98} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{106} } func (x *GrantVipResponse) GetTransactionId() string { @@ -9014,7 +9646,7 @@ type AdminVipLevelInput struct { func (x *AdminVipLevelInput) Reset() { *x = AdminVipLevelInput{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9026,7 +9658,7 @@ func (x *AdminVipLevelInput) String() string { func (*AdminVipLevelInput) ProtoMessage() {} func (x *AdminVipLevelInput) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[99] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9039,7 +9671,7 @@ func (x *AdminVipLevelInput) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminVipLevelInput.ProtoReflect.Descriptor instead. func (*AdminVipLevelInput) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{99} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{107} } func (x *AdminVipLevelInput) GetLevel() int32 { @@ -9108,7 +9740,7 @@ type ListAdminVipLevelsRequest struct { func (x *ListAdminVipLevelsRequest) Reset() { *x = ListAdminVipLevelsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9120,7 +9752,7 @@ func (x *ListAdminVipLevelsRequest) String() string { func (*ListAdminVipLevelsRequest) ProtoMessage() {} func (x *ListAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[100] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9133,7 +9765,7 @@ func (x *ListAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminVipLevelsRequest.ProtoReflect.Descriptor instead. func (*ListAdminVipLevelsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{100} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{108} } func (x *ListAdminVipLevelsRequest) GetRequestId() string { @@ -9160,7 +9792,7 @@ type ListAdminVipLevelsResponse struct { func (x *ListAdminVipLevelsResponse) Reset() { *x = ListAdminVipLevelsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9172,7 +9804,7 @@ func (x *ListAdminVipLevelsResponse) String() string { func (*ListAdminVipLevelsResponse) ProtoMessage() {} func (x *ListAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[101] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9185,7 +9817,7 @@ func (x *ListAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAdminVipLevelsResponse.ProtoReflect.Descriptor instead. func (*ListAdminVipLevelsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{101} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{109} } func (x *ListAdminVipLevelsResponse) GetLevels() []*VipLevel { @@ -9214,7 +9846,7 @@ type UpdateAdminVipLevelsRequest struct { func (x *UpdateAdminVipLevelsRequest) Reset() { *x = UpdateAdminVipLevelsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9226,7 +9858,7 @@ func (x *UpdateAdminVipLevelsRequest) String() string { func (*UpdateAdminVipLevelsRequest) ProtoMessage() {} func (x *UpdateAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[102] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9239,7 +9871,7 @@ func (x *UpdateAdminVipLevelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAdminVipLevelsRequest.ProtoReflect.Descriptor instead. func (*UpdateAdminVipLevelsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{102} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{110} } func (x *UpdateAdminVipLevelsRequest) GetRequestId() string { @@ -9280,7 +9912,7 @@ type UpdateAdminVipLevelsResponse struct { func (x *UpdateAdminVipLevelsResponse) Reset() { *x = UpdateAdminVipLevelsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9292,7 +9924,7 @@ func (x *UpdateAdminVipLevelsResponse) String() string { func (*UpdateAdminVipLevelsResponse) ProtoMessage() {} func (x *UpdateAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[103] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9305,7 +9937,7 @@ func (x *UpdateAdminVipLevelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAdminVipLevelsResponse.ProtoReflect.Descriptor instead. func (*UpdateAdminVipLevelsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{103} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{111} } func (x *UpdateAdminVipLevelsResponse) GetLevels() []*VipLevel { @@ -9339,7 +9971,7 @@ type CreditTaskRewardRequest struct { func (x *CreditTaskRewardRequest) Reset() { *x = CreditTaskRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9351,7 +9983,7 @@ func (x *CreditTaskRewardRequest) String() string { func (*CreditTaskRewardRequest) ProtoMessage() {} func (x *CreditTaskRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[104] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9364,7 +9996,7 @@ func (x *CreditTaskRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditTaskRewardRequest.ProtoReflect.Descriptor instead. func (*CreditTaskRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{104} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{112} } func (x *CreditTaskRewardRequest) GetCommandId() string { @@ -9436,7 +10068,7 @@ type CreditTaskRewardResponse struct { func (x *CreditTaskRewardResponse) Reset() { *x = CreditTaskRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9448,7 +10080,7 @@ func (x *CreditTaskRewardResponse) String() string { func (*CreditTaskRewardResponse) ProtoMessage() {} func (x *CreditTaskRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[105] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9461,7 +10093,7 @@ func (x *CreditTaskRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditTaskRewardResponse.ProtoReflect.Descriptor instead. func (*CreditTaskRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{105} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{113} } func (x *CreditTaskRewardResponse) GetTransactionId() string { @@ -9510,7 +10142,7 @@ type CreditLuckyGiftRewardRequest struct { func (x *CreditLuckyGiftRewardRequest) Reset() { *x = CreditLuckyGiftRewardRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9522,7 +10154,7 @@ func (x *CreditLuckyGiftRewardRequest) String() string { func (*CreditLuckyGiftRewardRequest) ProtoMessage() {} func (x *CreditLuckyGiftRewardRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[106] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9535,7 +10167,7 @@ func (x *CreditLuckyGiftRewardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditLuckyGiftRewardRequest.ProtoReflect.Descriptor instead. func (*CreditLuckyGiftRewardRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{106} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{114} } func (x *CreditLuckyGiftRewardRequest) GetCommandId() string { @@ -9614,7 +10246,7 @@ type CreditLuckyGiftRewardResponse struct { func (x *CreditLuckyGiftRewardResponse) Reset() { *x = CreditLuckyGiftRewardResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9626,7 +10258,7 @@ func (x *CreditLuckyGiftRewardResponse) String() string { func (*CreditLuckyGiftRewardResponse) ProtoMessage() {} func (x *CreditLuckyGiftRewardResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[107] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9639,7 +10271,7 @@ func (x *CreditLuckyGiftRewardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreditLuckyGiftRewardResponse.ProtoReflect.Descriptor instead. func (*CreditLuckyGiftRewardResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{107} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{115} } func (x *CreditLuckyGiftRewardResponse) GetTransactionId() string { @@ -9691,7 +10323,7 @@ type ApplyGameCoinChangeRequest struct { func (x *ApplyGameCoinChangeRequest) Reset() { *x = ApplyGameCoinChangeRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9703,7 +10335,7 @@ func (x *ApplyGameCoinChangeRequest) String() string { func (*ApplyGameCoinChangeRequest) ProtoMessage() {} func (x *ApplyGameCoinChangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[108] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9716,7 +10348,7 @@ func (x *ApplyGameCoinChangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyGameCoinChangeRequest.ProtoReflect.Descriptor instead. func (*ApplyGameCoinChangeRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{108} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{116} } func (x *ApplyGameCoinChangeRequest) GetRequestId() string { @@ -9815,7 +10447,7 @@ type ApplyGameCoinChangeResponse struct { func (x *ApplyGameCoinChangeResponse) Reset() { *x = ApplyGameCoinChangeResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9827,7 +10459,7 @@ func (x *ApplyGameCoinChangeResponse) String() string { func (*ApplyGameCoinChangeResponse) ProtoMessage() {} func (x *ApplyGameCoinChangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[109] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9840,7 +10472,7 @@ func (x *ApplyGameCoinChangeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyGameCoinChangeResponse.ProtoReflect.Descriptor instead. func (*ApplyGameCoinChangeResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{109} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{117} } func (x *ApplyGameCoinChangeResponse) GetWalletTransactionId() string { @@ -9882,7 +10514,7 @@ type RedPacketConfig struct { func (x *RedPacketConfig) Reset() { *x = RedPacketConfig{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9894,7 +10526,7 @@ func (x *RedPacketConfig) String() string { func (*RedPacketConfig) ProtoMessage() {} func (x *RedPacketConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[110] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9907,7 +10539,7 @@ func (x *RedPacketConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacketConfig.ProtoReflect.Descriptor instead. func (*RedPacketConfig) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{110} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{118} } func (x *RedPacketConfig) GetAppCode() string { @@ -9999,7 +10631,7 @@ type RedPacketClaim struct { func (x *RedPacketClaim) Reset() { *x = RedPacketClaim{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10011,7 +10643,7 @@ func (x *RedPacketClaim) String() string { func (*RedPacketClaim) ProtoMessage() {} func (x *RedPacketClaim) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[111] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10024,7 +10656,7 @@ func (x *RedPacketClaim) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacketClaim.ProtoReflect.Descriptor instead. func (*RedPacketClaim) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{111} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{119} } func (x *RedPacketClaim) GetAppCode() string { @@ -10131,7 +10763,7 @@ type RedPacket struct { func (x *RedPacket) Reset() { *x = RedPacket{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10143,7 +10775,7 @@ func (x *RedPacket) String() string { func (*RedPacket) ProtoMessage() {} func (x *RedPacket) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[112] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10156,7 +10788,7 @@ func (x *RedPacket) ProtoReflect() protoreflect.Message { // Deprecated: Use RedPacket.ProtoReflect.Descriptor instead. func (*RedPacket) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{112} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{120} } func (x *RedPacket) GetAppCode() string { @@ -10302,7 +10934,7 @@ type GetRedPacketConfigRequest struct { func (x *GetRedPacketConfigRequest) Reset() { *x = GetRedPacketConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10314,7 +10946,7 @@ func (x *GetRedPacketConfigRequest) String() string { func (*GetRedPacketConfigRequest) ProtoMessage() {} func (x *GetRedPacketConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[113] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10327,7 +10959,7 @@ func (x *GetRedPacketConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketConfigRequest.ProtoReflect.Descriptor instead. func (*GetRedPacketConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{113} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{121} } func (x *GetRedPacketConfigRequest) GetRequestId() string { @@ -10354,7 +10986,7 @@ type GetRedPacketConfigResponse struct { func (x *GetRedPacketConfigResponse) Reset() { *x = GetRedPacketConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10366,7 +10998,7 @@ func (x *GetRedPacketConfigResponse) String() string { func (*GetRedPacketConfigResponse) ProtoMessage() {} func (x *GetRedPacketConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[114] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10379,7 +11011,7 @@ func (x *GetRedPacketConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketConfigResponse.ProtoReflect.Descriptor instead. func (*GetRedPacketConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{114} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{122} } func (x *GetRedPacketConfigResponse) GetConfig() *RedPacketConfig { @@ -10413,7 +11045,7 @@ type UpdateRedPacketConfigRequest struct { func (x *UpdateRedPacketConfigRequest) Reset() { *x = UpdateRedPacketConfigRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10425,7 +11057,7 @@ func (x *UpdateRedPacketConfigRequest) String() string { func (*UpdateRedPacketConfigRequest) ProtoMessage() {} func (x *UpdateRedPacketConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[115] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10438,7 +11070,7 @@ func (x *UpdateRedPacketConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRedPacketConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateRedPacketConfigRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{115} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{123} } func (x *UpdateRedPacketConfigRequest) GetRequestId() string { @@ -10514,7 +11146,7 @@ type UpdateRedPacketConfigResponse struct { func (x *UpdateRedPacketConfigResponse) Reset() { *x = UpdateRedPacketConfigResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10526,7 +11158,7 @@ func (x *UpdateRedPacketConfigResponse) String() string { func (*UpdateRedPacketConfigResponse) ProtoMessage() {} func (x *UpdateRedPacketConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[116] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10539,7 +11171,7 @@ func (x *UpdateRedPacketConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRedPacketConfigResponse.ProtoReflect.Descriptor instead. func (*UpdateRedPacketConfigResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{116} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{124} } func (x *UpdateRedPacketConfigResponse) GetConfig() *RedPacketConfig { @@ -10573,7 +11205,7 @@ type CreateRedPacketRequest struct { func (x *CreateRedPacketRequest) Reset() { *x = CreateRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10585,7 +11217,7 @@ func (x *CreateRedPacketRequest) String() string { func (*CreateRedPacketRequest) ProtoMessage() {} func (x *CreateRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[117] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10598,7 +11230,7 @@ func (x *CreateRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRedPacketRequest.ProtoReflect.Descriptor instead. func (*CreateRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{117} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{125} } func (x *CreateRedPacketRequest) GetRequestId() string { @@ -10675,7 +11307,7 @@ type CreateRedPacketResponse struct { func (x *CreateRedPacketResponse) Reset() { *x = CreateRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10687,7 +11319,7 @@ func (x *CreateRedPacketResponse) String() string { func (*CreateRedPacketResponse) ProtoMessage() {} func (x *CreateRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[118] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10700,7 +11332,7 @@ func (x *CreateRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRedPacketResponse.ProtoReflect.Descriptor instead. func (*CreateRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{118} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{126} } func (x *CreateRedPacketResponse) GetPacket() *RedPacket { @@ -10737,7 +11369,7 @@ type ClaimRedPacketRequest struct { func (x *ClaimRedPacketRequest) Reset() { *x = ClaimRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10749,7 +11381,7 @@ func (x *ClaimRedPacketRequest) String() string { func (*ClaimRedPacketRequest) ProtoMessage() {} func (x *ClaimRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[119] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10762,7 +11394,7 @@ func (x *ClaimRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimRedPacketRequest.ProtoReflect.Descriptor instead. func (*ClaimRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{119} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{127} } func (x *ClaimRedPacketRequest) GetRequestId() string { @@ -10811,7 +11443,7 @@ type ClaimRedPacketResponse struct { func (x *ClaimRedPacketResponse) Reset() { *x = ClaimRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10823,7 +11455,7 @@ func (x *ClaimRedPacketResponse) String() string { func (*ClaimRedPacketResponse) ProtoMessage() {} func (x *ClaimRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[120] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10836,7 +11468,7 @@ func (x *ClaimRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimRedPacketResponse.ProtoReflect.Descriptor instead. func (*ClaimRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{120} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{128} } func (x *ClaimRedPacketResponse) GetClaim() *RedPacketClaim { @@ -10880,7 +11512,7 @@ type ListRedPacketsRequest struct { func (x *ListRedPacketsRequest) Reset() { *x = ListRedPacketsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10892,7 +11524,7 @@ func (x *ListRedPacketsRequest) String() string { func (*ListRedPacketsRequest) ProtoMessage() {} func (x *ListRedPacketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[121] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10905,7 +11537,7 @@ func (x *ListRedPacketsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRedPacketsRequest.ProtoReflect.Descriptor instead. func (*ListRedPacketsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{121} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{129} } func (x *ListRedPacketsRequest) GetRequestId() string { @@ -11003,7 +11635,7 @@ type ListRedPacketsResponse struct { func (x *ListRedPacketsResponse) Reset() { *x = ListRedPacketsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11015,7 +11647,7 @@ func (x *ListRedPacketsResponse) String() string { func (*ListRedPacketsResponse) ProtoMessage() {} func (x *ListRedPacketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[122] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11028,7 +11660,7 @@ func (x *ListRedPacketsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRedPacketsResponse.ProtoReflect.Descriptor instead. func (*ListRedPacketsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{122} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{130} } func (x *ListRedPacketsResponse) GetPackets() []*RedPacket { @@ -11065,7 +11697,7 @@ type GetRedPacketRequest struct { func (x *GetRedPacketRequest) Reset() { *x = GetRedPacketRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11077,7 +11709,7 @@ func (x *GetRedPacketRequest) String() string { func (*GetRedPacketRequest) ProtoMessage() {} func (x *GetRedPacketRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[123] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11090,7 +11722,7 @@ func (x *GetRedPacketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketRequest.ProtoReflect.Descriptor instead. func (*GetRedPacketRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{123} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{131} } func (x *GetRedPacketRequest) GetRequestId() string { @@ -11138,7 +11770,7 @@ type GetRedPacketResponse struct { func (x *GetRedPacketResponse) Reset() { *x = GetRedPacketResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11150,7 +11782,7 @@ func (x *GetRedPacketResponse) String() string { func (*GetRedPacketResponse) ProtoMessage() {} func (x *GetRedPacketResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[124] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11163,7 +11795,7 @@ func (x *GetRedPacketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedPacketResponse.ProtoReflect.Descriptor instead. func (*GetRedPacketResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{124} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{132} } func (x *GetRedPacketResponse) GetPacket() *RedPacket { @@ -11191,7 +11823,7 @@ type ExpireRedPacketsRequest struct { func (x *ExpireRedPacketsRequest) Reset() { *x = ExpireRedPacketsRequest{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11203,7 +11835,7 @@ func (x *ExpireRedPacketsRequest) String() string { func (*ExpireRedPacketsRequest) ProtoMessage() {} func (x *ExpireRedPacketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[125] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11216,7 +11848,7 @@ func (x *ExpireRedPacketsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireRedPacketsRequest.ProtoReflect.Descriptor instead. func (*ExpireRedPacketsRequest) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{125} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{133} } func (x *ExpireRedPacketsRequest) GetRequestId() string { @@ -11251,7 +11883,7 @@ type ExpireRedPacketsResponse struct { func (x *ExpireRedPacketsResponse) Reset() { *x = ExpireRedPacketsResponse{} - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11263,7 +11895,7 @@ func (x *ExpireRedPacketsResponse) String() string { func (*ExpireRedPacketsResponse) ProtoMessage() {} func (x *ExpireRedPacketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_wallet_v1_wallet_proto_msgTypes[126] + mi := &file_proto_wallet_v1_wallet_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11276,7 +11908,7 @@ func (x *ExpireRedPacketsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireRedPacketsResponse.ProtoReflect.Descriptor instead. func (*ExpireRedPacketsResponse) Descriptor() ([]byte, []int) { - return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{126} + return file_proto_wallet_v1_wallet_proto_rawDescGZIP(), []int{134} } func (x *ExpireRedPacketsResponse) GetExpiredCount() int32 { @@ -11518,7 +12150,29 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\x12updated_by_user_id\x18\b \x01(\x03R\x0fupdatedByUserId\x12\"\n" + "\rcreated_at_ms\x18\t \x01(\x03R\vcreatedAtMs\x12\"\n" + "\rupdated_at_ms\x18\n" + - " \x01(\x03R\vupdatedAtMs\"\xeb\x03\n" + + " \x01(\x03R\vupdatedAtMs\"\xb7\x04\n" + + "\x10ResourceShopItem\x12\x19\n" + + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12 \n" + + "\fshop_item_id\x18\x02 \x01(\x03R\n" + + "shopItemId\x12\x1f\n" + + "\vresource_id\x18\x03 \x01(\x03R\n" + + "resourceId\x125\n" + + "\bresource\x18\x04 \x01(\v2\x19.hyapp.wallet.v1.ResourceR\bresource\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12#\n" + + "\rduration_days\x18\x06 \x01(\x05R\fdurationDays\x12\x1d\n" + + "\n" + + "price_type\x18\a \x01(\tR\tpriceType\x12\x1d\n" + + "\n" + + "coin_price\x18\b \x01(\x03R\tcoinPrice\x12*\n" + + "\x11effective_from_ms\x18\t \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\n" + + " \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\v \x01(\x05R\tsortOrder\x12+\n" + + "\x12created_by_user_id\x18\f \x01(\x03R\x0fcreatedByUserId\x12+\n" + + "\x12updated_by_user_id\x18\r \x01(\x03R\x0fupdatedByUserId\x12\"\n" + + "\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12\"\n" + + "\rupdated_at_ms\x18\x0f \x01(\x03R\vupdatedAtMs\"\xeb\x03\n" + "\x17UserResourceEntitlement\x12\x19\n" + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12%\n" + "\x0eentitlement_id\x18\x02 \x01(\tR\rentitlementId\x12\x17\n" + @@ -11884,7 +12538,50 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"j\n" + "\x1aListResourceGrantsResponse\x126\n" + "\x06grants\x18\x01 \x03(\v2\x1e.hyapp.wallet.v1.ResourceGrantR\x06grants\x12\x14\n" + - "\x05total\x18\x02 \x01(\x03R\x05total\"\xa7\x05\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\x8a\x02\n" + + "\x15ResourceShopItemInput\x12 \n" + + "\fshop_item_id\x18\x01 \x01(\x03R\n" + + "shopItemId\x12\x1f\n" + + "\vresource_id\x18\x02 \x01(\x03R\n" + + "resourceId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12#\n" + + "\rduration_days\x18\x04 \x01(\x05R\fdurationDays\x12*\n" + + "\x11effective_from_ms\x18\x05 \x01(\x03R\x0feffectiveFromMs\x12&\n" + + "\x0feffective_to_ms\x18\x06 \x01(\x03R\reffectiveToMs\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\"\x81\x02\n" + + "\x1cListResourceShopItemsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12#\n" + + "\rresource_type\x18\x03 \x01(\tR\fresourceType\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12\x18\n" + + "\akeyword\x18\x05 \x01(\tR\akeyword\x12\x12\n" + + "\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\a \x01(\x05R\bpageSize\x12\x1f\n" + + "\vactive_only\x18\b \x01(\bR\n" + + "activeOnly\"n\n" + + "\x1dListResourceShopItemsResponse\x127\n" + + "\x05items\x18\x01 \x03(\v2!.hyapp.wallet.v1.ResourceShopItemR\x05items\x12\x14\n" + + "\x05total\x18\x02 \x01(\x03R\x05total\"\xc2\x01\n" + + "\x1eUpsertResourceShopItemsRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12<\n" + + "\x05items\x18\x03 \x03(\v2&.hyapp.wallet.v1.ResourceShopItemInputR\x05items\x12(\n" + + "\x10operator_user_id\x18\x04 \x01(\x03R\x0eoperatorUserId\"Z\n" + + "\x1fUpsertResourceShopItemsResponse\x127\n" + + "\x05items\x18\x01 \x03(\v2!.hyapp.wallet.v1.ResourceShopItemR\x05items\"\xc0\x01\n" + + " SetResourceShopItemStatusRequest\x12\x1d\n" + + "\n" + + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + + "\bapp_code\x18\x02 \x01(\tR\aappCode\x12 \n" + + "\fshop_item_id\x18\x03 \x01(\x03R\n" + + "shopItemId\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12(\n" + + "\x10operator_user_id\x18\x05 \x01(\x03R\x0eoperatorUserId\"Q\n" + + "\x18ResourceShopItemResponse\x125\n" + + "\x04item\x18\x01 \x01(\v2!.hyapp.wallet.v1.ResourceShopItemR\x04item\"\xa7\x05\n" + "\fRechargeBill\x12\x19\n" + "\bapp_code\x18\x01 \x01(\tR\aappCode\x12%\n" + "\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n" + @@ -12474,7 +13171,7 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\x18ExpireRedPacketsResponse\x12#\n" + "\rexpired_count\x18\x01 \x01(\x05R\fexpiredCount\x12'\n" + "\x0frefunded_amount\x18\x02 \x01(\x03R\x0erefundedAmount\x12$\n" + - "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs2\xfe-\n" + + "\x0eserver_time_ms\x18\x03 \x01(\x03R\fserverTimeMs2\xef0\n" + "\rWalletService\x12R\n" + "\tDebitGift\x12!.hyapp.wallet.v1.DebitGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12X\n" + "\vGetBalances\x12#.hyapp.wallet.v1.GetBalancesRequest\x1a$.hyapp.wallet.v1.GetBalancesResponse\x12g\n" + @@ -12501,7 +13198,10 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\x12GrantResourceGroup\x12*.hyapp.wallet.v1.GrantResourceGroupRequest\x1a&.hyapp.wallet.v1.ResourceGrantResponse\x12j\n" + "\x11ListUserResources\x12).hyapp.wallet.v1.ListUserResourcesRequest\x1a*.hyapp.wallet.v1.ListUserResourcesResponse\x12j\n" + "\x11EquipUserResource\x12).hyapp.wallet.v1.EquipUserResourceRequest\x1a*.hyapp.wallet.v1.EquipUserResourceResponse\x12m\n" + - "\x12ListResourceGrants\x12*.hyapp.wallet.v1.ListResourceGrantsRequest\x1a+.hyapp.wallet.v1.ListResourceGrantsResponse\x12j\n" + + "\x12ListResourceGrants\x12*.hyapp.wallet.v1.ListResourceGrantsRequest\x1a+.hyapp.wallet.v1.ListResourceGrantsResponse\x12v\n" + + "\x15ListResourceShopItems\x12-.hyapp.wallet.v1.ListResourceShopItemsRequest\x1a..hyapp.wallet.v1.ListResourceShopItemsResponse\x12|\n" + + "\x17UpsertResourceShopItems\x12/.hyapp.wallet.v1.UpsertResourceShopItemsRequest\x1a0.hyapp.wallet.v1.UpsertResourceShopItemsResponse\x12y\n" + + "\x19SetResourceShopItemStatus\x121.hyapp.wallet.v1.SetResourceShopItemStatusRequest\x1a).hyapp.wallet.v1.ResourceShopItemResponse\x12j\n" + "\x11ListRechargeBills\x12).hyapp.wallet.v1.ListRechargeBillsRequest\x1a*.hyapp.wallet.v1.ListRechargeBillsResponse\x12j\n" + "\x11GetWalletOverview\x12).hyapp.wallet.v1.GetWalletOverviewRequest\x1a*.hyapp.wallet.v1.GetWalletOverviewResponse\x12v\n" + "\x15GetWalletValueSummary\x12-.hyapp.wallet.v1.GetWalletValueSummaryRequest\x1a..hyapp.wallet.v1.GetWalletValueSummaryResponse\x12d\n" + @@ -12544,7 +13244,7 @@ func file_proto_wallet_v1_wallet_proto_rawDescGZIP() []byte { return file_proto_wallet_v1_wallet_proto_rawDescData } -var file_proto_wallet_v1_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 127) +var file_proto_wallet_v1_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 135) var file_proto_wallet_v1_wallet_proto_goTypes = []any{ (*DebitGiftRequest)(nil), // 0: hyapp.wallet.v1.DebitGiftRequest (*DebitGiftResponse)(nil), // 1: hyapp.wallet.v1.DebitGiftResponse @@ -12562,117 +13262,125 @@ var file_proto_wallet_v1_wallet_proto_goTypes = []any{ (*ResourceGroup)(nil), // 13: hyapp.wallet.v1.ResourceGroup (*GiftConfig)(nil), // 14: hyapp.wallet.v1.GiftConfig (*GiftTypeConfig)(nil), // 15: hyapp.wallet.v1.GiftTypeConfig - (*UserResourceEntitlement)(nil), // 16: hyapp.wallet.v1.UserResourceEntitlement - (*ResourceGrantItem)(nil), // 17: hyapp.wallet.v1.ResourceGrantItem - (*ResourceGrant)(nil), // 18: hyapp.wallet.v1.ResourceGrant - (*ResourceGroupItemInput)(nil), // 19: hyapp.wallet.v1.ResourceGroupItemInput - (*ListResourcesRequest)(nil), // 20: hyapp.wallet.v1.ListResourcesRequest - (*ListResourcesResponse)(nil), // 21: hyapp.wallet.v1.ListResourcesResponse - (*GetResourceRequest)(nil), // 22: hyapp.wallet.v1.GetResourceRequest - (*GetResourceResponse)(nil), // 23: hyapp.wallet.v1.GetResourceResponse - (*CreateResourceRequest)(nil), // 24: hyapp.wallet.v1.CreateResourceRequest - (*UpdateResourceRequest)(nil), // 25: hyapp.wallet.v1.UpdateResourceRequest - (*SetResourceStatusRequest)(nil), // 26: hyapp.wallet.v1.SetResourceStatusRequest - (*ResourceResponse)(nil), // 27: hyapp.wallet.v1.ResourceResponse - (*ListResourceGroupsRequest)(nil), // 28: hyapp.wallet.v1.ListResourceGroupsRequest - (*ListResourceGroupsResponse)(nil), // 29: hyapp.wallet.v1.ListResourceGroupsResponse - (*GetResourceGroupRequest)(nil), // 30: hyapp.wallet.v1.GetResourceGroupRequest - (*GetResourceGroupResponse)(nil), // 31: hyapp.wallet.v1.GetResourceGroupResponse - (*CreateResourceGroupRequest)(nil), // 32: hyapp.wallet.v1.CreateResourceGroupRequest - (*UpdateResourceGroupRequest)(nil), // 33: hyapp.wallet.v1.UpdateResourceGroupRequest - (*SetResourceGroupStatusRequest)(nil), // 34: hyapp.wallet.v1.SetResourceGroupStatusRequest - (*ResourceGroupResponse)(nil), // 35: hyapp.wallet.v1.ResourceGroupResponse - (*ListGiftConfigsRequest)(nil), // 36: hyapp.wallet.v1.ListGiftConfigsRequest - (*ListGiftConfigsResponse)(nil), // 37: hyapp.wallet.v1.ListGiftConfigsResponse - (*ListGiftTypeConfigsRequest)(nil), // 38: hyapp.wallet.v1.ListGiftTypeConfigsRequest - (*ListGiftTypeConfigsResponse)(nil), // 39: hyapp.wallet.v1.ListGiftTypeConfigsResponse - (*UpsertGiftTypeConfigRequest)(nil), // 40: hyapp.wallet.v1.UpsertGiftTypeConfigRequest - (*GiftTypeConfigResponse)(nil), // 41: hyapp.wallet.v1.GiftTypeConfigResponse - (*CreateGiftConfigRequest)(nil), // 42: hyapp.wallet.v1.CreateGiftConfigRequest - (*UpdateGiftConfigRequest)(nil), // 43: hyapp.wallet.v1.UpdateGiftConfigRequest - (*SetGiftConfigStatusRequest)(nil), // 44: hyapp.wallet.v1.SetGiftConfigStatusRequest - (*GiftConfigResponse)(nil), // 45: hyapp.wallet.v1.GiftConfigResponse - (*GrantResourceRequest)(nil), // 46: hyapp.wallet.v1.GrantResourceRequest - (*GrantResourceGroupRequest)(nil), // 47: hyapp.wallet.v1.GrantResourceGroupRequest - (*ResourceGrantResponse)(nil), // 48: hyapp.wallet.v1.ResourceGrantResponse - (*ListUserResourcesRequest)(nil), // 49: hyapp.wallet.v1.ListUserResourcesRequest - (*ListUserResourcesResponse)(nil), // 50: hyapp.wallet.v1.ListUserResourcesResponse - (*EquipUserResourceRequest)(nil), // 51: hyapp.wallet.v1.EquipUserResourceRequest - (*EquipUserResourceResponse)(nil), // 52: hyapp.wallet.v1.EquipUserResourceResponse - (*ListResourceGrantsRequest)(nil), // 53: hyapp.wallet.v1.ListResourceGrantsRequest - (*ListResourceGrantsResponse)(nil), // 54: hyapp.wallet.v1.ListResourceGrantsResponse - (*RechargeBill)(nil), // 55: hyapp.wallet.v1.RechargeBill - (*ListRechargeBillsRequest)(nil), // 56: hyapp.wallet.v1.ListRechargeBillsRequest - (*ListRechargeBillsResponse)(nil), // 57: hyapp.wallet.v1.ListRechargeBillsResponse - (*WalletFeatureFlags)(nil), // 58: hyapp.wallet.v1.WalletFeatureFlags - (*GetWalletOverviewRequest)(nil), // 59: hyapp.wallet.v1.GetWalletOverviewRequest - (*GetWalletOverviewResponse)(nil), // 60: hyapp.wallet.v1.GetWalletOverviewResponse - (*WalletValueSummary)(nil), // 61: hyapp.wallet.v1.WalletValueSummary - (*GetWalletValueSummaryRequest)(nil), // 62: hyapp.wallet.v1.GetWalletValueSummaryRequest - (*GetWalletValueSummaryResponse)(nil), // 63: hyapp.wallet.v1.GetWalletValueSummaryResponse - (*GiftWallItem)(nil), // 64: hyapp.wallet.v1.GiftWallItem - (*GetUserGiftWallRequest)(nil), // 65: hyapp.wallet.v1.GetUserGiftWallRequest - (*GetUserGiftWallResponse)(nil), // 66: hyapp.wallet.v1.GetUserGiftWallResponse - (*RechargeProduct)(nil), // 67: hyapp.wallet.v1.RechargeProduct - (*ListRechargeProductsRequest)(nil), // 68: hyapp.wallet.v1.ListRechargeProductsRequest - (*ListRechargeProductsResponse)(nil), // 69: hyapp.wallet.v1.ListRechargeProductsResponse - (*ConfirmGooglePaymentRequest)(nil), // 70: hyapp.wallet.v1.ConfirmGooglePaymentRequest - (*ConfirmGooglePaymentResponse)(nil), // 71: hyapp.wallet.v1.ConfirmGooglePaymentResponse - (*ListAdminRechargeProductsRequest)(nil), // 72: hyapp.wallet.v1.ListAdminRechargeProductsRequest - (*ListAdminRechargeProductsResponse)(nil), // 73: hyapp.wallet.v1.ListAdminRechargeProductsResponse - (*CreateRechargeProductRequest)(nil), // 74: hyapp.wallet.v1.CreateRechargeProductRequest - (*UpdateRechargeProductRequest)(nil), // 75: hyapp.wallet.v1.UpdateRechargeProductRequest - (*DeleteRechargeProductRequest)(nil), // 76: hyapp.wallet.v1.DeleteRechargeProductRequest - (*RechargeProductResponse)(nil), // 77: hyapp.wallet.v1.RechargeProductResponse - (*DeleteRechargeProductResponse)(nil), // 78: hyapp.wallet.v1.DeleteRechargeProductResponse - (*DiamondExchangeRule)(nil), // 79: hyapp.wallet.v1.DiamondExchangeRule - (*GetDiamondExchangeConfigRequest)(nil), // 80: hyapp.wallet.v1.GetDiamondExchangeConfigRequest - (*GetDiamondExchangeConfigResponse)(nil), // 81: hyapp.wallet.v1.GetDiamondExchangeConfigResponse - (*WalletTransaction)(nil), // 82: hyapp.wallet.v1.WalletTransaction - (*ListWalletTransactionsRequest)(nil), // 83: hyapp.wallet.v1.ListWalletTransactionsRequest - (*ListWalletTransactionsResponse)(nil), // 84: hyapp.wallet.v1.ListWalletTransactionsResponse - (*WithdrawalRequest)(nil), // 85: hyapp.wallet.v1.WithdrawalRequest - (*ApplyWithdrawalRequest)(nil), // 86: hyapp.wallet.v1.ApplyWithdrawalRequest - (*ApplyWithdrawalResponse)(nil), // 87: hyapp.wallet.v1.ApplyWithdrawalResponse - (*VipRewardItem)(nil), // 88: hyapp.wallet.v1.VipRewardItem - (*VipLevel)(nil), // 89: hyapp.wallet.v1.VipLevel - (*UserVip)(nil), // 90: hyapp.wallet.v1.UserVip - (*ListVipPackagesRequest)(nil), // 91: hyapp.wallet.v1.ListVipPackagesRequest - (*ListVipPackagesResponse)(nil), // 92: hyapp.wallet.v1.ListVipPackagesResponse - (*GetMyVipRequest)(nil), // 93: hyapp.wallet.v1.GetMyVipRequest - (*GetMyVipResponse)(nil), // 94: hyapp.wallet.v1.GetMyVipResponse - (*PurchaseVipRequest)(nil), // 95: hyapp.wallet.v1.PurchaseVipRequest - (*PurchaseVipResponse)(nil), // 96: hyapp.wallet.v1.PurchaseVipResponse - (*GrantVipRequest)(nil), // 97: hyapp.wallet.v1.GrantVipRequest - (*GrantVipResponse)(nil), // 98: hyapp.wallet.v1.GrantVipResponse - (*AdminVipLevelInput)(nil), // 99: hyapp.wallet.v1.AdminVipLevelInput - (*ListAdminVipLevelsRequest)(nil), // 100: hyapp.wallet.v1.ListAdminVipLevelsRequest - (*ListAdminVipLevelsResponse)(nil), // 101: hyapp.wallet.v1.ListAdminVipLevelsResponse - (*UpdateAdminVipLevelsRequest)(nil), // 102: hyapp.wallet.v1.UpdateAdminVipLevelsRequest - (*UpdateAdminVipLevelsResponse)(nil), // 103: hyapp.wallet.v1.UpdateAdminVipLevelsResponse - (*CreditTaskRewardRequest)(nil), // 104: hyapp.wallet.v1.CreditTaskRewardRequest - (*CreditTaskRewardResponse)(nil), // 105: hyapp.wallet.v1.CreditTaskRewardResponse - (*CreditLuckyGiftRewardRequest)(nil), // 106: hyapp.wallet.v1.CreditLuckyGiftRewardRequest - (*CreditLuckyGiftRewardResponse)(nil), // 107: hyapp.wallet.v1.CreditLuckyGiftRewardResponse - (*ApplyGameCoinChangeRequest)(nil), // 108: hyapp.wallet.v1.ApplyGameCoinChangeRequest - (*ApplyGameCoinChangeResponse)(nil), // 109: hyapp.wallet.v1.ApplyGameCoinChangeResponse - (*RedPacketConfig)(nil), // 110: hyapp.wallet.v1.RedPacketConfig - (*RedPacketClaim)(nil), // 111: hyapp.wallet.v1.RedPacketClaim - (*RedPacket)(nil), // 112: hyapp.wallet.v1.RedPacket - (*GetRedPacketConfigRequest)(nil), // 113: hyapp.wallet.v1.GetRedPacketConfigRequest - (*GetRedPacketConfigResponse)(nil), // 114: hyapp.wallet.v1.GetRedPacketConfigResponse - (*UpdateRedPacketConfigRequest)(nil), // 115: hyapp.wallet.v1.UpdateRedPacketConfigRequest - (*UpdateRedPacketConfigResponse)(nil), // 116: hyapp.wallet.v1.UpdateRedPacketConfigResponse - (*CreateRedPacketRequest)(nil), // 117: hyapp.wallet.v1.CreateRedPacketRequest - (*CreateRedPacketResponse)(nil), // 118: hyapp.wallet.v1.CreateRedPacketResponse - (*ClaimRedPacketRequest)(nil), // 119: hyapp.wallet.v1.ClaimRedPacketRequest - (*ClaimRedPacketResponse)(nil), // 120: hyapp.wallet.v1.ClaimRedPacketResponse - (*ListRedPacketsRequest)(nil), // 121: hyapp.wallet.v1.ListRedPacketsRequest - (*ListRedPacketsResponse)(nil), // 122: hyapp.wallet.v1.ListRedPacketsResponse - (*GetRedPacketRequest)(nil), // 123: hyapp.wallet.v1.GetRedPacketRequest - (*GetRedPacketResponse)(nil), // 124: hyapp.wallet.v1.GetRedPacketResponse - (*ExpireRedPacketsRequest)(nil), // 125: hyapp.wallet.v1.ExpireRedPacketsRequest - (*ExpireRedPacketsResponse)(nil), // 126: hyapp.wallet.v1.ExpireRedPacketsResponse + (*ResourceShopItem)(nil), // 16: hyapp.wallet.v1.ResourceShopItem + (*UserResourceEntitlement)(nil), // 17: hyapp.wallet.v1.UserResourceEntitlement + (*ResourceGrantItem)(nil), // 18: hyapp.wallet.v1.ResourceGrantItem + (*ResourceGrant)(nil), // 19: hyapp.wallet.v1.ResourceGrant + (*ResourceGroupItemInput)(nil), // 20: hyapp.wallet.v1.ResourceGroupItemInput + (*ListResourcesRequest)(nil), // 21: hyapp.wallet.v1.ListResourcesRequest + (*ListResourcesResponse)(nil), // 22: hyapp.wallet.v1.ListResourcesResponse + (*GetResourceRequest)(nil), // 23: hyapp.wallet.v1.GetResourceRequest + (*GetResourceResponse)(nil), // 24: hyapp.wallet.v1.GetResourceResponse + (*CreateResourceRequest)(nil), // 25: hyapp.wallet.v1.CreateResourceRequest + (*UpdateResourceRequest)(nil), // 26: hyapp.wallet.v1.UpdateResourceRequest + (*SetResourceStatusRequest)(nil), // 27: hyapp.wallet.v1.SetResourceStatusRequest + (*ResourceResponse)(nil), // 28: hyapp.wallet.v1.ResourceResponse + (*ListResourceGroupsRequest)(nil), // 29: hyapp.wallet.v1.ListResourceGroupsRequest + (*ListResourceGroupsResponse)(nil), // 30: hyapp.wallet.v1.ListResourceGroupsResponse + (*GetResourceGroupRequest)(nil), // 31: hyapp.wallet.v1.GetResourceGroupRequest + (*GetResourceGroupResponse)(nil), // 32: hyapp.wallet.v1.GetResourceGroupResponse + (*CreateResourceGroupRequest)(nil), // 33: hyapp.wallet.v1.CreateResourceGroupRequest + (*UpdateResourceGroupRequest)(nil), // 34: hyapp.wallet.v1.UpdateResourceGroupRequest + (*SetResourceGroupStatusRequest)(nil), // 35: hyapp.wallet.v1.SetResourceGroupStatusRequest + (*ResourceGroupResponse)(nil), // 36: hyapp.wallet.v1.ResourceGroupResponse + (*ListGiftConfigsRequest)(nil), // 37: hyapp.wallet.v1.ListGiftConfigsRequest + (*ListGiftConfigsResponse)(nil), // 38: hyapp.wallet.v1.ListGiftConfigsResponse + (*ListGiftTypeConfigsRequest)(nil), // 39: hyapp.wallet.v1.ListGiftTypeConfigsRequest + (*ListGiftTypeConfigsResponse)(nil), // 40: hyapp.wallet.v1.ListGiftTypeConfigsResponse + (*UpsertGiftTypeConfigRequest)(nil), // 41: hyapp.wallet.v1.UpsertGiftTypeConfigRequest + (*GiftTypeConfigResponse)(nil), // 42: hyapp.wallet.v1.GiftTypeConfigResponse + (*CreateGiftConfigRequest)(nil), // 43: hyapp.wallet.v1.CreateGiftConfigRequest + (*UpdateGiftConfigRequest)(nil), // 44: hyapp.wallet.v1.UpdateGiftConfigRequest + (*SetGiftConfigStatusRequest)(nil), // 45: hyapp.wallet.v1.SetGiftConfigStatusRequest + (*GiftConfigResponse)(nil), // 46: hyapp.wallet.v1.GiftConfigResponse + (*GrantResourceRequest)(nil), // 47: hyapp.wallet.v1.GrantResourceRequest + (*GrantResourceGroupRequest)(nil), // 48: hyapp.wallet.v1.GrantResourceGroupRequest + (*ResourceGrantResponse)(nil), // 49: hyapp.wallet.v1.ResourceGrantResponse + (*ListUserResourcesRequest)(nil), // 50: hyapp.wallet.v1.ListUserResourcesRequest + (*ListUserResourcesResponse)(nil), // 51: hyapp.wallet.v1.ListUserResourcesResponse + (*EquipUserResourceRequest)(nil), // 52: hyapp.wallet.v1.EquipUserResourceRequest + (*EquipUserResourceResponse)(nil), // 53: hyapp.wallet.v1.EquipUserResourceResponse + (*ListResourceGrantsRequest)(nil), // 54: hyapp.wallet.v1.ListResourceGrantsRequest + (*ListResourceGrantsResponse)(nil), // 55: hyapp.wallet.v1.ListResourceGrantsResponse + (*ResourceShopItemInput)(nil), // 56: hyapp.wallet.v1.ResourceShopItemInput + (*ListResourceShopItemsRequest)(nil), // 57: hyapp.wallet.v1.ListResourceShopItemsRequest + (*ListResourceShopItemsResponse)(nil), // 58: hyapp.wallet.v1.ListResourceShopItemsResponse + (*UpsertResourceShopItemsRequest)(nil), // 59: hyapp.wallet.v1.UpsertResourceShopItemsRequest + (*UpsertResourceShopItemsResponse)(nil), // 60: hyapp.wallet.v1.UpsertResourceShopItemsResponse + (*SetResourceShopItemStatusRequest)(nil), // 61: hyapp.wallet.v1.SetResourceShopItemStatusRequest + (*ResourceShopItemResponse)(nil), // 62: hyapp.wallet.v1.ResourceShopItemResponse + (*RechargeBill)(nil), // 63: hyapp.wallet.v1.RechargeBill + (*ListRechargeBillsRequest)(nil), // 64: hyapp.wallet.v1.ListRechargeBillsRequest + (*ListRechargeBillsResponse)(nil), // 65: hyapp.wallet.v1.ListRechargeBillsResponse + (*WalletFeatureFlags)(nil), // 66: hyapp.wallet.v1.WalletFeatureFlags + (*GetWalletOverviewRequest)(nil), // 67: hyapp.wallet.v1.GetWalletOverviewRequest + (*GetWalletOverviewResponse)(nil), // 68: hyapp.wallet.v1.GetWalletOverviewResponse + (*WalletValueSummary)(nil), // 69: hyapp.wallet.v1.WalletValueSummary + (*GetWalletValueSummaryRequest)(nil), // 70: hyapp.wallet.v1.GetWalletValueSummaryRequest + (*GetWalletValueSummaryResponse)(nil), // 71: hyapp.wallet.v1.GetWalletValueSummaryResponse + (*GiftWallItem)(nil), // 72: hyapp.wallet.v1.GiftWallItem + (*GetUserGiftWallRequest)(nil), // 73: hyapp.wallet.v1.GetUserGiftWallRequest + (*GetUserGiftWallResponse)(nil), // 74: hyapp.wallet.v1.GetUserGiftWallResponse + (*RechargeProduct)(nil), // 75: hyapp.wallet.v1.RechargeProduct + (*ListRechargeProductsRequest)(nil), // 76: hyapp.wallet.v1.ListRechargeProductsRequest + (*ListRechargeProductsResponse)(nil), // 77: hyapp.wallet.v1.ListRechargeProductsResponse + (*ConfirmGooglePaymentRequest)(nil), // 78: hyapp.wallet.v1.ConfirmGooglePaymentRequest + (*ConfirmGooglePaymentResponse)(nil), // 79: hyapp.wallet.v1.ConfirmGooglePaymentResponse + (*ListAdminRechargeProductsRequest)(nil), // 80: hyapp.wallet.v1.ListAdminRechargeProductsRequest + (*ListAdminRechargeProductsResponse)(nil), // 81: hyapp.wallet.v1.ListAdminRechargeProductsResponse + (*CreateRechargeProductRequest)(nil), // 82: hyapp.wallet.v1.CreateRechargeProductRequest + (*UpdateRechargeProductRequest)(nil), // 83: hyapp.wallet.v1.UpdateRechargeProductRequest + (*DeleteRechargeProductRequest)(nil), // 84: hyapp.wallet.v1.DeleteRechargeProductRequest + (*RechargeProductResponse)(nil), // 85: hyapp.wallet.v1.RechargeProductResponse + (*DeleteRechargeProductResponse)(nil), // 86: hyapp.wallet.v1.DeleteRechargeProductResponse + (*DiamondExchangeRule)(nil), // 87: hyapp.wallet.v1.DiamondExchangeRule + (*GetDiamondExchangeConfigRequest)(nil), // 88: hyapp.wallet.v1.GetDiamondExchangeConfigRequest + (*GetDiamondExchangeConfigResponse)(nil), // 89: hyapp.wallet.v1.GetDiamondExchangeConfigResponse + (*WalletTransaction)(nil), // 90: hyapp.wallet.v1.WalletTransaction + (*ListWalletTransactionsRequest)(nil), // 91: hyapp.wallet.v1.ListWalletTransactionsRequest + (*ListWalletTransactionsResponse)(nil), // 92: hyapp.wallet.v1.ListWalletTransactionsResponse + (*WithdrawalRequest)(nil), // 93: hyapp.wallet.v1.WithdrawalRequest + (*ApplyWithdrawalRequest)(nil), // 94: hyapp.wallet.v1.ApplyWithdrawalRequest + (*ApplyWithdrawalResponse)(nil), // 95: hyapp.wallet.v1.ApplyWithdrawalResponse + (*VipRewardItem)(nil), // 96: hyapp.wallet.v1.VipRewardItem + (*VipLevel)(nil), // 97: hyapp.wallet.v1.VipLevel + (*UserVip)(nil), // 98: hyapp.wallet.v1.UserVip + (*ListVipPackagesRequest)(nil), // 99: hyapp.wallet.v1.ListVipPackagesRequest + (*ListVipPackagesResponse)(nil), // 100: hyapp.wallet.v1.ListVipPackagesResponse + (*GetMyVipRequest)(nil), // 101: hyapp.wallet.v1.GetMyVipRequest + (*GetMyVipResponse)(nil), // 102: hyapp.wallet.v1.GetMyVipResponse + (*PurchaseVipRequest)(nil), // 103: hyapp.wallet.v1.PurchaseVipRequest + (*PurchaseVipResponse)(nil), // 104: hyapp.wallet.v1.PurchaseVipResponse + (*GrantVipRequest)(nil), // 105: hyapp.wallet.v1.GrantVipRequest + (*GrantVipResponse)(nil), // 106: hyapp.wallet.v1.GrantVipResponse + (*AdminVipLevelInput)(nil), // 107: hyapp.wallet.v1.AdminVipLevelInput + (*ListAdminVipLevelsRequest)(nil), // 108: hyapp.wallet.v1.ListAdminVipLevelsRequest + (*ListAdminVipLevelsResponse)(nil), // 109: hyapp.wallet.v1.ListAdminVipLevelsResponse + (*UpdateAdminVipLevelsRequest)(nil), // 110: hyapp.wallet.v1.UpdateAdminVipLevelsRequest + (*UpdateAdminVipLevelsResponse)(nil), // 111: hyapp.wallet.v1.UpdateAdminVipLevelsResponse + (*CreditTaskRewardRequest)(nil), // 112: hyapp.wallet.v1.CreditTaskRewardRequest + (*CreditTaskRewardResponse)(nil), // 113: hyapp.wallet.v1.CreditTaskRewardResponse + (*CreditLuckyGiftRewardRequest)(nil), // 114: hyapp.wallet.v1.CreditLuckyGiftRewardRequest + (*CreditLuckyGiftRewardResponse)(nil), // 115: hyapp.wallet.v1.CreditLuckyGiftRewardResponse + (*ApplyGameCoinChangeRequest)(nil), // 116: hyapp.wallet.v1.ApplyGameCoinChangeRequest + (*ApplyGameCoinChangeResponse)(nil), // 117: hyapp.wallet.v1.ApplyGameCoinChangeResponse + (*RedPacketConfig)(nil), // 118: hyapp.wallet.v1.RedPacketConfig + (*RedPacketClaim)(nil), // 119: hyapp.wallet.v1.RedPacketClaim + (*RedPacket)(nil), // 120: hyapp.wallet.v1.RedPacket + (*GetRedPacketConfigRequest)(nil), // 121: hyapp.wallet.v1.GetRedPacketConfigRequest + (*GetRedPacketConfigResponse)(nil), // 122: hyapp.wallet.v1.GetRedPacketConfigResponse + (*UpdateRedPacketConfigRequest)(nil), // 123: hyapp.wallet.v1.UpdateRedPacketConfigRequest + (*UpdateRedPacketConfigResponse)(nil), // 124: hyapp.wallet.v1.UpdateRedPacketConfigResponse + (*CreateRedPacketRequest)(nil), // 125: hyapp.wallet.v1.CreateRedPacketRequest + (*CreateRedPacketResponse)(nil), // 126: hyapp.wallet.v1.CreateRedPacketResponse + (*ClaimRedPacketRequest)(nil), // 127: hyapp.wallet.v1.ClaimRedPacketRequest + (*ClaimRedPacketResponse)(nil), // 128: hyapp.wallet.v1.ClaimRedPacketResponse + (*ListRedPacketsRequest)(nil), // 129: hyapp.wallet.v1.ListRedPacketsRequest + (*ListRedPacketsResponse)(nil), // 130: hyapp.wallet.v1.ListRedPacketsResponse + (*GetRedPacketRequest)(nil), // 131: hyapp.wallet.v1.GetRedPacketRequest + (*GetRedPacketResponse)(nil), // 132: hyapp.wallet.v1.GetRedPacketResponse + (*ExpireRedPacketsRequest)(nil), // 133: hyapp.wallet.v1.ExpireRedPacketsRequest + (*ExpireRedPacketsResponse)(nil), // 134: hyapp.wallet.v1.ExpireRedPacketsResponse } var file_proto_wallet_v1_wallet_proto_depIdxs = []int32{ 2, // 0: hyapp.wallet.v1.GetBalancesResponse.balances:type_name -> hyapp.wallet.v1.AssetBalance @@ -12680,173 +13388,184 @@ var file_proto_wallet_v1_wallet_proto_depIdxs = []int32{ 11, // 2: hyapp.wallet.v1.ResourceGroupItem.resource:type_name -> hyapp.wallet.v1.Resource 12, // 3: hyapp.wallet.v1.ResourceGroup.items:type_name -> hyapp.wallet.v1.ResourceGroupItem 11, // 4: hyapp.wallet.v1.GiftConfig.resource:type_name -> hyapp.wallet.v1.Resource - 11, // 5: hyapp.wallet.v1.UserResourceEntitlement.resource:type_name -> hyapp.wallet.v1.Resource - 17, // 6: hyapp.wallet.v1.ResourceGrant.items:type_name -> hyapp.wallet.v1.ResourceGrantItem - 11, // 7: hyapp.wallet.v1.ListResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource - 11, // 8: hyapp.wallet.v1.GetResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource - 11, // 9: hyapp.wallet.v1.ResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource - 13, // 10: hyapp.wallet.v1.ListResourceGroupsResponse.groups:type_name -> hyapp.wallet.v1.ResourceGroup - 13, // 11: hyapp.wallet.v1.GetResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup - 19, // 12: hyapp.wallet.v1.CreateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput - 19, // 13: hyapp.wallet.v1.UpdateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput - 13, // 14: hyapp.wallet.v1.ResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup - 14, // 15: hyapp.wallet.v1.ListGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig - 15, // 16: hyapp.wallet.v1.ListGiftTypeConfigsResponse.gift_types:type_name -> hyapp.wallet.v1.GiftTypeConfig - 15, // 17: hyapp.wallet.v1.GiftTypeConfigResponse.gift_type:type_name -> hyapp.wallet.v1.GiftTypeConfig - 14, // 18: hyapp.wallet.v1.GiftConfigResponse.gift:type_name -> hyapp.wallet.v1.GiftConfig - 18, // 19: hyapp.wallet.v1.ResourceGrantResponse.grant:type_name -> hyapp.wallet.v1.ResourceGrant - 16, // 20: hyapp.wallet.v1.ListUserResourcesResponse.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 16, // 21: hyapp.wallet.v1.EquipUserResourceResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement - 18, // 22: hyapp.wallet.v1.ListResourceGrantsResponse.grants:type_name -> hyapp.wallet.v1.ResourceGrant - 55, // 23: hyapp.wallet.v1.ListRechargeBillsResponse.bills:type_name -> hyapp.wallet.v1.RechargeBill - 2, // 24: hyapp.wallet.v1.GetWalletOverviewResponse.balances:type_name -> hyapp.wallet.v1.AssetBalance - 58, // 25: hyapp.wallet.v1.GetWalletOverviewResponse.feature_flags:type_name -> hyapp.wallet.v1.WalletFeatureFlags - 61, // 26: hyapp.wallet.v1.GetWalletValueSummaryResponse.summary:type_name -> hyapp.wallet.v1.WalletValueSummary - 11, // 27: hyapp.wallet.v1.GiftWallItem.resource:type_name -> hyapp.wallet.v1.Resource - 64, // 28: hyapp.wallet.v1.GetUserGiftWallResponse.items:type_name -> hyapp.wallet.v1.GiftWallItem - 67, // 29: hyapp.wallet.v1.ListRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct - 2, // 30: hyapp.wallet.v1.ConfirmGooglePaymentResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 67, // 31: hyapp.wallet.v1.ListAdminRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct - 67, // 32: hyapp.wallet.v1.RechargeProductResponse.product:type_name -> hyapp.wallet.v1.RechargeProduct - 79, // 33: hyapp.wallet.v1.GetDiamondExchangeConfigResponse.rules:type_name -> hyapp.wallet.v1.DiamondExchangeRule - 82, // 34: hyapp.wallet.v1.ListWalletTransactionsResponse.transactions:type_name -> hyapp.wallet.v1.WalletTransaction - 85, // 35: hyapp.wallet.v1.ApplyWithdrawalResponse.withdrawal:type_name -> hyapp.wallet.v1.WithdrawalRequest - 2, // 36: hyapp.wallet.v1.ApplyWithdrawalResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 88, // 37: hyapp.wallet.v1.VipLevel.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 90, // 38: hyapp.wallet.v1.ListVipPackagesResponse.current_vip:type_name -> hyapp.wallet.v1.UserVip - 89, // 39: hyapp.wallet.v1.ListVipPackagesResponse.packages:type_name -> hyapp.wallet.v1.VipLevel - 90, // 40: hyapp.wallet.v1.GetMyVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 90, // 41: hyapp.wallet.v1.PurchaseVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 88, // 42: hyapp.wallet.v1.PurchaseVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 90, // 43: hyapp.wallet.v1.GrantVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip - 88, // 44: hyapp.wallet.v1.GrantVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem - 89, // 45: hyapp.wallet.v1.ListAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel - 99, // 46: hyapp.wallet.v1.UpdateAdminVipLevelsRequest.levels:type_name -> hyapp.wallet.v1.AdminVipLevelInput - 89, // 47: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel - 2, // 48: hyapp.wallet.v1.CreditTaskRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 2, // 49: hyapp.wallet.v1.CreditLuckyGiftRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance - 111, // 50: hyapp.wallet.v1.RedPacket.claims:type_name -> hyapp.wallet.v1.RedPacketClaim - 110, // 51: hyapp.wallet.v1.GetRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig - 110, // 52: hyapp.wallet.v1.UpdateRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig - 112, // 53: hyapp.wallet.v1.CreateRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 111, // 54: hyapp.wallet.v1.ClaimRedPacketResponse.claim:type_name -> hyapp.wallet.v1.RedPacketClaim - 112, // 55: hyapp.wallet.v1.ListRedPacketsResponse.packets:type_name -> hyapp.wallet.v1.RedPacket - 112, // 56: hyapp.wallet.v1.GetRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket - 0, // 57: hyapp.wallet.v1.WalletService.DebitGift:input_type -> hyapp.wallet.v1.DebitGiftRequest - 3, // 58: hyapp.wallet.v1.WalletService.GetBalances:input_type -> hyapp.wallet.v1.GetBalancesRequest - 5, // 59: hyapp.wallet.v1.WalletService.AdminCreditAsset:input_type -> hyapp.wallet.v1.AdminCreditAssetRequest - 7, // 60: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:input_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockRequest - 9, // 61: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:input_type -> hyapp.wallet.v1.TransferCoinFromSellerRequest - 20, // 62: hyapp.wallet.v1.WalletService.ListResources:input_type -> hyapp.wallet.v1.ListResourcesRequest - 22, // 63: hyapp.wallet.v1.WalletService.GetResource:input_type -> hyapp.wallet.v1.GetResourceRequest - 24, // 64: hyapp.wallet.v1.WalletService.CreateResource:input_type -> hyapp.wallet.v1.CreateResourceRequest - 25, // 65: hyapp.wallet.v1.WalletService.UpdateResource:input_type -> hyapp.wallet.v1.UpdateResourceRequest - 26, // 66: hyapp.wallet.v1.WalletService.SetResourceStatus:input_type -> hyapp.wallet.v1.SetResourceStatusRequest - 28, // 67: hyapp.wallet.v1.WalletService.ListResourceGroups:input_type -> hyapp.wallet.v1.ListResourceGroupsRequest - 30, // 68: hyapp.wallet.v1.WalletService.GetResourceGroup:input_type -> hyapp.wallet.v1.GetResourceGroupRequest - 32, // 69: hyapp.wallet.v1.WalletService.CreateResourceGroup:input_type -> hyapp.wallet.v1.CreateResourceGroupRequest - 33, // 70: hyapp.wallet.v1.WalletService.UpdateResourceGroup:input_type -> hyapp.wallet.v1.UpdateResourceGroupRequest - 34, // 71: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:input_type -> hyapp.wallet.v1.SetResourceGroupStatusRequest - 36, // 72: hyapp.wallet.v1.WalletService.ListGiftConfigs:input_type -> hyapp.wallet.v1.ListGiftConfigsRequest - 38, // 73: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:input_type -> hyapp.wallet.v1.ListGiftTypeConfigsRequest - 42, // 74: hyapp.wallet.v1.WalletService.CreateGiftConfig:input_type -> hyapp.wallet.v1.CreateGiftConfigRequest - 43, // 75: hyapp.wallet.v1.WalletService.UpdateGiftConfig:input_type -> hyapp.wallet.v1.UpdateGiftConfigRequest - 44, // 76: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:input_type -> hyapp.wallet.v1.SetGiftConfigStatusRequest - 40, // 77: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:input_type -> hyapp.wallet.v1.UpsertGiftTypeConfigRequest - 46, // 78: hyapp.wallet.v1.WalletService.GrantResource:input_type -> hyapp.wallet.v1.GrantResourceRequest - 47, // 79: hyapp.wallet.v1.WalletService.GrantResourceGroup:input_type -> hyapp.wallet.v1.GrantResourceGroupRequest - 49, // 80: hyapp.wallet.v1.WalletService.ListUserResources:input_type -> hyapp.wallet.v1.ListUserResourcesRequest - 51, // 81: hyapp.wallet.v1.WalletService.EquipUserResource:input_type -> hyapp.wallet.v1.EquipUserResourceRequest - 53, // 82: hyapp.wallet.v1.WalletService.ListResourceGrants:input_type -> hyapp.wallet.v1.ListResourceGrantsRequest - 56, // 83: hyapp.wallet.v1.WalletService.ListRechargeBills:input_type -> hyapp.wallet.v1.ListRechargeBillsRequest - 59, // 84: hyapp.wallet.v1.WalletService.GetWalletOverview:input_type -> hyapp.wallet.v1.GetWalletOverviewRequest - 62, // 85: hyapp.wallet.v1.WalletService.GetWalletValueSummary:input_type -> hyapp.wallet.v1.GetWalletValueSummaryRequest - 65, // 86: hyapp.wallet.v1.WalletService.GetUserGiftWall:input_type -> hyapp.wallet.v1.GetUserGiftWallRequest - 68, // 87: hyapp.wallet.v1.WalletService.ListRechargeProducts:input_type -> hyapp.wallet.v1.ListRechargeProductsRequest - 70, // 88: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:input_type -> hyapp.wallet.v1.ConfirmGooglePaymentRequest - 72, // 89: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:input_type -> hyapp.wallet.v1.ListAdminRechargeProductsRequest - 74, // 90: hyapp.wallet.v1.WalletService.CreateRechargeProduct:input_type -> hyapp.wallet.v1.CreateRechargeProductRequest - 75, // 91: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:input_type -> hyapp.wallet.v1.UpdateRechargeProductRequest - 76, // 92: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:input_type -> hyapp.wallet.v1.DeleteRechargeProductRequest - 80, // 93: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:input_type -> hyapp.wallet.v1.GetDiamondExchangeConfigRequest - 83, // 94: hyapp.wallet.v1.WalletService.ListWalletTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest - 86, // 95: hyapp.wallet.v1.WalletService.ApplyWithdrawal:input_type -> hyapp.wallet.v1.ApplyWithdrawalRequest - 91, // 96: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest - 93, // 97: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest - 95, // 98: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest - 97, // 99: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest - 100, // 100: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest - 102, // 101: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest - 104, // 102: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest - 106, // 103: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest - 108, // 104: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest - 113, // 105: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest - 115, // 106: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest - 117, // 107: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest - 119, // 108: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest - 121, // 109: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest - 123, // 110: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest - 125, // 111: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest - 1, // 112: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 4, // 113: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse - 6, // 114: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse - 8, // 115: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse - 10, // 116: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse - 21, // 117: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse - 23, // 118: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse - 27, // 119: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 27, // 120: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 27, // 121: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse - 29, // 122: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse - 31, // 123: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse - 35, // 124: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 35, // 125: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 35, // 126: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 37, // 127: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse - 39, // 128: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse - 45, // 129: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 45, // 130: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 45, // 131: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse - 41, // 132: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse - 48, // 133: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 48, // 134: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 50, // 135: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse - 52, // 136: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse - 54, // 137: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse - 57, // 138: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse - 60, // 139: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse - 63, // 140: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse - 66, // 141: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse - 69, // 142: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse - 71, // 143: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse - 73, // 144: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse - 77, // 145: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 77, // 146: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 78, // 147: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse - 81, // 148: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse - 84, // 149: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse - 87, // 150: hyapp.wallet.v1.WalletService.ApplyWithdrawal:output_type -> hyapp.wallet.v1.ApplyWithdrawalResponse - 92, // 151: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse - 94, // 152: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse - 96, // 153: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse - 98, // 154: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse - 101, // 155: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse - 103, // 156: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse - 105, // 157: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse - 107, // 158: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse - 109, // 159: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse - 114, // 160: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse - 116, // 161: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse - 118, // 162: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse - 120, // 163: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse - 122, // 164: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse - 124, // 165: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse - 126, // 166: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse - 112, // [112:167] is the sub-list for method output_type - 57, // [57:112] is the sub-list for method input_type - 57, // [57:57] is the sub-list for extension type_name - 57, // [57:57] is the sub-list for extension extendee - 0, // [0:57] is the sub-list for field type_name + 11, // 5: hyapp.wallet.v1.ResourceShopItem.resource:type_name -> hyapp.wallet.v1.Resource + 11, // 6: hyapp.wallet.v1.UserResourceEntitlement.resource:type_name -> hyapp.wallet.v1.Resource + 18, // 7: hyapp.wallet.v1.ResourceGrant.items:type_name -> hyapp.wallet.v1.ResourceGrantItem + 11, // 8: hyapp.wallet.v1.ListResourcesResponse.resources:type_name -> hyapp.wallet.v1.Resource + 11, // 9: hyapp.wallet.v1.GetResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource + 11, // 10: hyapp.wallet.v1.ResourceResponse.resource:type_name -> hyapp.wallet.v1.Resource + 13, // 11: hyapp.wallet.v1.ListResourceGroupsResponse.groups:type_name -> hyapp.wallet.v1.ResourceGroup + 13, // 12: hyapp.wallet.v1.GetResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup + 20, // 13: hyapp.wallet.v1.CreateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput + 20, // 14: hyapp.wallet.v1.UpdateResourceGroupRequest.items:type_name -> hyapp.wallet.v1.ResourceGroupItemInput + 13, // 15: hyapp.wallet.v1.ResourceGroupResponse.group:type_name -> hyapp.wallet.v1.ResourceGroup + 14, // 16: hyapp.wallet.v1.ListGiftConfigsResponse.gifts:type_name -> hyapp.wallet.v1.GiftConfig + 15, // 17: hyapp.wallet.v1.ListGiftTypeConfigsResponse.gift_types:type_name -> hyapp.wallet.v1.GiftTypeConfig + 15, // 18: hyapp.wallet.v1.GiftTypeConfigResponse.gift_type:type_name -> hyapp.wallet.v1.GiftTypeConfig + 14, // 19: hyapp.wallet.v1.GiftConfigResponse.gift:type_name -> hyapp.wallet.v1.GiftConfig + 19, // 20: hyapp.wallet.v1.ResourceGrantResponse.grant:type_name -> hyapp.wallet.v1.ResourceGrant + 17, // 21: hyapp.wallet.v1.ListUserResourcesResponse.resources:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 17, // 22: hyapp.wallet.v1.EquipUserResourceResponse.resource:type_name -> hyapp.wallet.v1.UserResourceEntitlement + 19, // 23: hyapp.wallet.v1.ListResourceGrantsResponse.grants:type_name -> hyapp.wallet.v1.ResourceGrant + 16, // 24: hyapp.wallet.v1.ListResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem + 56, // 25: hyapp.wallet.v1.UpsertResourceShopItemsRequest.items:type_name -> hyapp.wallet.v1.ResourceShopItemInput + 16, // 26: hyapp.wallet.v1.UpsertResourceShopItemsResponse.items:type_name -> hyapp.wallet.v1.ResourceShopItem + 16, // 27: hyapp.wallet.v1.ResourceShopItemResponse.item:type_name -> hyapp.wallet.v1.ResourceShopItem + 63, // 28: hyapp.wallet.v1.ListRechargeBillsResponse.bills:type_name -> hyapp.wallet.v1.RechargeBill + 2, // 29: hyapp.wallet.v1.GetWalletOverviewResponse.balances:type_name -> hyapp.wallet.v1.AssetBalance + 66, // 30: hyapp.wallet.v1.GetWalletOverviewResponse.feature_flags:type_name -> hyapp.wallet.v1.WalletFeatureFlags + 69, // 31: hyapp.wallet.v1.GetWalletValueSummaryResponse.summary:type_name -> hyapp.wallet.v1.WalletValueSummary + 11, // 32: hyapp.wallet.v1.GiftWallItem.resource:type_name -> hyapp.wallet.v1.Resource + 72, // 33: hyapp.wallet.v1.GetUserGiftWallResponse.items:type_name -> hyapp.wallet.v1.GiftWallItem + 75, // 34: hyapp.wallet.v1.ListRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct + 2, // 35: hyapp.wallet.v1.ConfirmGooglePaymentResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 75, // 36: hyapp.wallet.v1.ListAdminRechargeProductsResponse.products:type_name -> hyapp.wallet.v1.RechargeProduct + 75, // 37: hyapp.wallet.v1.RechargeProductResponse.product:type_name -> hyapp.wallet.v1.RechargeProduct + 87, // 38: hyapp.wallet.v1.GetDiamondExchangeConfigResponse.rules:type_name -> hyapp.wallet.v1.DiamondExchangeRule + 90, // 39: hyapp.wallet.v1.ListWalletTransactionsResponse.transactions:type_name -> hyapp.wallet.v1.WalletTransaction + 93, // 40: hyapp.wallet.v1.ApplyWithdrawalResponse.withdrawal:type_name -> hyapp.wallet.v1.WithdrawalRequest + 2, // 41: hyapp.wallet.v1.ApplyWithdrawalResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 96, // 42: hyapp.wallet.v1.VipLevel.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 98, // 43: hyapp.wallet.v1.ListVipPackagesResponse.current_vip:type_name -> hyapp.wallet.v1.UserVip + 97, // 44: hyapp.wallet.v1.ListVipPackagesResponse.packages:type_name -> hyapp.wallet.v1.VipLevel + 98, // 45: hyapp.wallet.v1.GetMyVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 98, // 46: hyapp.wallet.v1.PurchaseVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 96, // 47: hyapp.wallet.v1.PurchaseVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 98, // 48: hyapp.wallet.v1.GrantVipResponse.vip:type_name -> hyapp.wallet.v1.UserVip + 96, // 49: hyapp.wallet.v1.GrantVipResponse.reward_items:type_name -> hyapp.wallet.v1.VipRewardItem + 97, // 50: hyapp.wallet.v1.ListAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel + 107, // 51: hyapp.wallet.v1.UpdateAdminVipLevelsRequest.levels:type_name -> hyapp.wallet.v1.AdminVipLevelInput + 97, // 52: hyapp.wallet.v1.UpdateAdminVipLevelsResponse.levels:type_name -> hyapp.wallet.v1.VipLevel + 2, // 53: hyapp.wallet.v1.CreditTaskRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 2, // 54: hyapp.wallet.v1.CreditLuckyGiftRewardResponse.balance:type_name -> hyapp.wallet.v1.AssetBalance + 119, // 55: hyapp.wallet.v1.RedPacket.claims:type_name -> hyapp.wallet.v1.RedPacketClaim + 118, // 56: hyapp.wallet.v1.GetRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig + 118, // 57: hyapp.wallet.v1.UpdateRedPacketConfigResponse.config:type_name -> hyapp.wallet.v1.RedPacketConfig + 120, // 58: hyapp.wallet.v1.CreateRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 119, // 59: hyapp.wallet.v1.ClaimRedPacketResponse.claim:type_name -> hyapp.wallet.v1.RedPacketClaim + 120, // 60: hyapp.wallet.v1.ListRedPacketsResponse.packets:type_name -> hyapp.wallet.v1.RedPacket + 120, // 61: hyapp.wallet.v1.GetRedPacketResponse.packet:type_name -> hyapp.wallet.v1.RedPacket + 0, // 62: hyapp.wallet.v1.WalletService.DebitGift:input_type -> hyapp.wallet.v1.DebitGiftRequest + 3, // 63: hyapp.wallet.v1.WalletService.GetBalances:input_type -> hyapp.wallet.v1.GetBalancesRequest + 5, // 64: hyapp.wallet.v1.WalletService.AdminCreditAsset:input_type -> hyapp.wallet.v1.AdminCreditAssetRequest + 7, // 65: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:input_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockRequest + 9, // 66: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:input_type -> hyapp.wallet.v1.TransferCoinFromSellerRequest + 21, // 67: hyapp.wallet.v1.WalletService.ListResources:input_type -> hyapp.wallet.v1.ListResourcesRequest + 23, // 68: hyapp.wallet.v1.WalletService.GetResource:input_type -> hyapp.wallet.v1.GetResourceRequest + 25, // 69: hyapp.wallet.v1.WalletService.CreateResource:input_type -> hyapp.wallet.v1.CreateResourceRequest + 26, // 70: hyapp.wallet.v1.WalletService.UpdateResource:input_type -> hyapp.wallet.v1.UpdateResourceRequest + 27, // 71: hyapp.wallet.v1.WalletService.SetResourceStatus:input_type -> hyapp.wallet.v1.SetResourceStatusRequest + 29, // 72: hyapp.wallet.v1.WalletService.ListResourceGroups:input_type -> hyapp.wallet.v1.ListResourceGroupsRequest + 31, // 73: hyapp.wallet.v1.WalletService.GetResourceGroup:input_type -> hyapp.wallet.v1.GetResourceGroupRequest + 33, // 74: hyapp.wallet.v1.WalletService.CreateResourceGroup:input_type -> hyapp.wallet.v1.CreateResourceGroupRequest + 34, // 75: hyapp.wallet.v1.WalletService.UpdateResourceGroup:input_type -> hyapp.wallet.v1.UpdateResourceGroupRequest + 35, // 76: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:input_type -> hyapp.wallet.v1.SetResourceGroupStatusRequest + 37, // 77: hyapp.wallet.v1.WalletService.ListGiftConfigs:input_type -> hyapp.wallet.v1.ListGiftConfigsRequest + 39, // 78: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:input_type -> hyapp.wallet.v1.ListGiftTypeConfigsRequest + 43, // 79: hyapp.wallet.v1.WalletService.CreateGiftConfig:input_type -> hyapp.wallet.v1.CreateGiftConfigRequest + 44, // 80: hyapp.wallet.v1.WalletService.UpdateGiftConfig:input_type -> hyapp.wallet.v1.UpdateGiftConfigRequest + 45, // 81: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:input_type -> hyapp.wallet.v1.SetGiftConfigStatusRequest + 41, // 82: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:input_type -> hyapp.wallet.v1.UpsertGiftTypeConfigRequest + 47, // 83: hyapp.wallet.v1.WalletService.GrantResource:input_type -> hyapp.wallet.v1.GrantResourceRequest + 48, // 84: hyapp.wallet.v1.WalletService.GrantResourceGroup:input_type -> hyapp.wallet.v1.GrantResourceGroupRequest + 50, // 85: hyapp.wallet.v1.WalletService.ListUserResources:input_type -> hyapp.wallet.v1.ListUserResourcesRequest + 52, // 86: hyapp.wallet.v1.WalletService.EquipUserResource:input_type -> hyapp.wallet.v1.EquipUserResourceRequest + 54, // 87: hyapp.wallet.v1.WalletService.ListResourceGrants:input_type -> hyapp.wallet.v1.ListResourceGrantsRequest + 57, // 88: hyapp.wallet.v1.WalletService.ListResourceShopItems:input_type -> hyapp.wallet.v1.ListResourceShopItemsRequest + 59, // 89: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:input_type -> hyapp.wallet.v1.UpsertResourceShopItemsRequest + 61, // 90: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:input_type -> hyapp.wallet.v1.SetResourceShopItemStatusRequest + 64, // 91: hyapp.wallet.v1.WalletService.ListRechargeBills:input_type -> hyapp.wallet.v1.ListRechargeBillsRequest + 67, // 92: hyapp.wallet.v1.WalletService.GetWalletOverview:input_type -> hyapp.wallet.v1.GetWalletOverviewRequest + 70, // 93: hyapp.wallet.v1.WalletService.GetWalletValueSummary:input_type -> hyapp.wallet.v1.GetWalletValueSummaryRequest + 73, // 94: hyapp.wallet.v1.WalletService.GetUserGiftWall:input_type -> hyapp.wallet.v1.GetUserGiftWallRequest + 76, // 95: hyapp.wallet.v1.WalletService.ListRechargeProducts:input_type -> hyapp.wallet.v1.ListRechargeProductsRequest + 78, // 96: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:input_type -> hyapp.wallet.v1.ConfirmGooglePaymentRequest + 80, // 97: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:input_type -> hyapp.wallet.v1.ListAdminRechargeProductsRequest + 82, // 98: hyapp.wallet.v1.WalletService.CreateRechargeProduct:input_type -> hyapp.wallet.v1.CreateRechargeProductRequest + 83, // 99: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:input_type -> hyapp.wallet.v1.UpdateRechargeProductRequest + 84, // 100: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:input_type -> hyapp.wallet.v1.DeleteRechargeProductRequest + 88, // 101: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:input_type -> hyapp.wallet.v1.GetDiamondExchangeConfigRequest + 91, // 102: hyapp.wallet.v1.WalletService.ListWalletTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest + 94, // 103: hyapp.wallet.v1.WalletService.ApplyWithdrawal:input_type -> hyapp.wallet.v1.ApplyWithdrawalRequest + 99, // 104: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest + 101, // 105: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest + 103, // 106: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest + 105, // 107: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest + 108, // 108: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest + 110, // 109: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest + 112, // 110: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest + 114, // 111: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest + 116, // 112: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest + 121, // 113: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest + 123, // 114: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest + 125, // 115: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest + 127, // 116: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest + 129, // 117: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest + 131, // 118: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest + 133, // 119: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest + 1, // 120: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 4, // 121: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse + 6, // 122: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse + 8, // 123: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse + 10, // 124: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse + 22, // 125: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse + 24, // 126: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse + 28, // 127: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 28, // 128: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 28, // 129: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse + 30, // 130: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse + 32, // 131: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse + 36, // 132: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 36, // 133: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 36, // 134: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 38, // 135: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse + 40, // 136: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse + 46, // 137: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 46, // 138: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 46, // 139: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse + 42, // 140: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse + 49, // 141: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 49, // 142: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 51, // 143: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse + 53, // 144: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse + 55, // 145: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse + 58, // 146: hyapp.wallet.v1.WalletService.ListResourceShopItems:output_type -> hyapp.wallet.v1.ListResourceShopItemsResponse + 60, // 147: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:output_type -> hyapp.wallet.v1.UpsertResourceShopItemsResponse + 62, // 148: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:output_type -> hyapp.wallet.v1.ResourceShopItemResponse + 65, // 149: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse + 68, // 150: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse + 71, // 151: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse + 74, // 152: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse + 77, // 153: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse + 79, // 154: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse + 81, // 155: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse + 85, // 156: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 85, // 157: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 86, // 158: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse + 89, // 159: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse + 92, // 160: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse + 95, // 161: hyapp.wallet.v1.WalletService.ApplyWithdrawal:output_type -> hyapp.wallet.v1.ApplyWithdrawalResponse + 100, // 162: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse + 102, // 163: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse + 104, // 164: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse + 106, // 165: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse + 109, // 166: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse + 111, // 167: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse + 113, // 168: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse + 115, // 169: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse + 117, // 170: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse + 122, // 171: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse + 124, // 172: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse + 126, // 173: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse + 128, // 174: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse + 130, // 175: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse + 132, // 176: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse + 134, // 177: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse + 120, // [120:178] is the sub-list for method output_type + 62, // [62:120] is the sub-list for method input_type + 62, // [62:62] is the sub-list for extension type_name + 62, // [62:62] is the sub-list for extension extendee + 0, // [0:62] is the sub-list for field type_name } func init() { file_proto_wallet_v1_wallet_proto_init() } @@ -12854,15 +13573,15 @@ func file_proto_wallet_v1_wallet_proto_init() { if File_proto_wallet_v1_wallet_proto != nil { return } - file_proto_wallet_v1_wallet_proto_msgTypes[24].OneofWrappers = []any{} file_proto_wallet_v1_wallet_proto_msgTypes[25].OneofWrappers = []any{} + file_proto_wallet_v1_wallet_proto_msgTypes[26].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_wallet_v1_wallet_proto_rawDesc), len(file_proto_wallet_v1_wallet_proto_rawDesc)), NumEnums: 0, - NumMessages: 127, + NumMessages: 135, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/wallet/v1/wallet.proto b/api/proto/wallet/v1/wallet.proto index 484a1816..156f59f1 100644 --- a/api/proto/wallet/v1/wallet.proto +++ b/api/proto/wallet/v1/wallet.proto @@ -222,6 +222,24 @@ message GiftTypeConfig { int64 updated_at_ms = 10; } +message ResourceShopItem { + string app_code = 1; + int64 shop_item_id = 2; + int64 resource_id = 3; + Resource resource = 4; + string status = 5; + int32 duration_days = 6; + string price_type = 7; + int64 coin_price = 8; + int64 effective_from_ms = 9; + int64 effective_to_ms = 10; + int32 sort_order = 11; + int64 created_by_user_id = 12; + int64 updated_by_user_id = 13; + int64 created_at_ms = 14; + int64 updated_at_ms = 15; +} + message UserResourceEntitlement { string app_code = 1; string entitlement_id = 2; @@ -592,6 +610,55 @@ message ListResourceGrantsResponse { int64 total = 2; } +message ResourceShopItemInput { + int64 shop_item_id = 1; + int64 resource_id = 2; + string status = 3; + int32 duration_days = 4; + int64 effective_from_ms = 5; + int64 effective_to_ms = 6; + int32 sort_order = 7; +} + +message ListResourceShopItemsRequest { + string request_id = 1; + string app_code = 2; + string resource_type = 3; + string status = 4; + string keyword = 5; + int32 page = 6; + int32 page_size = 7; + bool active_only = 8; +} + +message ListResourceShopItemsResponse { + repeated ResourceShopItem items = 1; + int64 total = 2; +} + +message UpsertResourceShopItemsRequest { + string request_id = 1; + string app_code = 2; + repeated ResourceShopItemInput items = 3; + int64 operator_user_id = 4; +} + +message UpsertResourceShopItemsResponse { + repeated ResourceShopItem items = 1; +} + +message SetResourceShopItemStatusRequest { + string request_id = 1; + string app_code = 2; + int64 shop_item_id = 3; + string status = 4; + int64 operator_user_id = 5; +} + +message ResourceShopItemResponse { + ResourceShopItem item = 1; +} + message RechargeBill { string app_code = 1; string transaction_id = 2; @@ -1275,6 +1342,9 @@ service WalletService { rpc ListUserResources(ListUserResourcesRequest) returns (ListUserResourcesResponse); rpc EquipUserResource(EquipUserResourceRequest) returns (EquipUserResourceResponse); rpc ListResourceGrants(ListResourceGrantsRequest) returns (ListResourceGrantsResponse); + rpc ListResourceShopItems(ListResourceShopItemsRequest) returns (ListResourceShopItemsResponse); + rpc UpsertResourceShopItems(UpsertResourceShopItemsRequest) returns (UpsertResourceShopItemsResponse); + rpc SetResourceShopItemStatus(SetResourceShopItemStatusRequest) returns (ResourceShopItemResponse); rpc ListRechargeBills(ListRechargeBillsRequest) returns (ListRechargeBillsResponse); rpc GetWalletOverview(GetWalletOverviewRequest) returns (GetWalletOverviewResponse); rpc GetWalletValueSummary(GetWalletValueSummaryRequest) returns (GetWalletValueSummaryResponse); diff --git a/api/proto/wallet/v1/wallet_grpc.pb.go b/api/proto/wallet/v1/wallet_grpc.pb.go index f656cac8..878249ff 100644 --- a/api/proto/wallet/v1/wallet_grpc.pb.go +++ b/api/proto/wallet/v1/wallet_grpc.pb.go @@ -45,6 +45,9 @@ const ( WalletService_ListUserResources_FullMethodName = "/hyapp.wallet.v1.WalletService/ListUserResources" WalletService_EquipUserResource_FullMethodName = "/hyapp.wallet.v1.WalletService/EquipUserResource" WalletService_ListResourceGrants_FullMethodName = "/hyapp.wallet.v1.WalletService/ListResourceGrants" + WalletService_ListResourceShopItems_FullMethodName = "/hyapp.wallet.v1.WalletService/ListResourceShopItems" + WalletService_UpsertResourceShopItems_FullMethodName = "/hyapp.wallet.v1.WalletService/UpsertResourceShopItems" + WalletService_SetResourceShopItemStatus_FullMethodName = "/hyapp.wallet.v1.WalletService/SetResourceShopItemStatus" WalletService_ListRechargeBills_FullMethodName = "/hyapp.wallet.v1.WalletService/ListRechargeBills" WalletService_GetWalletOverview_FullMethodName = "/hyapp.wallet.v1.WalletService/GetWalletOverview" WalletService_GetWalletValueSummary_FullMethodName = "/hyapp.wallet.v1.WalletService/GetWalletValueSummary" @@ -108,6 +111,9 @@ type WalletServiceClient interface { ListUserResources(ctx context.Context, in *ListUserResourcesRequest, opts ...grpc.CallOption) (*ListUserResourcesResponse, error) EquipUserResource(ctx context.Context, in *EquipUserResourceRequest, opts ...grpc.CallOption) (*EquipUserResourceResponse, error) ListResourceGrants(ctx context.Context, in *ListResourceGrantsRequest, opts ...grpc.CallOption) (*ListResourceGrantsResponse, error) + ListResourceShopItems(ctx context.Context, in *ListResourceShopItemsRequest, opts ...grpc.CallOption) (*ListResourceShopItemsResponse, error) + UpsertResourceShopItems(ctx context.Context, in *UpsertResourceShopItemsRequest, opts ...grpc.CallOption) (*UpsertResourceShopItemsResponse, error) + SetResourceShopItemStatus(ctx context.Context, in *SetResourceShopItemStatusRequest, opts ...grpc.CallOption) (*ResourceShopItemResponse, error) ListRechargeBills(ctx context.Context, in *ListRechargeBillsRequest, opts ...grpc.CallOption) (*ListRechargeBillsResponse, error) GetWalletOverview(ctx context.Context, in *GetWalletOverviewRequest, opts ...grpc.CallOption) (*GetWalletOverviewResponse, error) GetWalletValueSummary(ctx context.Context, in *GetWalletValueSummaryRequest, opts ...grpc.CallOption) (*GetWalletValueSummaryResponse, error) @@ -407,6 +413,36 @@ func (c *walletServiceClient) ListResourceGrants(ctx context.Context, in *ListRe return out, nil } +func (c *walletServiceClient) ListResourceShopItems(ctx context.Context, in *ListResourceShopItemsRequest, opts ...grpc.CallOption) (*ListResourceShopItemsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListResourceShopItemsResponse) + err := c.cc.Invoke(ctx, WalletService_ListResourceShopItems_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) UpsertResourceShopItems(ctx context.Context, in *UpsertResourceShopItemsRequest, opts ...grpc.CallOption) (*UpsertResourceShopItemsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpsertResourceShopItemsResponse) + err := c.cc.Invoke(ctx, WalletService_UpsertResourceShopItems_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) SetResourceShopItemStatus(ctx context.Context, in *SetResourceShopItemStatusRequest, opts ...grpc.CallOption) (*ResourceShopItemResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResourceShopItemResponse) + err := c.cc.Invoke(ctx, WalletService_SetResourceShopItemStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *walletServiceClient) ListRechargeBills(ctx context.Context, in *ListRechargeBillsRequest, opts ...grpc.CallOption) (*ListRechargeBillsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListRechargeBillsResponse) @@ -729,6 +765,9 @@ type WalletServiceServer interface { ListUserResources(context.Context, *ListUserResourcesRequest) (*ListUserResourcesResponse, error) EquipUserResource(context.Context, *EquipUserResourceRequest) (*EquipUserResourceResponse, error) ListResourceGrants(context.Context, *ListResourceGrantsRequest) (*ListResourceGrantsResponse, error) + ListResourceShopItems(context.Context, *ListResourceShopItemsRequest) (*ListResourceShopItemsResponse, error) + UpsertResourceShopItems(context.Context, *UpsertResourceShopItemsRequest) (*UpsertResourceShopItemsResponse, error) + SetResourceShopItemStatus(context.Context, *SetResourceShopItemStatusRequest) (*ResourceShopItemResponse, error) ListRechargeBills(context.Context, *ListRechargeBillsRequest) (*ListRechargeBillsResponse, error) GetWalletOverview(context.Context, *GetWalletOverviewRequest) (*GetWalletOverviewResponse, error) GetWalletValueSummary(context.Context, *GetWalletValueSummaryRequest) (*GetWalletValueSummaryResponse, error) @@ -846,6 +885,15 @@ func (UnimplementedWalletServiceServer) EquipUserResource(context.Context, *Equi func (UnimplementedWalletServiceServer) ListResourceGrants(context.Context, *ListResourceGrantsRequest) (*ListResourceGrantsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListResourceGrants not implemented") } +func (UnimplementedWalletServiceServer) ListResourceShopItems(context.Context, *ListResourceShopItemsRequest) (*ListResourceShopItemsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListResourceShopItems not implemented") +} +func (UnimplementedWalletServiceServer) UpsertResourceShopItems(context.Context, *UpsertResourceShopItemsRequest) (*UpsertResourceShopItemsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpsertResourceShopItems not implemented") +} +func (UnimplementedWalletServiceServer) SetResourceShopItemStatus(context.Context, *SetResourceShopItemStatusRequest) (*ResourceShopItemResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SetResourceShopItemStatus not implemented") +} func (UnimplementedWalletServiceServer) ListRechargeBills(context.Context, *ListRechargeBillsRequest) (*ListRechargeBillsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListRechargeBills not implemented") } @@ -1422,6 +1470,60 @@ func _WalletService_ListResourceGrants_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _WalletService_ListResourceShopItems_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListResourceShopItemsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).ListResourceShopItems(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_ListResourceShopItems_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).ListResourceShopItems(ctx, req.(*ListResourceShopItemsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_UpsertResourceShopItems_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpsertResourceShopItemsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).UpsertResourceShopItems(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_UpsertResourceShopItems_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).UpsertResourceShopItems(ctx, req.(*UpsertResourceShopItemsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_SetResourceShopItemStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetResourceShopItemStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).SetResourceShopItemStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_SetResourceShopItemStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).SetResourceShopItemStatus(ctx, req.(*SetResourceShopItemStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _WalletService_ListRechargeBills_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListRechargeBillsRequest) if err := dec(in); err != nil { @@ -2055,6 +2157,18 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListResourceGrants", Handler: _WalletService_ListResourceGrants_Handler, }, + { + MethodName: "ListResourceShopItems", + Handler: _WalletService_ListResourceShopItems_Handler, + }, + { + MethodName: "UpsertResourceShopItems", + Handler: _WalletService_UpsertResourceShopItems_Handler, + }, + { + MethodName: "SetResourceShopItemStatus", + Handler: _WalletService_SetResourceShopItemStatus_Handler, + }, { MethodName: "ListRechargeBills", Handler: _WalletService_ListRechargeBills_Handler, diff --git a/pkg/tencentim/rest_client.go b/pkg/tencentim/rest_client.go index 543ae289..5d64c5e3 100644 --- a/pkg/tencentim/rest_client.go +++ b/pkg/tencentim/rest_client.go @@ -26,6 +26,8 @@ const ( sendGroupMsgCommand = "v4/group_open_http_svc/send_group_msg" // sendC2CMsgCommand 是服务端给单个用户发自定义消息的 REST 命令;钱包余额变更这类私有事件只能走单聊面。 sendC2CMsgCommand = "v4/openim/sendmsg" + // accountImportCommand 把内部 user_id 导入腾讯 IM 账号体系;C2C 发送和 SDK 登录依赖该账号存在。 + accountImportCommand = "v4/im_open_login_svc/account_import" // destroyGroupCommand 用于真实 IM smoke test 或明确运维动作的临时群清理,业务代码不应自动解散播报群。 destroyGroupCommand = "v4/group_open_http_svc/destroy_group" // deleteGroupMemberCommand 用于把已离房用户从腾讯群里移除,防止 IM 群成员残留扩大消息面。 @@ -83,6 +85,13 @@ type CustomUserMessage struct { PayloadJSON json.RawMessage } +// AccountProfile 表达腾讯 IM 账号导入所需的最小用户资料。 +type AccountProfile struct { + UserID int64 + Nick string + FaceURL string +} + // RoomEvent 是 room-service 发给腾讯 IM 的房间系统消息负载。 type RoomEvent struct { EventID string `json:"event_id"` @@ -293,6 +302,29 @@ func (c *RESTClient) PublishUserCustomMessage(ctx context.Context, message Custo return response.err() } +// ImportAccount 确保内部 user_id 已存在于腾讯 IM 账号体系。 +// 腾讯接口本身没有本地事务语义,因此调用方应在用户事务提交后调用,并允许后续 UserSig 入口补偿。 +func (c *RESTClient) ImportAccount(ctx context.Context, profile AccountProfile) error { + if profile.UserID <= 0 { + return fmt.Errorf("im account import is incomplete") + } + + request := accountImportRequest{ + UserID: FormatUserID(profile.UserID), + Nick: strings.TrimSpace(profile.Nick), + FaceURL: strings.TrimSpace(profile.FaceURL), + } + var response restResponse + if err := c.post(ctx, accountImportCommand, request, &response); err != nil { + return err + } + if response.ErrorCode == 0 || isAccountAlreadyImported(response) { + return nil + } + + return response.err() +} + // DestroyGroup 解散一个腾讯云 IM 群。 // 生产播报群不应该在业务流里自动调用该方法;它主要用于真实 IM 测试后的临时群清理或显式运维操作。 func (c *RESTClient) DestroyGroup(ctx context.Context, groupID string) error { @@ -437,6 +469,15 @@ func (r restResponse) err() error { return fmt.Errorf("tencent im rest failed: code=%d info=%s", r.ErrorCode, r.ErrorInfo) } +func isAccountAlreadyImported(response restResponse) bool { + // 腾讯不同版本和地域对重复导入的错误码/文案不完全一致;账号已存在是幂等成功。 + if response.ErrorCode == 70107 { + return true + } + info := strings.ToLower(strings.TrimSpace(response.ErrorInfo)) + return strings.Contains(info, "already") || strings.Contains(info, "exist") +} + type createGroupRequest struct { OwnerAccount string `json:"Owner_Account,omitempty"` Type string `json:"Type"` @@ -463,6 +504,12 @@ type sendC2CMsgRequest struct { MsgBody []messageElement `json:"MsgBody"` } +type accountImportRequest struct { + UserID string `json:"UserID"` + Nick string `json:"Nick,omitempty"` + FaceURL string `json:"FaceUrl,omitempty"` +} + type destroyGroupRequest struct { GroupID string `json:"GroupId"` } diff --git a/pkg/tencentim/rest_client_real_test.go b/pkg/tencentim/rest_client_real_test.go index 877741f9..c05ba4d9 100644 --- a/pkg/tencentim/rest_client_real_test.go +++ b/pkg/tencentim/rest_client_real_test.go @@ -86,14 +86,10 @@ func TestRealTencentIMCreateSendAndDestroyGroup(t *testing.T) { } func realImportAccount(ctx context.Context, client *RESTClient, userID int64) error { - var response restResponse - if err := client.post(ctx, "v4/im_open_login_svc/account_import", map[string]any{ - "UserID": strconv.FormatInt(userID, 10), - "Nick": "codex-im-smoke", - }, &response); err != nil { - return err - } - return response.err() + return client.ImportAccount(ctx, AccountProfile{ + UserID: userID, + Nick: "codex-im-smoke", + }) } func realAddGroupMember(ctx context.Context, client *RESTClient, groupID string, userID int64) error { diff --git a/pkg/tencentim/rest_client_test.go b/pkg/tencentim/rest_client_test.go index 1446acde..730d00a5 100644 --- a/pkg/tencentim/rest_client_test.go +++ b/pkg/tencentim/rest_client_test.go @@ -166,6 +166,48 @@ func TestRESTClientPublishUserCustomMessageBuildsC2CPayload(t *testing.T) { } } +func TestRESTClientImportAccountBuildsTencentRequest(t *testing.T) { + var capturedPath string + var capturedBody map[string]any + client := newTestRESTClient(t, func(request *http.Request) (*http.Response, error) { + capturedPath = request.URL.Path + if err := json.NewDecoder(request.Body).Decode(&capturedBody); err != nil { + t.Fatalf("decode request body failed: %v", err) + } + return okRESTResponse(), nil + }) + + if err := client.ImportAccount(context.Background(), AccountProfile{ + UserID: 10002, + Nick: "Lingxian", + FaceURL: "https://cdn.example/avatar.png", + }); err != nil { + t.Fatalf("ImportAccount failed: %v", err) + } + + if capturedPath != "/"+accountImportCommand { + t.Fatalf("path mismatch: got %q", capturedPath) + } + if capturedBody["UserID"] != "10002" || capturedBody["Nick"] != "Lingxian" || capturedBody["FaceUrl"] != "https://cdn.example/avatar.png" { + t.Fatalf("unexpected account import body: %+v", capturedBody) + } +} + +func TestRESTClientImportAccountTreatsExistingAccountAsSuccess(t *testing.T) { + client := newTestRESTClient(t, func(_ *http.Request) (*http.Response, error) { + payload := []byte(`{"ActionStatus":"FAIL","ErrorCode":70107,"ErrorInfo":"account already exists"}`) + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewReader(payload)), + Header: make(http.Header), + }, nil + }) + + if err := client.ImportAccount(context.Background(), AccountProfile{UserID: 10002}); err != nil { + t.Fatalf("existing account must be idempotent success: %v", err) + } +} + // TestRESTClientDestroyGroupBuildsTencentRequest 锁定临时群清理的 REST 请求。 func TestRESTClientDestroyGroupBuildsTencentRequest(t *testing.T) { var capturedPath string diff --git a/server/admin/docs/权限管理.md b/server/admin/docs/权限管理.md index a9f3c323..3ca741f6 100644 --- a/server/admin/docs/权限管理.md +++ b/server/admin/docs/权限管理.md @@ -281,6 +281,8 @@ | `resource:view` | `menu` | 资源列表、资源详情 | | `resource:create` | `button` | 新增资源 | | `resource:update` | `button` | 编辑资源、启用、禁用 | +| `resource-shop:view` | `menu` | 道具商店售卖列表 | +| `resource-shop:update` | `button` | 添加售卖资源、配置售卖天数和启用、禁用 | | `resource-group:view` | `menu` | 资源组列表、资源组详情 | | `resource-group:create` | `button` | 新增资源组 | | `resource-group:update` | `button` | 编辑资源组、替换组成员、启用、禁用 | diff --git a/server/admin/internal/integration/walletclient/client.go b/server/admin/internal/integration/walletclient/client.go index 4f36a8df..a9184f09 100644 --- a/server/admin/internal/integration/walletclient/client.go +++ b/server/admin/internal/integration/walletclient/client.go @@ -29,6 +29,9 @@ type Client interface { GrantResource(ctx context.Context, req *walletv1.GrantResourceRequest) (*walletv1.ResourceGrantResponse, error) GrantResourceGroup(ctx context.Context, req *walletv1.GrantResourceGroupRequest) (*walletv1.ResourceGrantResponse, error) ListResourceGrants(ctx context.Context, req *walletv1.ListResourceGrantsRequest) (*walletv1.ListResourceGrantsResponse, error) + ListResourceShopItems(ctx context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) + UpsertResourceShopItems(ctx context.Context, req *walletv1.UpsertResourceShopItemsRequest) (*walletv1.UpsertResourceShopItemsResponse, error) + SetResourceShopItemStatus(ctx context.Context, req *walletv1.SetResourceShopItemStatusRequest) (*walletv1.ResourceShopItemResponse, error) AdminCreditAsset(ctx context.Context, req *walletv1.AdminCreditAssetRequest) (*walletv1.AdminCreditAssetResponse, error) AdminCreditCoinSellerStock(ctx context.Context, req *walletv1.AdminCreditCoinSellerStockRequest) (*walletv1.AdminCreditCoinSellerStockResponse, error) ListRechargeBills(ctx context.Context, req *walletv1.ListRechargeBillsRequest) (*walletv1.ListRechargeBillsResponse, error) @@ -129,6 +132,18 @@ func (c *GRPCClient) ListResourceGrants(ctx context.Context, req *walletv1.ListR return c.client.ListResourceGrants(ctx, req) } +func (c *GRPCClient) ListResourceShopItems(ctx context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) { + return c.client.ListResourceShopItems(ctx, req) +} + +func (c *GRPCClient) UpsertResourceShopItems(ctx context.Context, req *walletv1.UpsertResourceShopItemsRequest) (*walletv1.UpsertResourceShopItemsResponse, error) { + return c.client.UpsertResourceShopItems(ctx, req) +} + +func (c *GRPCClient) SetResourceShopItemStatus(ctx context.Context, req *walletv1.SetResourceShopItemStatusRequest) (*walletv1.ResourceShopItemResponse, error) { + return c.client.SetResourceShopItemStatus(ctx, req) +} + func (c *GRPCClient) AdminCreditAsset(ctx context.Context, req *walletv1.AdminCreditAssetRequest) (*walletv1.AdminCreditAssetResponse, error) { return c.client.AdminCreditAsset(ctx, req) } diff --git a/server/admin/internal/modules/resource/dto.go b/server/admin/internal/modules/resource/dto.go index c9081556..c1345505 100644 --- a/server/admin/internal/modules/resource/dto.go +++ b/server/admin/internal/modules/resource/dto.go @@ -160,6 +160,24 @@ type operatorDTO struct { Avatar string `json:"avatar,omitempty"` } +type resourceShopItemDTO struct { + AppCode string `json:"appCode"` + ShopItemID int64 `json:"shopItemId"` + ResourceID int64 `json:"resourceId"` + Resource resourceDTO `json:"resource"` + Status string `json:"status"` + DurationDays int32 `json:"durationDays"` + PriceType string `json:"priceType"` + CoinPrice int64 `json:"coinPrice"` + EffectiveFromMS int64 `json:"effectiveFromMs"` + EffectiveToMS int64 `json:"effectiveToMs"` + SortOrder int32 `json:"sortOrder"` + CreatedByUserID int64 `json:"createdByUserId"` + UpdatedByUserID int64 `json:"updatedByUserId"` + CreatedAtMS int64 `json:"createdAtMs"` + UpdatedAtMS int64 `json:"updatedAtMs"` +} + func resourceFromProto(item *walletv1.Resource) resourceDTO { if item == nil { return resourceDTO{} @@ -237,6 +255,29 @@ func resourcePointerFromProto(item *walletv1.Resource) *resourceDTO { return &data } +func resourceShopItemFromProto(item *walletv1.ResourceShopItem) resourceShopItemDTO { + if item == nil { + return resourceShopItemDTO{} + } + return resourceShopItemDTO{ + AppCode: item.GetAppCode(), + ShopItemID: item.GetShopItemId(), + ResourceID: item.GetResourceId(), + Resource: resourceFromProto(item.GetResource()), + Status: item.GetStatus(), + DurationDays: item.GetDurationDays(), + PriceType: item.GetPriceType(), + CoinPrice: item.GetCoinPrice(), + EffectiveFromMS: item.GetEffectiveFromMs(), + EffectiveToMS: item.GetEffectiveToMs(), + SortOrder: item.GetSortOrder(), + CreatedByUserID: item.GetCreatedByUserId(), + UpdatedByUserID: item.GetUpdatedByUserId(), + CreatedAtMS: item.GetCreatedAtMs(), + UpdatedAtMS: item.GetUpdatedAtMs(), + } +} + func giftFromProto(gift *walletv1.GiftConfig) giftDTO { if gift == nil { return giftDTO{} diff --git a/server/admin/internal/modules/resource/handler.go b/server/admin/internal/modules/resource/handler.go index f59fffb1..bf5c4938 100644 --- a/server/admin/internal/modules/resource/handler.go +++ b/server/admin/internal/modules/resource/handler.go @@ -510,6 +510,58 @@ func (h *Handler) ListResourceGrants(c *gin.Context) { response.OK(c, response.Page{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal()}) } +func (h *Handler) ListResourceShopItems(c *gin.Context) { + options := shared.ListOptions(c) + resp, err := h.wallet.ListResourceShopItems(c.Request.Context(), &walletv1.ListResourceShopItemsRequest{ + RequestId: middleware.CurrentRequestID(c), + AppCode: appctx.FromContext(c.Request.Context()), + ResourceType: strings.TrimSpace(c.Query("resource_type")), + Status: options.Status, + Keyword: options.Keyword, + Page: int32(options.Page), + PageSize: int32(options.PageSize), + }) + if err != nil { + response.ServerError(c, "获取道具商店列表失败") + return + } + items := make([]resourceShopItemDTO, 0, len(resp.GetItems())) + for _, item := range resp.GetItems() { + items = append(items, resourceShopItemFromProto(item)) + } + response.OK(c, response.Page{Items: items, Page: options.Page, PageSize: options.PageSize, Total: resp.GetTotal()}) +} + +func (h *Handler) UpsertResourceShopItems(c *gin.Context) { + var req resourceShopItemsRequest + if err := c.ShouldBindJSON(&req); err != nil { + response.BadRequest(c, "道具商店参数不正确") + return + } + resp, err := h.wallet.UpsertResourceShopItems(c.Request.Context(), req.upsertProto(c)) + if err != nil { + response.BadRequest(c, err.Error()) + return + } + items := make([]resourceShopItemDTO, 0, len(resp.GetItems())) + resourceIDs := make([]string, 0, len(resp.GetItems())) + for _, item := range resp.GetItems() { + dto := resourceShopItemFromProto(item) + items = append(items, dto) + resourceIDs = append(resourceIDs, fmt.Sprintf("%d", dto.ResourceID)) + } + h.auditLog(c, "upsert-resource-shop-items", "resource_shop_items", "batch", "success", strings.Join(resourceIDs, ",")) + response.OK(c, items) +} + +func (h *Handler) EnableResourceShopItem(c *gin.Context) { + h.setResourceShopItemStatus(c, "active") +} + +func (h *Handler) DisableResourceShopItem(c *gin.Context) { + h.setResourceShopItemStatus(c, "disabled") +} + func (h *Handler) setResourceStatus(c *gin.Context, status string) { resourceID, ok := parseID(c, "resource_id") if !ok { @@ -574,6 +626,27 @@ func (h *Handler) setGiftStatus(c *gin.Context, status string) { response.OK(c, gift) } +func (h *Handler) setResourceShopItemStatus(c *gin.Context, status string) { + shopItemID, ok := parseID(c, "shop_item_id") + if !ok { + return + } + resp, err := h.wallet.SetResourceShopItemStatus(c.Request.Context(), &walletv1.SetResourceShopItemStatusRequest{ + RequestId: middleware.CurrentRequestID(c), + AppCode: appctx.FromContext(c.Request.Context()), + ShopItemId: shopItemID, + Status: status, + OperatorUserId: actorID(c), + }) + if err != nil { + response.BadRequest(c, err.Error()) + return + } + item := resourceShopItemFromProto(resp.GetItem()) + h.auditLog(c, "set-resource-shop-item-status", "resource_shop_items", fmt.Sprintf("%d", item.ShopItemID), "success", status) + response.OK(c, item) +} + func (h *Handler) auditLog(c *gin.Context, action string, resource string, resourceID string, status string, detail string) { shared.OperationLogWithResourceID(c, h.audit, action, resource, resourceID, status, detail) } diff --git a/server/admin/internal/modules/resource/request.go b/server/admin/internal/modules/resource/request.go index b7575b4f..779b1963 100644 --- a/server/admin/internal/modules/resource/request.go +++ b/server/admin/internal/modules/resource/request.go @@ -150,6 +150,20 @@ type grantGroupRequest struct { Reason string `json:"reason"` } +type resourceShopItemsRequest struct { + Items []resourceShopItemRequest `json:"items"` +} + +type resourceShopItemRequest struct { + ShopItemID int64 `json:"shopItemId"` + ResourceID int64 `json:"resourceId"` + Status string `json:"status"` + DurationDays int32 `json:"durationDays"` + EffectiveFromMS int64 `json:"effectiveFromMs"` + EffectiveToMS int64 `json:"effectiveToMs"` + SortOrder int32 `json:"sortOrder"` +} + func (r resourceRequest) createProto(c *gin.Context) *walletv1.CreateResourceRequest { resourceType := normalizeResourceType(r.ResourceType) walletAssetType, walletAssetAmount := resourceWalletAsset(resourceType, r.Amount) @@ -347,6 +361,15 @@ func (r giftTypeItemRequest) upsertProto(c *gin.Context) *walletv1.UpsertGiftTyp }.upsertProto(c, r.TabKey) } +func (r resourceShopItemsRequest) upsertProto(c *gin.Context) *walletv1.UpsertResourceShopItemsRequest { + return &walletv1.UpsertResourceShopItemsRequest{ + RequestId: middleware.CurrentRequestID(c), + AppCode: appctx.FromContext(c.Request.Context()), + Items: resourceShopItemInputs(r.Items), + OperatorUserId: actorID(c), + } +} + func managerGrantEnabledOrDefault(value *bool) *bool { enabled := true if value != nil { @@ -380,6 +403,22 @@ func groupItemInputs(items []resourceGroupItemRequest) []*walletv1.ResourceGroup return out } +func resourceShopItemInputs(items []resourceShopItemRequest) []*walletv1.ResourceShopItemInput { + out := make([]*walletv1.ResourceShopItemInput, 0, len(items)) + for _, item := range items { + out = append(out, &walletv1.ResourceShopItemInput{ + ShopItemId: item.ShopItemID, + ResourceId: item.ResourceID, + Status: strings.TrimSpace(item.Status), + DurationDays: item.DurationDays, + EffectiveFromMs: item.EffectiveFromMS, + EffectiveToMs: item.EffectiveToMS, + SortOrder: item.SortOrder, + }) + } + return out +} + func normalizeResourceType(value string) string { return strings.ToLower(strings.TrimSpace(value)) } diff --git a/server/admin/internal/modules/resource/routes.go b/server/admin/internal/modules/resource/routes.go index 002d77b5..0ffa3719 100644 --- a/server/admin/internal/modules/resource/routes.go +++ b/server/admin/internal/modules/resource/routes.go @@ -42,4 +42,9 @@ func RegisterRoutes(protected *gin.RouterGroup, h *Handler) { protected.POST("/admin/resource-grants/resource", middleware.RequirePermission("resource-grant:create"), h.GrantResource) protected.POST("/admin/resource-grants/group", middleware.RequirePermission("resource-grant:create"), h.GrantResourceGroup) protected.GET("/admin/resource-grants", middleware.RequirePermission("resource-grant:view"), h.ListResourceGrants) + + protected.GET("/admin/resource-shop/items", middleware.RequirePermission("resource-shop:view"), h.ListResourceShopItems) + protected.POST("/admin/resource-shop/items", middleware.RequirePermission("resource-shop:update"), h.UpsertResourceShopItems) + protected.POST("/admin/resource-shop/items/:shop_item_id/enable", middleware.RequirePermission("resource-shop:update"), h.EnableResourceShopItem) + protected.POST("/admin/resource-shop/items/:shop_item_id/disable", middleware.RequirePermission("resource-shop:update"), h.DisableResourceShopItem) } diff --git a/server/admin/internal/repository/seed.go b/server/admin/internal/repository/seed.go index b2697376..86533e53 100644 --- a/server/admin/internal/repository/seed.go +++ b/server/admin/internal/repository/seed.go @@ -41,6 +41,8 @@ var defaultPermissions = []model.Permission{ {Name: "资源查看", Code: "resource:view", Kind: "menu"}, {Name: "资源创建", Code: "resource:create", Kind: "button"}, {Name: "资源更新", Code: "resource:update", Kind: "button"}, + {Name: "道具商店查看", Code: "resource-shop:view", Kind: "menu"}, + {Name: "道具商店更新", Code: "resource-shop:update", Kind: "button"}, {Name: "资源组查看", Code: "resource-group:view", Kind: "menu"}, {Name: "资源组创建", Code: "resource-group:create", Kind: "button"}, {Name: "资源组更新", Code: "resource-group:update", Kind: "button"}, @@ -228,10 +230,11 @@ func (s *Store) seedMenus() error { {ParentID: &appConfigID, Title: "内购配置", Code: "payment-recharge-products", Path: "/app-config/recharge-products", Icon: "wallet", PermissionCode: "payment-product:view", Sort: 69, Visible: true}, {ParentID: &appConfigID, Title: "版本管理", Code: "app-config-versions", Path: "/app-config/versions", Icon: "settings", PermissionCode: "app-version:view", Sort: 70, Visible: true}, {ParentID: &resourceID, Title: "资源列表", Code: "resource-list", Path: "/resources", Icon: "inventory", PermissionCode: "resource:view", Sort: 67, Visible: true}, - {ParentID: &resourceID, Title: "资源组列表", Code: "resource-group-list", Path: "/resource-groups", Icon: "category", PermissionCode: "resource-group:view", Sort: 68, Visible: true}, - {ParentID: &resourceID, Title: "礼物列表", Code: "gift-list", Path: "/gifts", Icon: "gift", PermissionCode: "gift:view", Sort: 69, Visible: true}, - {ParentID: &resourceID, Title: "资源赠送", Code: "resource-grant-list", Path: "/resource-grants", Icon: "send", PermissionCode: "resource-grant:view", Sort: 70, Visible: true}, - {ParentID: &resourceID, Title: "表情包列表", Code: "emoji-pack-list", Path: "/emoji-packs", Icon: "image", PermissionCode: "emoji-pack:view", Sort: 71, Visible: true}, + {ParentID: &resourceID, Title: "道具商店", Code: "resource-shop-list", Path: "/resource-shop", Icon: "storefront", PermissionCode: "resource-shop:view", Sort: 68, Visible: true}, + {ParentID: &resourceID, Title: "资源组列表", Code: "resource-group-list", Path: "/resource-groups", Icon: "category", PermissionCode: "resource-group:view", Sort: 69, Visible: true}, + {ParentID: &resourceID, Title: "礼物列表", Code: "gift-list", Path: "/gifts", Icon: "gift", PermissionCode: "gift:view", Sort: 70, Visible: true}, + {ParentID: &resourceID, Title: "资源赠送", Code: "resource-grant-list", Path: "/resource-grants", Icon: "send", PermissionCode: "resource-grant:view", Sort: 71, Visible: true}, + {ParentID: &resourceID, Title: "表情包列表", Code: "emoji-pack-list", Path: "/emoji-packs", Icon: "image", PermissionCode: "emoji-pack:view", Sort: 72, Visible: true}, {ParentID: &operationsID, Title: "金币流水", Code: "operation-coin-ledger", Path: "/operations/coin-ledger", Icon: "receipt", PermissionCode: "coin-ledger:view", Sort: 68, Visible: true}, {ParentID: &operationsID, Title: "金币增减", Code: "operation-coin-adjustment", Path: "/operations/coin-adjustments", Icon: "wallet", PermissionCode: "coin-adjustment:view", Sort: 69, Visible: true}, {ParentID: &operationsID, Title: "幸运礼物", Code: "lucky-gift", Path: "/operations/lucky-gift", Icon: "redeem", PermissionCode: "lucky-gift:view", Sort: 70, Visible: true}, @@ -468,6 +471,7 @@ func defaultRolePermissionCodes(code string) []string { "app-config:view", "app-config:update", "app-version:view", "app-version:create", "app-version:update", "app-version:delete", "resource:view", "resource:create", "resource:update", + "resource-shop:view", "resource-shop:update", "resource-group:view", "resource-group:create", "resource-group:update", "resource-grant:view", "resource-grant:create", "gift:view", "gift:create", "gift:update", "gift:status", @@ -492,7 +496,7 @@ func defaultRolePermissionCodes(code string) []string { "upload:create", } case "auditor": - return []string{"overview:view", "log:view", "user:view", "app-user:view", "level-config:view", "region-block:view", "room:view", "room-pin:view", "room-config:view", "app-config:view", "app-version:view", "resource:view", "resource-group:view", "resource-grant:view", "gift:view", "emoji-pack:view", "coin-ledger:view", "coin-adjustment:view", "lucky-gift:view", "payment-bill:view", "payment-product:view", "game:view", "daily-task:view", "achievement:view", "seven-day-checkin:view", "room-treasure:view", "red-packet:view", "vip-config:view", "role:view", "permission:view", "job:view"} + return []string{"overview:view", "log:view", "user:view", "app-user:view", "level-config:view", "region-block:view", "room:view", "room-pin:view", "room-config:view", "app-config:view", "app-version:view", "resource:view", "resource-shop:view", "resource-group:view", "resource-grant:view", "gift:view", "emoji-pack:view", "coin-ledger:view", "coin-adjustment:view", "lucky-gift:view", "payment-bill:view", "payment-product:view", "game:view", "daily-task:view", "achievement:view", "seven-day-checkin:view", "room-treasure:view", "red-packet:view", "vip-config:view", "role:view", "permission:view", "job:view"} case "readonly": return []string{ "overview:view", @@ -506,6 +510,7 @@ func defaultRolePermissionCodes(code string) []string { "app-config:view", "app-version:view", "resource:view", + "resource-shop:view", "resource-group:view", "resource-grant:view", "gift:view", @@ -550,6 +555,7 @@ func defaultRolePermissionMigrationCodes(code string) []string { "level-config:view", "level-config:update", "region-block:view", "region-block:update", "resource:view", "resource:create", "resource:update", + "resource-shop:view", "resource-shop:update", "resource-group:view", "resource-group:create", "resource-group:update", "resource-grant:view", "resource-grant:create", "gift:view", "gift:create", "gift:update", "gift:status", @@ -569,7 +575,7 @@ func defaultRolePermissionMigrationCodes(code string) []string { "vip-config:view", "vip-config:update", "vip-config:grant", } case "auditor", "readonly": - return []string{"level-config:view", "region-block:view", "room:view", "room-pin:view", "room-config:view", "app-config:view", "app-version:view", "resource:view", "resource-group:view", "resource-grant:view", "gift:view", "emoji-pack:view", "coin-seller:view", "coin-ledger:view", "coin-adjustment:view", "lucky-gift:view", "payment-bill:view", "payment-product:view", "game:view", "daily-task:view", "achievement:view", "seven-day-checkin:view", "room-treasure:view", "red-packet:view", "vip-config:view"} + return []string{"level-config:view", "region-block:view", "room:view", "room-pin:view", "room-config:view", "app-config:view", "app-version:view", "resource:view", "resource-shop:view", "resource-group:view", "resource-grant:view", "gift:view", "emoji-pack:view", "coin-seller:view", "coin-ledger:view", "coin-adjustment:view", "lucky-gift:view", "payment-bill:view", "payment-product:view", "game:view", "daily-task:view", "achievement:view", "seven-day-checkin:view", "room-treasure:view", "red-packet:view", "vip-config:view"} default: return nil } diff --git a/server/admin/migrations/026_resource_shop_navigation.sql b/server/admin/migrations/026_resource_shop_navigation.sql new file mode 100644 index 00000000..01f9a76f --- /dev/null +++ b/server/admin/migrations/026_resource_shop_navigation.sql @@ -0,0 +1,69 @@ +SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; + +SET @now_ms = CAST(UNIX_TIMESTAMP(UTC_TIMESTAMP(3)) * 1000 AS UNSIGNED); + +INSERT INTO admin_permissions (name, code, kind, description, created_at_ms, updated_at_ms) VALUES + ('道具商店查看', 'resource-shop:view', 'menu', '', @now_ms, @now_ms), + ('道具商店更新', 'resource-shop:update', 'button', '', @now_ms, @now_ms) +ON DUPLICATE KEY UPDATE + name = VALUES(name), + kind = VALUES(kind), + description = VALUES(description), + updated_at_ms = @now_ms; + +INSERT INTO admin_menus (parent_id, title, code, path, icon, permission_code, sort, visible, created_at_ms, updated_at_ms) VALUES + (NULL, '资源管理', 'resources', '', 'inventory', '', 67, TRUE, @now_ms, @now_ms) +ON DUPLICATE KEY UPDATE + title = VALUES(title), + path = VALUES(path), + icon = VALUES(icon), + permission_code = VALUES(permission_code), + sort = VALUES(sort), + visible = VALUES(visible), + updated_at_ms = @now_ms; + +INSERT INTO admin_menus (parent_id, title, code, path, icon, permission_code, sort, visible, created_at_ms, updated_at_ms) +SELECT parent.id, '道具商店', 'resource-shop-list', '/resource-shop', 'storefront', 'resource-shop:view', 68, TRUE, @now_ms, @now_ms +FROM admin_menus parent +WHERE parent.code = 'resources' +ON DUPLICATE KEY UPDATE + parent_id = VALUES(parent_id), + title = VALUES(title), + path = VALUES(path), + icon = VALUES(icon), + permission_code = VALUES(permission_code), + sort = VALUES(sort), + visible = VALUES(visible), + updated_at_ms = @now_ms; + +UPDATE admin_menus +SET sort = CASE code + WHEN 'resource-group-list' THEN 69 + WHEN 'gift-list' THEN 70 + WHEN 'resource-grant-list' THEN 71 + WHEN 'emoji-pack-list' THEN 72 + ELSE sort +END, +updated_at_ms = @now_ms +WHERE code IN ('resource-group-list', 'gift-list', 'resource-grant-list', 'emoji-pack-list'); + +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT admin_role.id, admin_permission.id +FROM admin_roles admin_role +JOIN admin_permissions admin_permission +WHERE admin_role.code = 'platform-admin' + AND admin_permission.code IN ('resource-shop:view', 'resource-shop:update'); + +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT admin_role.id, admin_permission.id +FROM admin_roles admin_role +JOIN admin_permissions admin_permission +WHERE admin_role.code = 'ops-admin' + AND admin_permission.code IN ('resource-shop:view', 'resource-shop:update'); + +INSERT IGNORE INTO admin_role_permissions (role_id, permission_id) +SELECT admin_role.id, admin_permission.id +FROM admin_roles admin_role +JOIN admin_permissions admin_permission +WHERE admin_role.code IN ('auditor', 'readonly') + AND admin_permission.code = 'resource-shop:view'; diff --git a/services/activity-service/internal/storage/mysql/lucky_gift_repository.go b/services/activity-service/internal/storage/mysql/lucky_gift_repository.go index bd40ee84..d76ae280 100644 --- a/services/activity-service/internal/storage/mysql/lucky_gift_repository.go +++ b/services/activity-service/internal/storage/mysql/lucky_gift_repository.go @@ -382,6 +382,7 @@ func (r *Repository) ExecuteLuckyGiftDraw(ctx context.Context, cmd domain.DrawCo drawID := idgen.New("lucky_draw") budgetSourcesJSON := luckyBudgetSourcesJSON(candidate) + rewardStatus := luckyInitialRewardStatus(candidate, stageFeedback) if err := r.applyLuckyDraw(ctx, tx, luckyApplyInput{ AppCode: appCode, DrawID: drawID, @@ -399,6 +400,7 @@ func (r *Repository) ExecuteLuckyGiftDraw(ctx context.Context, cmd domain.DrawCo Atmosphere: atmosphere, ActivityDay: activityDay, BudgetSourcesJSON: budgetSourcesJSON, + RewardStatus: rewardStatus, NowMS: nowMS, }); err != nil { return domain.DrawResult{}, err @@ -421,7 +423,7 @@ func (r *Repository) ExecuteLuckyGiftDraw(ctx context.Context, cmd domain.DrawCo ActivitySubsidyCoins: candidate.ActivityReward, EffectiveRewardCoins: candidate.effectiveReward(), BudgetSourcesJSON: budgetSourcesJSON, - RewardStatus: domain.StatusPending, + RewardStatus: rewardStatus, RTPWindowIndex: globalWindow.WindowIndex, GiftRTPWindowIndex: giftWindow.WindowIndex, GlobalBaseRTPPPM: luckyRTPPPM(globalWindow.WagerCoins, globalWindow.ActualPayoutCoins+candidate.BaseReward), @@ -449,6 +451,7 @@ type luckyApplyInput struct { Atmosphere luckyPool ActivityDay string BudgetSourcesJSON string + RewardStatus string NowMS int64 } @@ -564,12 +567,12 @@ func (r *Repository) applyLuckyDraw(ctx context.Context, tx *sql.Tx, input lucky input.Config.RuleVersion, input.ExperiencePool, input.GlobalWindow.WindowIndex, input.GiftWindow.WindowIndex, input.Candidate.TierID, input.Candidate.BaseReward, input.Candidate.RoomReward, input.Candidate.ActivityReward, input.Candidate.effectiveReward(), input.BudgetSourcesJSON, input.StageFeedback, input.Candidate.HighMultiplier, - string(candidateSnapshot), string(poolSnapshot), string(rtpSnapshot), domain.StatusPending, "", "", + string(candidateSnapshot), string(poolSnapshot), string(rtpSnapshot), input.RewardStatus, "", "", input.Command.PaidAtMS, input.NowMS, input.NowMS, ); err != nil { return err } - if input.Candidate.effectiveReward() > 0 || input.StageFeedback || input.Candidate.Presentation { + if luckyDrawNeedsOutbox(input.Candidate, input.StageFeedback) { payload, _ := json.Marshal(map[string]any{ "event_type": "lucky_gift_drawn", "event_id": "lucky_gift_drawn:" + input.DrawID, @@ -1592,19 +1595,15 @@ func luckyDedupeRewardCandidates(candidates []luckyCandidate) []luckyCandidate { } func luckyDesiredBaseReward(globalWindow, giftWindow luckyRTPWindow) int64 { - return minInt64(luckyWindowAveragePayout(globalWindow), luckyWindowAveragePayout(giftWindow)) + return minInt64(luckyWindowBaseDeficit(globalWindow), luckyWindowBaseDeficit(giftWindow)) } -func luckyWindowAveragePayout(window luckyRTPWindow) int64 { +func luckyWindowBaseDeficit(window luckyRTPWindow) int64 { remaining := window.remainingPayout() if remaining <= 0 { return 0 } - draws := window.remainingDraws() - if draws <= 0 { - return remaining - } - return remaining / draws + return remaining } func luckySplitWeighted(amount int64, config domain.Config) (int64, int64, int64) { @@ -1706,6 +1705,19 @@ func luckyBudgetSourcesJSON(candidate luckyCandidate) string { return string(raw) } +func luckyInitialRewardStatus(candidate luckyCandidate, stageFeedback bool) string { + // 没有金币返还、也没有房间展示副作用时,抽奖事实已经终态化;不能留给不存在的 outbox 消费。 + if !luckyDrawNeedsOutbox(candidate, stageFeedback) { + return domain.StatusGranted + } + return domain.StatusPending +} + +func luckyDrawNeedsOutbox(candidate luckyCandidate, stageFeedback bool) bool { + // outbox 只承载真实异步副作用:钱包入账、房间 IM 展示或阶段反馈展示。 + return candidate.effectiveReward() > 0 || stageFeedback || candidate.Presentation +} + func luckyCorrectionTier(reward int64) string { if reward == 0 { return "none" diff --git a/services/activity-service/internal/storage/mysql/lucky_gift_repository_test.go b/services/activity-service/internal/storage/mysql/lucky_gift_repository_test.go index a18c8de3..c42aba8a 100644 --- a/services/activity-service/internal/storage/mysql/lucky_gift_repository_test.go +++ b/services/activity-service/internal/storage/mysql/lucky_gift_repository_test.go @@ -58,13 +58,13 @@ func TestLuckyRTPWindowAddsCurrentSpendToTarget(t *testing.T) { } } -func TestLuckyAutoWeightedBaseCandidatesFollowsWindowAverage(t *testing.T) { +func TestLuckyAutoWeightedBaseCandidatesUsesCurrentWindowDeficit(t *testing.T) { candidates := []luckyCandidate{ {TierID: "none", BaseReward: 0}, {TierID: "half", BaseReward: 500}, {TierID: "one", BaseReward: 1000}, } - window := luckyRTPWindow{ControlDraws: 100, TargetPayoutCoins: 95_000} + window := luckyRTPWindow{ControlDraws: 100_000, TargetPayoutCoins: 950} weighted := luckyAutoWeightedBaseCandidates(candidates, 0, window, window) @@ -78,3 +78,56 @@ func TestLuckyAutoWeightedBaseCandidatesFollowsWindowAverage(t *testing.T) { t.Fatalf("expected 1x to carry 90%% probability, got %#v", weighted[1]) } } + +func TestLuckyAutoWeightedBaseCandidatesDoesNotDiluteDeficitAcrossLargeWindow(t *testing.T) { + candidates := []luckyCandidate{ + {TierID: "none", BaseReward: 0}, + {TierID: "rebate_0_5x", BaseReward: 5}, + {TierID: "rebate_1x", BaseReward: 10}, + } + window := luckyRTPWindow{ControlDraws: 100_000, TargetPayoutCoins: 9} + + weighted := luckyAutoWeightedBaseCandidates(candidates, 0, window, window) + + if len(weighted) != 2 { + t.Fatalf("expected deficit to interpolate between reward tiers, got %#v", weighted) + } + if weighted[0].TierID != "rebate_0_5x" || weighted[0].Weight != 200_000 { + t.Fatalf("expected 0.5x to carry 20%% probability, got %#v", weighted[0]) + } + if weighted[1].TierID != "rebate_1x" || weighted[1].Weight != 800_000 { + t.Fatalf("expected 1x to carry 80%% probability, got %#v", weighted[1]) + } +} + +func TestLuckyInitialRewardStatusGrantsZeroRewardWithoutOutbox(t *testing.T) { + if status := luckyInitialRewardStatus(luckyCandidate{TierID: "none"}, false); status != domain.StatusGranted { + t.Fatalf("zero reward without presentation should be granted, got %s", status) + } + if luckyDrawNeedsOutbox(luckyCandidate{TierID: "none"}, false) { + t.Fatalf("zero reward without presentation must not emit outbox") + } +} + +func TestLuckyInitialRewardStatusKeepsAsyncSideEffectsPending(t *testing.T) { + tests := []struct { + name string + candidate luckyCandidate + stageFeedback bool + }{ + {name: "wallet credit", candidate: luckyCandidate{TierID: "hit", BaseReward: 10}}, + {name: "presentation candidate", candidate: luckyCandidate{TierID: "stage", Presentation: true}}, + {name: "stage feedback", candidate: luckyCandidate{TierID: "none"}, stageFeedback: true}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if status := luckyInitialRewardStatus(test.candidate, test.stageFeedback); status != domain.StatusPending { + t.Fatalf("async side effect should stay pending, got %s", status) + } + if !luckyDrawNeedsOutbox(test.candidate, test.stageFeedback) { + t.Fatalf("async side effect should emit outbox") + } + }) + } +} diff --git a/services/gateway-service/configs/config.docker.yaml b/services/gateway-service/configs/config.docker.yaml index 9e7c1b9e..35dbfbec 100644 --- a/services/gateway-service/configs/config.docker.yaml +++ b/services/gateway-service/configs/config.docker.yaml @@ -87,7 +87,10 @@ tencent_im: sdk_app_id: 20036101 secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c" admin_identifier: "900100100" + admin_user_sig_ttl: "24h" user_sig_ttl: "24h" + endpoint: "adminapisgp.im.qcloud.com" + request_timeout: "5s" callback_url: "" callback_auth_token: "" diff --git a/services/gateway-service/configs/config.tencent.example.yaml b/services/gateway-service/configs/config.tencent.example.yaml index a76cb149..17a2706f 100644 --- a/services/gateway-service/configs/config.tencent.example.yaml +++ b/services/gateway-service/configs/config.tencent.example.yaml @@ -87,8 +87,13 @@ tencent_im: secret_key: "TENCENT_IM_SECRET_KEY" # 腾讯云 IM App 管理员账号;必须和 activity/room 服务端 REST 配置一致。 admin_identifier: "TENCENT_IM_ADMIN_IDENTIFIER" + # gateway 补偿导入 IM 账号时使用的 admin UserSig 有效期。 + admin_user_sig_ttl: "24h" # 客户端 UserSig 有效期;过短会增加刷新频率,过长会放大泄露窗口。 user_sig_ttl: "24h" + # 腾讯云 IM REST 地域入口;海外应用需要使用对应地域域名。 + endpoint: "adminapisgp.im.qcloud.com" + request_timeout: "5s" # 腾讯云 IM 控制台配置的回调地址,用于入群前、发言前等业务守卫。 callback_url: "https://api.example.com/api/v1/tencent-im/callback" # 腾讯云 IM 回调鉴权 Token,必须和控制台配置保持一致。 diff --git a/services/gateway-service/configs/config.yaml b/services/gateway-service/configs/config.yaml index 367f1df4..b83996a1 100644 --- a/services/gateway-service/configs/config.yaml +++ b/services/gateway-service/configs/config.yaml @@ -87,8 +87,11 @@ tencent_im: sdk_app_id: 20036101 secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c" admin_identifier: "900100100" + admin_user_sig_ttl: "24h" # 客户端 UserSig 有效期;线上建议 12h-7d,按登录刷新策略决定。 user_sig_ttl: "24h" + endpoint: "adminapisgp.im.qcloud.com" + request_timeout: "5s" # 腾讯云 IM 控制台回调 URL。需要公网可访问;本地为空表示暂不启用回调。 callback_url: "" # 腾讯云 IM 回调鉴权 Token。启用回调鉴权后必须填写。 diff --git a/services/gateway-service/internal/app/app.go b/services/gateway-service/internal/app/app.go index 5f03470d..fe67cae6 100644 --- a/services/gateway-service/internal/app/app.go +++ b/services/gateway-service/internal/app/app.go @@ -16,6 +16,7 @@ import ( "google.golang.org/grpc" "hyapp/pkg/grpcclient" "hyapp/pkg/tencentcos" + "hyapp/pkg/tencentim" "hyapp/services/gateway-service/internal/appconfig" "hyapp/services/gateway-service/internal/auth" "hyapp/services/gateway-service/internal/client" @@ -130,6 +131,24 @@ func New(cfg config.Config) (*App, error) { AdminIdentifier: cfg.TencentIM.AdminIdentifier, CallbackAuthToken: cfg.TencentIM.CallbackAuthToken, }, userProfileClient) + if cfg.TencentIM.SDKAppID > 0 && strings.TrimSpace(cfg.TencentIM.SecretKey) != "" { + imClient, err := tencentim.NewRESTClient(cfg.TencentIM.RESTConfig()) + if err != nil { + if appConfigReader != nil { + _ = appConfigReader.Close() + } + if leaderboardWalletDB != nil { + _ = leaderboardWalletDB.Close() + } + _ = roomConn.Close() + _ = userConn.Close() + _ = walletConn.Close() + _ = activityConn.Close() + _ = gameConn.Close() + return nil, err + } + handler.SetTencentIMAccountImporter(gatewayTencentIMAccountImporter{client: imClient}) + } handler.SetRoomQueryClient(roomQueryClient) handler.SetUserDeviceClient(userDeviceClient) handler.SetUserCountryQueryClient(userCountryQueryClient) @@ -374,6 +393,18 @@ func joinClose(left func() error, right func() error) func() error { } } +type gatewayTencentIMAccountImporter struct { + client *tencentim.RESTClient +} + +func (i gatewayTencentIMAccountImporter) ImportAccount(ctx context.Context, userID int64, nickname string, faceURL string) error { + return i.client.ImportAccount(ctx, tencentim.AccountProfile{ + UserID: userID, + Nick: nickname, + FaceURL: faceURL, + }) +} + // Run 启动 HTTP 服务。 func (a *App) Run() error { a.health.MarkHTTPServing() diff --git a/services/gateway-service/internal/client/wallet_client.go b/services/gateway-service/internal/client/wallet_client.go index 9dde6e5d..7b122833 100644 --- a/services/gateway-service/internal/client/wallet_client.go +++ b/services/gateway-service/internal/client/wallet_client.go @@ -26,6 +26,7 @@ type WalletClient interface { ListResources(ctx context.Context, req *walletv1.ListResourcesRequest) (*walletv1.ListResourcesResponse, error) GetResource(ctx context.Context, req *walletv1.GetResourceRequest) (*walletv1.GetResourceResponse, error) GetResourceGroup(ctx context.Context, req *walletv1.GetResourceGroupRequest) (*walletv1.GetResourceGroupResponse, error) + ListResourceShopItems(ctx context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) ListGiftConfigs(ctx context.Context, req *walletv1.ListGiftConfigsRequest) (*walletv1.ListGiftConfigsResponse, error) ListGiftTypeConfigs(ctx context.Context, req *walletv1.ListGiftTypeConfigsRequest) (*walletv1.ListGiftTypeConfigsResponse, error) GrantResource(ctx context.Context, req *walletv1.GrantResourceRequest) (*walletv1.ResourceGrantResponse, error) @@ -111,6 +112,10 @@ func (c *grpcWalletClient) GetResourceGroup(ctx context.Context, req *walletv1.G return c.client.GetResourceGroup(ctx, req) } +func (c *grpcWalletClient) ListResourceShopItems(ctx context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) { + return c.client.ListResourceShopItems(ctx, req) +} + func (c *grpcWalletClient) ListGiftConfigs(ctx context.Context, req *walletv1.ListGiftConfigsRequest) (*walletv1.ListGiftConfigsResponse, error) { return c.client.ListGiftConfigs(ctx, req) } diff --git a/services/gateway-service/internal/config/config.go b/services/gateway-service/internal/config/config.go index b3514a7e..0e330f5d 100644 --- a/services/gateway-service/internal/config/config.go +++ b/services/gateway-service/internal/config/config.go @@ -2,12 +2,14 @@ package config import ( "fmt" + "net/http" "strings" "time" "hyapp/pkg/configx" "hyapp/pkg/grpcclient" "hyapp/pkg/logx" + "hyapp/pkg/tencentim" "hyapp/pkg/tencentrtc" ) @@ -158,12 +160,39 @@ type TencentIMConfig struct { UserSigTTL time.Duration `yaml:"user_sig_ttl"` // AdminIdentifier 是服务端 REST 发播报和系统消息的管理员账号,回调用它识别服务端发送者。 AdminIdentifier string `yaml:"admin_identifier"` + // AdminUserSigTTL 控制 gateway 补偿导入 IM 账号时的 admin UserSig 有效期。 + AdminUserSigTTL time.Duration `yaml:"admin_user_sig_ttl"` + // Endpoint 是腾讯 IM REST 地域入口,例如 adminapisgp.im.qcloud.com。 + Endpoint string `yaml:"endpoint"` + // RequestTimeout 是 gateway 调腾讯 IM REST 的请求超时。 + RequestTimeout time.Duration `yaml:"request_timeout"` // CallbackURL 是在腾讯云 IM 控制台配置的服务端回调地址。 CallbackURL string `yaml:"callback_url"` // CallbackAuthToken 是腾讯云 IM 回调鉴权 token,只用于校验回调来源。 CallbackAuthToken string `yaml:"callback_auth_token"` } +// RESTConfig 转换成腾讯 IM REST client 配置,用于 /im/usersig 入口补偿导入账号。 +func (c TencentIMConfig) RESTConfig() tencentim.RESTConfig { + timeout := c.RequestTimeout + if timeout <= 0 { + timeout = 5 * time.Second + } + ttl := c.AdminUserSigTTL + if ttl <= 0 { + ttl = 24 * time.Hour + } + return tencentim.RESTConfig{ + SDKAppID: c.SDKAppID, + SecretKey: c.SecretKey, + AdminIdentifier: c.AdminIdentifier, + AdminUserSigTTL: ttl, + Endpoint: c.Endpoint, + GroupType: tencentim.DefaultGroupType, + HTTPClient: &http.Client{Timeout: timeout}, + } +} + // TencentRTCConfig 描述 gateway 给客户端签发腾讯 RTC 进房 UserSig 的配置。 type TencentRTCConfig struct { // Enabled 控制 RTC token endpoint 是否可以对外签发,配置缺失时必须 fail-closed。 @@ -277,7 +306,10 @@ func Default() Config { }, TencentIM: TencentIMConfig{ UserSigTTL: 24 * time.Hour, + AdminUserSigTTL: 24 * time.Hour, AdminIdentifier: "administrator", + RequestTimeout: 5 * time.Second, + Endpoint: tencentim.DefaultEndpoint, }, TencentRTC: TencentRTCConfig{ UserSigTTL: 2 * time.Hour, @@ -419,6 +451,16 @@ func (cfg *Config) Normalize() error { if cfg.TencentIM.AdminIdentifier == "" { cfg.TencentIM.AdminIdentifier = "administrator" } + cfg.TencentIM.Endpoint = strings.TrimSpace(cfg.TencentIM.Endpoint) + if cfg.TencentIM.Endpoint == "" { + cfg.TencentIM.Endpoint = tencentim.DefaultEndpoint + } + if cfg.TencentIM.AdminUserSigTTL <= 0 { + cfg.TencentIM.AdminUserSigTTL = 24 * time.Hour + } + if cfg.TencentIM.RequestTimeout <= 0 { + cfg.TencentIM.RequestTimeout = 5 * time.Second + } cfg.TencentIM.CallbackURL = strings.TrimSpace(cfg.TencentIM.CallbackURL) cfg.TencentIM.CallbackAuthToken = strings.TrimSpace(cfg.TencentIM.CallbackAuthToken) diff --git a/services/gateway-service/internal/transport/http/handler.go b/services/gateway-service/internal/transport/http/handler.go index aa13633f..dbbc8805 100644 --- a/services/gateway-service/internal/transport/http/handler.go +++ b/services/gateway-service/internal/transport/http/handler.go @@ -47,6 +47,7 @@ type Handler struct { appConfigReader appapi.ConfigReader leaderboardWalletDB *sql.DB tencentIM TencentIMConfig + tencentIMImporter TencentIMAccountImporter tencentRTC TencentRTCConfig objectUploader ObjectUploader authRateLimitConfig AuthRateLimitConfig @@ -64,6 +65,11 @@ type TencentIMConfig struct { CallbackAuthToken string } +// TencentIMAccountImporter 是 gateway 在签发 UserSig 前补偿导入账号的最小边界。 +type TencentIMAccountImporter interface { + ImportAccount(ctx context.Context, userID int64, nickname string, faceURL string) error +} + // TencentRTCConfig 是 gateway transport 层签发客户端腾讯 RTC 进房票据所需的配置。 type TencentRTCConfig struct { Enabled bool @@ -130,6 +136,11 @@ func (h *Handler) SetTencentRTC(config TencentRTCConfig) { h.tencentRTC = config } +// SetTencentIMAccountImporter 注入腾讯 IM 账号导入边界;nil 表示仅签发 UserSig,不做 REST 补偿。 +func (h *Handler) SetTencentIMAccountImporter(importer TencentIMAccountImporter) { + h.tencentIMImporter = importer +} + // SetObjectUploader 注入对象存储上传实现;生产环境使用腾讯云 COS。 func (h *Handler) SetObjectUploader(uploader ObjectUploader) { h.objectUploader = uploader @@ -299,11 +310,28 @@ func (h *Handler) issueTencentIMUserSig(writer http.ResponseWriter, request *htt SecretKey: h.tencentIM.SecretKey, TTL: h.tencentIM.UserSigTTL, }, tencentim.FormatUserID(userID), time.Now().UTC()) + if err != nil { + if h.tencentIMImporter != nil { + _ = h.tencentIMImporter.ImportAccount(request.Context(), userID, user.GetUsername(), user.GetAvatar()) + result, err = tencentim.GenerateUserSig(tencentim.UserSigConfig{ + SDKAppID: h.tencentIM.SDKAppID, + SecretKey: h.tencentIM.SecretKey, + TTL: h.tencentIM.UserSigTTL, + }, tencentim.FormatUserID(userID), time.Now().UTC()) + } + } if err != nil { // 缺少 SDKAppID 或 SecretKey 属于服务端配置错误,不能返回假票据给客户端。 httpkit.WriteError(writer, request, http.StatusInternalServerError, httpkit.CodeInternalError, "internal error") return } + if h.tencentIMImporter != nil { + if err := h.tencentIMImporter.ImportAccount(request.Context(), userID, user.GetUsername(), user.GetAvatar()); err != nil { + // UserSig 只证明签名有效;账号未导入时 SDK C2C 仍会失败,因此这里必须 fail-closed。 + httpkit.WriteError(writer, request, http.StatusInternalServerError, httpkit.CodeInternalError, "internal error") + return + } + } joinGroups, ok := imJoinGroupsForUser(app, user.GetRegionId()) if !ok { diff --git a/services/gateway-service/internal/transport/http/httproutes/router.go b/services/gateway-service/internal/transport/http/httproutes/router.go index b07ae07f..be13c43e 100644 --- a/services/gateway-service/internal/transport/http/httproutes/router.go +++ b/services/gateway-service/internal/transport/http/httproutes/router.go @@ -46,6 +46,7 @@ type AppHandlers struct { ListAppBanners http.HandlerFunc GetAppVersion http.HandlerFunc GetResourceGroup http.HandlerFunc + ListResourceShopItems http.HandlerFunc ListGifts http.HandlerFunc ListGiftTabs http.HandlerFunc ListEmojiPacks http.HandlerFunc @@ -250,6 +251,7 @@ func (r routes) registerAppRoutes() { r.public("/app/banners", "", h.ListAppBanners) r.public("/app/version", http.MethodGet, h.GetAppVersion) r.public("/resource-groups/{group_id}", "", h.GetResourceGroup) + r.public("/resource-shop/items", http.MethodGet, h.ListResourceShopItems) r.public("/gifts", "", h.ListGifts) r.public("/gift-tabs", http.MethodGet, h.ListGiftTabs) r.public("/emoji-packs", http.MethodGet, h.ListEmojiPacks) diff --git a/services/gateway-service/internal/transport/http/resourceapi/handler.go b/services/gateway-service/internal/transport/http/resourceapi/handler.go index 09712291..3a94ac79 100644 --- a/services/gateway-service/internal/transport/http/resourceapi/handler.go +++ b/services/gateway-service/internal/transport/http/resourceapi/handler.go @@ -28,6 +28,10 @@ func (h *Handler) GetResourceGroup(writer http.ResponseWriter, request *http.Req h.getResourceGroup(writer, request) } +func (h *Handler) ListResourceShopItems(writer http.ResponseWriter, request *http.Request) { + h.listResourceShopItems(writer, request) +} + func (h *Handler) ListGifts(writer http.ResponseWriter, request *http.Request) { h.listGifts(writer, request) } diff --git a/services/gateway-service/internal/transport/http/resourceapi/resource_handler.go b/services/gateway-service/internal/transport/http/resourceapi/resource_handler.go index 82c02754..a4863aab 100644 --- a/services/gateway-service/internal/transport/http/resourceapi/resource_handler.go +++ b/services/gateway-service/internal/transport/http/resourceapi/resource_handler.go @@ -69,6 +69,20 @@ type resourceGroupData struct { UpdatedAtMS int64 `json:"updated_at_ms"` } +type resourceShopItemData struct { + ShopItemID int64 `json:"shop_item_id"` + ResourceID int64 `json:"resource_id"` + Resource resourceData `json:"resource"` + Status string `json:"status"` + DurationDays int32 `json:"duration_days"` + PriceType string `json:"price_type"` + CoinPrice int64 `json:"coin_price"` + EffectiveFromMS int64 `json:"effective_from_ms"` + EffectiveToMS int64 `json:"effective_to_ms"` + SortOrder int32 `json:"sort_order"` + UpdatedAtMS int64 `json:"updated_at_ms"` +} + type giftConfigData struct { GiftID string `json:"gift_id"` ResourceID int64 `json:"resource_id"` @@ -196,6 +210,36 @@ func (h *Handler) getResourceGroup(writer http.ResponseWriter, request *http.Req httpkit.WriteOK(writer, request, group) } +func (h *Handler) listResourceShopItems(writer http.ResponseWriter, request *http.Request) { + if h.walletClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + page, pageSize, ok := resourcePage(request) + if !ok { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + resp, err := h.walletClient.ListResourceShopItems(request.Context(), &walletv1.ListResourceShopItemsRequest{ + RequestId: httpkit.RequestIDFromContext(request.Context()), + AppCode: appcode.FromContext(request.Context()), + ResourceType: strings.TrimSpace(request.URL.Query().Get("resource_type")), + Keyword: strings.TrimSpace(request.URL.Query().Get("keyword")), + Page: page, + PageSize: pageSize, + ActiveOnly: true, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + items := make([]resourceShopItemData, 0, len(resp.GetItems())) + for _, item := range resp.GetItems() { + items = append(items, resourceShopItemFromProto(item)) + } + httpkit.WriteOK(writer, request, map[string]any{"items": items, "total": resp.GetTotal(), "page": page, "page_size": pageSize}) +} + func (h *Handler) listGifts(writer http.ResponseWriter, request *http.Request) { if h.walletClient == nil { httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") @@ -463,6 +507,25 @@ func resourcePointerFromProto(item *walletv1.Resource) *resourceData { return &data } +func resourceShopItemFromProto(item *walletv1.ResourceShopItem) resourceShopItemData { + if item == nil { + return resourceShopItemData{} + } + return resourceShopItemData{ + ShopItemID: item.GetShopItemId(), + ResourceID: item.GetResourceId(), + Resource: resourceFromProto(item.GetResource()), + Status: item.GetStatus(), + DurationDays: item.GetDurationDays(), + PriceType: item.GetPriceType(), + CoinPrice: item.GetCoinPrice(), + EffectiveFromMS: item.GetEffectiveFromMs(), + EffectiveToMS: item.GetEffectiveToMs(), + SortOrder: item.GetSortOrder(), + UpdatedAtMS: item.GetUpdatedAtMs(), + } +} + func giftFromProto(gift *walletv1.GiftConfig) giftConfigData { if gift == nil { return giftConfigData{} diff --git a/services/gateway-service/internal/transport/http/response_test.go b/services/gateway-service/internal/transport/http/response_test.go index e911cbaf..9492d7b8 100644 --- a/services/gateway-service/internal/transport/http/response_test.go +++ b/services/gateway-service/internal/transport/http/response_test.go @@ -272,6 +272,20 @@ type fakeUserProfileClient struct { regionByUserID map[int64]int64 } +type fakeTencentIMAccountImporter struct { + lastUserID int64 + lastNickname string + lastFaceURL string + err error +} + +func (f *fakeTencentIMAccountImporter) ImportAccount(_ context.Context, userID int64, nickname string, faceURL string) error { + f.lastUserID = userID + f.lastNickname = nickname + f.lastFaceURL = faceURL + return f.err +} + type fakeUserIdentityClient struct { lastResolve *userv1.ResolveDisplayUserIDRequest resolveByDisplay map[string]int64 @@ -383,6 +397,8 @@ type fakeWalletClient struct { resourcesByID map[int64]*walletv1.Resource lastGetResourceGroup *walletv1.GetResourceGroupRequest resourceGroupsByID map[int64]*walletv1.ResourceGroup + lastResourceShop *walletv1.ListResourceShopItemsRequest + resourceShopResp *walletv1.ListResourceShopItemsResponse lastListGiftConfigs *walletv1.ListGiftConfigsRequest listGiftConfigsResp *walletv1.ListGiftConfigsResponse lastListGiftTypes *walletv1.ListGiftTypeConfigsRequest @@ -1211,6 +1227,17 @@ func (f *fakeWalletClient) GetResourceGroup(_ context.Context, req *walletv1.Get return &walletv1.GetResourceGroupResponse{}, nil } +func (f *fakeWalletClient) ListResourceShopItems(_ context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) { + f.lastResourceShop = req + if f.err != nil { + return nil, f.err + } + if f.resourceShopResp != nil { + return f.resourceShopResp, nil + } + return &walletv1.ListResourceShopItemsResponse{}, nil +} + func (f *fakeWalletClient) ListGiftConfigs(_ context.Context, req *walletv1.ListGiftConfigsRequest) (*walletv1.ListGiftConfigsResponse, error) { f.lastListGiftConfigs = req if f.err != nil { @@ -3474,6 +3501,80 @@ func TestListEmojiPacksFiltersRegionAndReturnsAssets(t *testing.T) { } } +func TestListResourceShopItemsReturnsActiveSaleItems(t *testing.T) { + walletClient := &fakeWalletClient{ + resourceShopResp: &walletv1.ListResourceShopItemsResponse{ + Items: []*walletv1.ResourceShopItem{ + { + ShopItemId: 9001, + ResourceId: 7001, + Status: "active", + DurationDays: 3, + PriceType: "coin", + CoinPrice: 300, + EffectiveFromMs: 1_700_000_000_000, + EffectiveToMs: 1_700_086_400_000, + SortOrder: 10, + Resource: &walletv1.Resource{ + ResourceId: 7001, + ResourceCode: "avatar_frame_gold", + ResourceType: "avatar_frame", + Name: "Gold Frame", + Status: "active", + AssetUrl: "https://cdn.example/frame.png", + PreviewUrl: "https://cdn.example/frame-preview.png", + PriceType: "coin", + CoinPrice: 100, + }, + }, + }, + Total: 1, + }, + } + handler := NewHandlerWithClients(&fakeRoomClient{}, nil, nil, &fakeUserProfileClient{}) + handler.SetWalletClient(walletClient) + router := handler.Routes(auth.NewVerifier("secret")) + + request := httptest.NewRequest(http.MethodGet, "/api/v1/resource-shop/items?resource_type=avatar_frame&page=1&page_size=10", nil) + recorder := httptest.NewRecorder() + router.ServeHTTP(recorder, request) + if recorder.Code != http.StatusOK { + t.Fatalf("resource shop status mismatch: got %d body=%s", recorder.Code, recorder.Body.String()) + } + var envelope struct { + Code string `json:"code"` + Data struct { + Items []struct { + ShopItemID int64 `json:"shop_item_id"` + ResourceID int64 `json:"resource_id"` + DurationDays int32 `json:"duration_days"` + CoinPrice int64 `json:"coin_price"` + EffectiveFromMS int64 `json:"effective_from_ms"` + Resource struct { + ResourceCode string `json:"resource_code"` + ResourceType string `json:"resource_type"` + CoinPrice int64 `json:"coin_price"` + PreviewURL string `json:"preview_url"` + } `json:"resource"` + } `json:"items"` + Total int64 `json:"total"` + } `json:"data"` + } + if err := json.NewDecoder(recorder.Body).Decode(&envelope); err != nil { + t.Fatalf("decode resource shop failed: %v", err) + } + if walletClient.lastResourceShop == nil || walletClient.lastResourceShop.GetResourceType() != "avatar_frame" || !walletClient.lastResourceShop.GetActiveOnly() || walletClient.lastResourceShop.GetPageSize() != 10 { + t.Fatalf("resource shop request mismatch: %+v", walletClient.lastResourceShop) + } + if envelope.Code != httpkit.CodeOK || envelope.Data.Total != 1 || len(envelope.Data.Items) != 1 { + t.Fatalf("resource shop envelope mismatch: %+v", envelope) + } + first := envelope.Data.Items[0] + if first.ShopItemID != 9001 || first.DurationDays != 3 || first.CoinPrice != 300 || first.Resource.ResourceCode != "avatar_frame_gold" || first.Resource.CoinPrice != 100 || first.Resource.PreviewURL == "" { + t.Fatalf("resource shop item mismatch: %+v", first) + } +} + func TestListGiftTabsReturnsActiveTypeConfigs(t *testing.T) { walletClient := &fakeWalletClient{ listGiftConfigsResp: &walletv1.ListGiftConfigsResponse{ @@ -4545,6 +4646,40 @@ func TestTencentIMUserSigUsesAuthenticatedUserIDAndFailsClosed(t *testing.T) { assertEnvelope(t, missingConfigRecorder, http.StatusInternalServerError, httpkit.CodeInternalError, "req-usersig-missing") } +func TestTencentIMUserSigEnsuresImportedAccount(t *testing.T) { + profileClient := &fakeUserProfileClient{regionID: 1001} + importer := &fakeTencentIMAccountImporter{} + handler := NewHandlerWithConfig(&fakeRoomClient{}, nil, nil, nil, TencentIMConfig{ + SDKAppID: 1400000000, + SecretKey: "secret", + UserSigTTL: time.Hour, + }, profileClient) + handler.SetTencentIMAccountImporter(importer) + router := handler.Routes(auth.NewVerifier("secret")) + + request := httptest.NewRequest(http.MethodGet, "/api/v1/im/usersig", nil) + request.Header.Set("Authorization", "Bearer "+signGatewayToken(t, "secret", 42)) + request.Header.Set("X-Request-ID", "req-usersig-import") + recorder := httptest.NewRecorder() + router.ServeHTTP(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got %d body=%s", recorder.Code, recorder.Body.String()) + } + if importer.lastUserID != 42 || importer.lastNickname != "hy" || importer.lastFaceURL != "https://cdn.example/avatar.png" { + t.Fatalf("unexpected imported account: %+v", importer) + } + + importer.err = errors.New("tencent unavailable") + failedRequest := httptest.NewRequest(http.MethodGet, "/api/v1/im/usersig", nil) + failedRequest.Header.Set("Authorization", "Bearer "+signGatewayToken(t, "secret", 42)) + failedRequest.Header.Set("X-Request-ID", "req-usersig-import-failed") + failedRecorder := httptest.NewRecorder() + router.ServeHTTP(failedRecorder, failedRequest) + + assertEnvelope(t, failedRecorder, http.StatusInternalServerError, httpkit.CodeInternalError, "req-usersig-import-failed") +} + func TestTencentRTCTokenUsesPresenceGuardAndInternalUserID(t *testing.T) { previousNow := roomapi.TimeNow roomapi.TimeNow = func() time.Time { return time.Unix(1_700_000_000, 0) } diff --git a/services/gateway-service/internal/transport/http/router.go b/services/gateway-service/internal/transport/http/router.go index 04306a55..baaf3b15 100644 --- a/services/gateway-service/internal/transport/http/router.go +++ b/services/gateway-service/internal/transport/http/router.go @@ -134,6 +134,7 @@ func (h *Handler) Routes(jwtVerifier *auth.Verifier) http.Handler { ListAppBanners: appAPI.ListAppBanners, GetAppVersion: appAPI.GetAppVersion, GetResourceGroup: resourceAPI.GetResourceGroup, + ListResourceShopItems: resourceAPI.ListResourceShopItems, ListGifts: resourceAPI.ListGifts, ListGiftTabs: resourceAPI.ListGiftTabs, ListEmojiPacks: resourceAPI.ListEmojiPacks, diff --git a/services/user-service/configs/config.docker.yaml b/services/user-service/configs/config.docker.yaml index 478acf99..cb2243ef 100644 --- a/services/user-service/configs/config.docker.yaml +++ b/services/user-service/configs/config.docker.yaml @@ -76,13 +76,13 @@ activity_service: addr: "activity-service:13006" request_timeout_ms: 3000 tencent_im: - # Docker 本地默认关闭真实腾讯 IM 账号踢下线;开启后必须和 gateway/room 使用同一个 IM 应用。 - enabled: false - sdk_app_id: 0 - secret_key: "" - admin_identifier: "administrator" + # Docker 本地联调腾讯 IM 账号导入和封禁踢下线;必须和 gateway/room 使用同一个 IM 应用。 + enabled: true + sdk_app_id: 20036101 + secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c" + admin_identifier: "900100100" admin_user_sig_ttl_sec: 86400 - endpoint: "console.tim.qq.com" + endpoint: "adminapisgp.im.qcloud.com" request_timeout_ms: 5000 jwt: issuer: "hyapp" diff --git a/services/user-service/configs/config.tencent.example.yaml b/services/user-service/configs/config.tencent.example.yaml index 9f74b567..80dcddcf 100644 --- a/services/user-service/configs/config.tencent.example.yaml +++ b/services/user-service/configs/config.tencent.example.yaml @@ -79,7 +79,7 @@ activity_service: addr: "activity-service.internal:13006" request_timeout_ms: 3000 tencent_im: - # 线上开启后,用户封禁会同步调用腾讯云 IM 账号踢下线。 + # 线上开启后,新用户会导入腾讯云 IM,用户封禁会同步调用腾讯云 IM 账号踢下线。 enabled: true # 必须和 gateway-service/room-service 使用同一个 IM 应用。 sdk_app_id: 1400000000 diff --git a/services/user-service/configs/config.yaml b/services/user-service/configs/config.yaml index baf0b647..9b55eb5c 100644 --- a/services/user-service/configs/config.yaml +++ b/services/user-service/configs/config.yaml @@ -76,13 +76,13 @@ activity_service: addr: "127.0.0.1:13006" request_timeout_ms: 3000 tencent_im: - # 本地默认关闭真实腾讯 IM 账号踢下线;开启后必须和 gateway/room 使用同一个 IM 应用。 - enabled: false - sdk_app_id: 0 - secret_key: "" - admin_identifier: "administrator" + # 本地联调腾讯 IM 账号导入和封禁踢下线;必须和 gateway/room 使用同一个 IM 应用。 + enabled: true + sdk_app_id: 20036101 + secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c" + admin_identifier: "900100100" admin_user_sig_ttl_sec: 86400 - endpoint: "console.tim.qq.com" + endpoint: "adminapisgp.im.qcloud.com" request_timeout_ms: 5000 jwt: issuer: "hyapp" diff --git a/services/user-service/internal/app/app.go b/services/user-service/internal/app/app.go index dbc98839..d3e2e257 100644 --- a/services/user-service/internal/app/app.go +++ b/services/user-service/internal/app/app.go @@ -136,6 +136,7 @@ func New(cfg config.Config) (*App, error) { } } var imLoginKicker userservice.IMLoginKicker + var imAccountImporter authservice.IMAccountImporter if cfg.TencentIM.Enabled { imClient, err := tencentim.NewRESTClient(cfg.TencentIM.RESTConfig()) if err != nil { @@ -147,6 +148,7 @@ func New(cfg config.Config) (*App, error) { return nil, err } imLoginKicker = imClient + imAccountImporter = tencentIMAccountImporter{client: imClient} } var roomConn *grpc.ClientConn var roomEvictor userservice.RoomEvictor @@ -212,6 +214,7 @@ func New(cfg config.Config) (*App, error) { authservice.WithIPDecisionCache(ipDecisionCache), authservice.WithIPGeoProviders(authservice.BuildIPGeoProviders(cfg.LoginRisk.Providers)), authservice.WithRegistrationRewardIssuer(registrationRewardIssuer), + authservice.WithIMAccountImporter(imAccountImporter), ) // user service 负责用户主状态和 display_user_id/靓号用例,不进入房间高频流程。 userSvc := userservice.New(userRepo, @@ -503,6 +506,18 @@ func (a *App) closeHealthHTTP() { _ = a.healthHTTP.Close(ctx) } +type tencentIMAccountImporter struct { + client *tencentim.RESTClient +} + +func (i tencentIMAccountImporter) ImportAccount(ctx context.Context, userID int64, nickname string, faceURL string) error { + return i.client.ImportAccount(ctx, tencentim.AccountProfile{ + UserID: userID, + Nick: nickname, + FaceURL: faceURL, + }) +} + func newMQConsumers(cfg config.Config, inviteSvc *inviteservice.Service, micTimeSvc *mictimeservice.Service) ([]*rocketmqx.Consumer, error) { consumers := make([]*rocketmqx.Consumer, 0, 2) if cfg.InviteRechargeWorker.Enabled && cfg.RocketMQ.WalletOutbox.Enabled { diff --git a/services/user-service/internal/service/auth/im_account.go b/services/user-service/internal/service/auth/im_account.go new file mode 100644 index 00000000..86992638 --- /dev/null +++ b/services/user-service/internal/service/auth/im_account.go @@ -0,0 +1,26 @@ +package auth + +import ( + "context" + "log/slog" + "strings" + + "hyapp/pkg/appcode" + "hyapp/pkg/logx" + userdomain "hyapp/services/user-service/internal/domain/user" +) + +func (s *Service) importIMAccountAfterCommit(ctx context.Context, user userdomain.User, meta Meta) { + if s.imAccountImporter == nil || user.UserID <= 0 { + return + } + if err := s.imAccountImporter.ImportAccount(ctx, user.UserID, strings.TrimSpace(user.Username), strings.TrimSpace(user.Avatar)); err != nil { + // 用户创建事务已经提交;账号导入失败不能回滚用户,只能依赖 /im/usersig 兜底补偿和日志排查。 + logx.Warn(logx.With(ctx, slog.String("request_id", meta.RequestID), slog.String("app_code", appcode.Normalize(meta.AppCode))), + "im_account_import_failed", + slog.String("component", "user_auth"), + slog.Int64("user_id", user.UserID), + slog.String("error", err.Error()), + ) + } +} diff --git a/services/user-service/internal/service/auth/quick_account.go b/services/user-service/internal/service/auth/quick_account.go index 74cda293..c170aa1d 100644 --- a/services/user-service/internal/service/auth/quick_account.go +++ b/services/user-service/internal/service/auth/quick_account.go @@ -99,6 +99,7 @@ func (s *Service) QuickCreateAccount(ctx context.Context, password string, regis if tokenErr != nil { return authdomain.Token{}, tokenErr } + s.importIMAccountAfterCommit(ctx, user, meta) s.enqueueLoginIPRiskJob(ctx, meta, token, "account", registration.Platform, registration.Language, registration.Timezone) return token, nil } diff --git a/services/user-service/internal/service/auth/service.go b/services/user-service/internal/service/auth/service.go index 6187ff90..290fa339 100644 --- a/services/user-service/internal/service/auth/service.go +++ b/services/user-service/internal/service/auth/service.go @@ -110,6 +110,11 @@ type RegistrationRewardIssuer interface { IssueRegistrationReward(ctx context.Context, command RegistrationRewardCommand) error } +// IMAccountImporter 把 user-service 用户导入腾讯 IM 账号体系。 +type IMAccountImporter interface { + ImportAccount(ctx context.Context, userID int64, nickname string, faceURL string) error +} + // Config 保存认证底座需要的稳定参数。 type Config struct { // Issuer 写入 access token 的 iss claim。 @@ -194,6 +199,8 @@ type Service struct { ipGeoProviders []IPGeoProvider // registrationRewardIssuer 在注册事务提交后异步式触发奖励;失败只记录日志,不回滚用户注册。 registrationRewardIssuer RegistrationRewardIssuer + // imAccountImporter 在用户创建成功后补齐腾讯 IM 账号;UserSig 入口仍会兜底补偿历史账号。 + imAccountImporter IMAccountImporter } // Option 调整 auth service 的依赖和策略。 @@ -275,6 +282,15 @@ func WithRegistrationRewardIssuer(issuer RegistrationRewardIssuer) Option { } } +// WithIMAccountImporter 注入腾讯 IM 账号导入边界;nil 表示当前环境不触发真实 IM 副作用。 +func WithIMAccountImporter(importer IMAccountImporter) Option { + return func(s *Service) { + if importer != nil { + s.imAccountImporter = importer + } + } +} + // WithAuthRepository 注入纯认证持久化实现。 func WithAuthRepository(repository AuthRepository) Option { return func(s *Service) { diff --git a/services/user-service/internal/service/auth/service_test.go b/services/user-service/internal/service/auth/service_test.go index 5c0d04af..77a8d94f 100644 --- a/services/user-service/internal/service/auth/service_test.go +++ b/services/user-service/internal/service/auth/service_test.go @@ -78,6 +78,19 @@ func (a sequenceDisplayUserIDAllocator) NextDisplayUserID(_ int64, attempt int) return a.values[attempt] } +type fakeIMAccountImporter struct { + userID int64 + nickname string + faceURL string +} + +func (f *fakeIMAccountImporter) ImportAccount(_ context.Context, userID int64, nickname string, faceURL string) error { + f.userID = userID + f.nickname = nickname + f.faceURL = faceURL + return nil +} + func newUserService(repository *mysqltest.Repository, options ...userservice.Option) *userservice.Service { base := []userservice.Option{ userservice.WithIdentityRepository(repository), @@ -230,7 +243,8 @@ func TestQuickCreateAccountCreatesCompletedPasswordLogin(t *testing.T) { repository := mysqltest.NewRepository(t) seedCountry(t, repository, "SG") now := time.UnixMilli(2000) - svc := newAuthService(repository, &now, []int64{900011}, []string{"100011"}) + imImporter := &fakeIMAccountImporter{} + svc := newAuthService(repository, &now, []int64{900011}, []string{"100011"}, authservice.WithIMAccountImporter(imImporter)) token, err := svc.QuickCreateAccount(ctx, "secret-pass", authdomain.ThirdPartyRegistration{ Username: "Lingxian Test", @@ -259,6 +273,9 @@ func TestQuickCreateAccountCreatesCompletedPasswordLogin(t *testing.T) { if user.Username != "Lingxian Test" || user.Country != "SG" || !user.ProfileCompleted { t.Fatalf("quick user profile mismatch: %+v", user) } + if imImporter.userID != 900011 || imImporter.nickname != "Lingxian Test" || imImporter.faceURL != "https://cdn.example/avatar.png" { + t.Fatalf("quick account must import IM account: %+v", imImporter) + } loginToken, err := svc.LoginPassword(ctx, token.DisplayUserID, "secret-pass", "quick-dev", authservice.Meta{RequestID: "req-quick-login", AppCode: "lalu"}) if err != nil { @@ -521,7 +538,8 @@ func TestThirdPartyRegisterStoresRegistrationProfile(t *testing.T) { repository := mysqltest.NewRepository(t) seedCountry(t, repository, "CN") now := time.UnixMilli(1000) - svc := newAuthService(repository, &now, []int64{900003}, []string{"100003"}) + imImporter := &fakeIMAccountImporter{} + svc := newAuthService(repository, &now, []int64{900003}, []string{"100003"}, authservice.WithIMAccountImporter(imImporter)) if err := repository.CreateUserWithIdentity(ctx, userdomain.User{ AppCode: "lalu", UserID: 800001, @@ -591,6 +609,9 @@ func TestThirdPartyRegisterStoresRegistrationProfile(t *testing.T) { if user.Avatar == "" || user.BirthDate != "2000-01-02" || user.RegisterSource != "campaign-a" || user.RegisterInstallChannel != "app_store" || user.RegisterCampaign != "spring_launch" || user.RegisterPlatform != "ios" || user.Language != "zh-CN" || user.Timezone != "Asia/Shanghai" { t.Fatalf("registration profile fields mismatch: %+v", user) } + if imImporter.userID != token.UserID || imImporter.nickname != "hy" || imImporter.faceURL != "https://cdn.example/avatar.png" { + t.Fatalf("third-party registration must import IM account: %+v", imImporter) + } } func TestThirdPartyRegisterAssignsRegionAndExistingLoginKeepsOriginalCountry(t *testing.T) { diff --git a/services/user-service/internal/service/auth/third_party.go b/services/user-service/internal/service/auth/third_party.go index 6f7ac5f6..6e38e41c 100644 --- a/services/user-service/internal/service/auth/third_party.go +++ b/services/user-service/internal/service/auth/third_party.go @@ -174,6 +174,7 @@ func (s *Service) createThirdPartyUser(ctx context.Context, provider string, pro if tokenErr != nil { return authdomain.Token{}, false, tokenErr } + s.importIMAccountAfterCommit(ctx, user, meta) s.enqueueLoginIPRiskJob(ctx, meta, token, normalizeThirdPartyChannel(provider), registration.Platform, registration.Language, registration.Timezone) s.issueRegistrationRewardAfterCommit(ctx, registration.AppCode, user.UserID, meta) return token, true, nil diff --git a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql index c52e879a..3ebb0440 100644 --- a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql +++ b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql @@ -405,6 +405,24 @@ CREATE TABLE IF NOT EXISTS resource_group_items ( KEY idx_resource_group_items_group (app_code, group_id, sort_order) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源分组明细表'; +CREATE TABLE IF NOT EXISTS resource_shop_items ( + app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离', + shop_item_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '道具商店条目 ID', + resource_id BIGINT NOT NULL COMMENT '售卖资源 ID', + status VARCHAR(32) NOT NULL COMMENT '业务状态', + duration_days INT NOT NULL COMMENT '售卖天数,只允许 1/3/7', + effective_from_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效开始时间,UTC epoch ms,0 表示立即生效', + effective_to_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效结束时间,UTC epoch ms,0 表示长期有效', + sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前', + created_by_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建人用户 ID', + updated_by_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新人用户 ID', + created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', + updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', + UNIQUE KEY uk_resource_shop_items_resource (app_code, resource_id), + KEY idx_resource_shop_items_status_sort (app_code, status, sort_order), + KEY idx_resource_shop_items_effective (app_code, status, effective_from_ms, effective_to_ms) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='道具商店售卖资源表'; + CREATE TABLE IF NOT EXISTS gift_type_configs ( app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离', type_code VARCHAR(32) NOT NULL COMMENT '礼物类型编码,供 gift_configs 引用', diff --git a/services/wallet-service/internal/domain/resource/resource.go b/services/wallet-service/internal/domain/resource/resource.go index 4681edab..ab1ca056 100644 --- a/services/wallet-service/internal/domain/resource/resource.go +++ b/services/wallet-service/internal/domain/resource/resource.go @@ -71,6 +71,10 @@ const ( PriceTypeCoin = "coin" PriceTypeFree = "free" + + ShopDurationOneDay int32 = 1 + ShopDurationThreeDays int32 = 3 + ShopDurationSevenDays int32 = 7 ) type Resource struct { @@ -168,6 +172,24 @@ type GiftTypeConfig struct { UpdatedAtMS int64 } +type ResourceShopItem struct { + AppCode string + ShopItemID int64 + ResourceID int64 + Resource Resource + Status string + DurationDays int32 + PriceType string + CoinPrice int64 + EffectiveFromMS int64 + EffectiveToMS int64 + SortOrder int32 + CreatedByUserID int64 + UpdatedByUserID int64 + CreatedAtMS int64 + UpdatedAtMS int64 +} + type UserResourceEntitlement struct { AppCode string EntitlementID string @@ -380,6 +402,39 @@ type ListResourceGrantsQuery struct { PageSize int32 } +type ResourceShopItemInput struct { + ShopItemID int64 + ResourceID int64 + Status string + DurationDays int32 + EffectiveFromMS int64 + EffectiveToMS int64 + SortOrder int32 +} + +type ListResourceShopItemsQuery struct { + AppCode string + ResourceType string + Status string + Keyword string + Page int32 + PageSize int32 + ActiveOnly bool +} + +type ResourceShopItemsCommand struct { + AppCode string + Items []ResourceShopItemInput + OperatorUserID int64 +} + +type ResourceShopItemStatusCommand struct { + AppCode string + ShopItemID int64 + Status string + OperatorUserID int64 +} + // BadgeGrantOutbox is a wallet resource grant event relayed to activity-service badge display projection. type BadgeGrantOutbox struct { AppCode string @@ -434,6 +489,24 @@ func ValidResourceType(value string) bool { } } +func ResourceTypeSellableInShop(value string) bool { + switch NormalizeResourceType(value) { + case TypeAvatarFrame, TypeProfileCard, TypeVehicle, TypeChatBubble, TypeBadge, TypeMicSeatIcon, TypeMicSeatAnimation: + return true + default: + return false + } +} + +func ValidShopDurationDays(value int32) bool { + switch value { + case ShopDurationOneDay, ShopDurationThreeDays, ShopDurationSevenDays: + return true + default: + return false + } +} + func ValidStatus(value string) bool { switch NormalizeStatus(value) { case StatusActive, StatusDisabled: diff --git a/services/wallet-service/internal/service/wallet/resource.go b/services/wallet-service/internal/service/wallet/resource.go index 4badc960..ce5e0a9e 100644 --- a/services/wallet-service/internal/service/wallet/resource.go +++ b/services/wallet-service/internal/service/wallet/resource.go @@ -207,3 +207,37 @@ func (s *Service) ListResourceGrants(ctx context.Context, query resourcedomain.L ctx = appcode.WithContext(ctx, query.AppCode) return s.repository.ListResourceGrants(ctx, query) } + +func (s *Service) ListResourceShopItems(ctx context.Context, query resourcedomain.ListResourceShopItemsQuery) ([]resourcedomain.ResourceShopItem, int64, error) { + if s.repository == nil { + return nil, 0, xerr.New(xerr.Unavailable, "wallet repository is not configured") + } + query.AppCode = appcode.Normalize(query.AppCode) + ctx = appcode.WithContext(ctx, query.AppCode) + if strings.TrimSpace(query.ResourceType) != "" { + resourceType := resourcedomain.NormalizeResourceType(query.ResourceType) + if !resourcedomain.ResourceTypeSellableInShop(resourceType) { + return nil, 0, xerr.New(xerr.InvalidArgument, "resource_type is invalid") + } + query.ResourceType = resourceType + } + return s.repository.ListResourceShopItems(ctx, query) +} + +func (s *Service) UpsertResourceShopItems(ctx context.Context, command resourcedomain.ResourceShopItemsCommand) ([]resourcedomain.ResourceShopItem, error) { + if s.repository == nil { + return nil, xerr.New(xerr.Unavailable, "wallet repository is not configured") + } + command.AppCode = appcode.Normalize(command.AppCode) + ctx = appcode.WithContext(ctx, command.AppCode) + return s.repository.UpsertResourceShopItems(ctx, command) +} + +func (s *Service) SetResourceShopItemStatus(ctx context.Context, command resourcedomain.ResourceShopItemStatusCommand) (resourcedomain.ResourceShopItem, error) { + if s.repository == nil { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.Unavailable, "wallet repository is not configured") + } + command.AppCode = appcode.Normalize(command.AppCode) + ctx = appcode.WithContext(ctx, command.AppCode) + return s.repository.SetResourceShopItemStatus(ctx, command) +} diff --git a/services/wallet-service/internal/service/wallet/service.go b/services/wallet-service/internal/service/wallet/service.go index 63f82d53..c2ba526e 100644 --- a/services/wallet-service/internal/service/wallet/service.go +++ b/services/wallet-service/internal/service/wallet/service.go @@ -74,6 +74,9 @@ type Repository interface { ListUserResources(ctx context.Context, query resourcedomain.ListUserResourcesQuery) ([]resourcedomain.UserResourceEntitlement, error) EquipUserResource(ctx context.Context, command resourcedomain.EquipUserResourceCommand) (resourcedomain.UserResourceEntitlement, error) ListResourceGrants(ctx context.Context, query resourcedomain.ListResourceGrantsQuery) ([]resourcedomain.ResourceGrant, int64, error) + ListResourceShopItems(ctx context.Context, query resourcedomain.ListResourceShopItemsQuery) ([]resourcedomain.ResourceShopItem, int64, error) + UpsertResourceShopItems(ctx context.Context, command resourcedomain.ResourceShopItemsCommand) ([]resourcedomain.ResourceShopItem, error) + SetResourceShopItemStatus(ctx context.Context, command resourcedomain.ResourceShopItemStatusCommand) (resourcedomain.ResourceShopItem, error) ProjectPendingGiftWallEvents(ctx context.Context, workerID string, limit int, lockTTL time.Duration) (int, error) ClaimPendingBadgeGrantEvents(ctx context.Context, workerID string, nowMS int64, lockTTL time.Duration, batchSize int) ([]resourcedomain.BadgeGrantOutbox, error) MarkBadgeGrantEventDelivered(ctx context.Context, event resourcedomain.BadgeGrantOutbox, nowMS int64) error diff --git a/services/wallet-service/internal/storage/mysql/resource_repository.go b/services/wallet-service/internal/storage/mysql/resource_repository.go index 6718bd1a..844f9fd5 100644 --- a/services/wallet-service/internal/storage/mysql/resource_repository.go +++ b/services/wallet-service/internal/storage/mysql/resource_repository.go @@ -943,6 +943,151 @@ func (r *Repository) ListResourceGrants(ctx context.Context, query resourcedomai return items, total, rows.Err() } +// ListResourceShopItems 返回 App 道具商店和后台配置共用的售卖视图;价格始终由资源一日价乘以售卖天数派生。 +func (r *Repository) ListResourceShopItems(ctx context.Context, query resourcedomain.ListResourceShopItemsQuery) ([]resourcedomain.ResourceShopItem, int64, error) { + if r == nil || r.db == nil { + return nil, 0, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + ctx = contextWithCommandApp(ctx, query.AppCode) + query.AppCode = appcode.FromContext(ctx) + query = normalizeResourceShopItemsQuery(query) + where, args := resourceShopItemsWhereSQL(query) + var total int64 + if err := r.db.QueryRowContext(ctx, ` + SELECT COUNT(*) + FROM resource_shop_items si + JOIN resources r ON r.app_code = si.app_code AND r.resource_id = si.resource_id + `+where, args...).Scan(&total); err != nil { + return nil, 0, err + } + rows, err := r.db.QueryContext(ctx, resourceShopItemSelectSQL()+where+` + ORDER BY si.sort_order ASC, si.shop_item_id DESC + LIMIT ? OFFSET ?`, + append(args, query.PageSize, resourceOffset(query.Page, query.PageSize))..., + ) + if err != nil { + return nil, 0, err + } + defer rows.Close() + + items := make([]resourcedomain.ResourceShopItem, 0, query.PageSize) + for rows.Next() { + item, err := scanResourceShopItem(rows) + if err != nil { + return nil, 0, err + } + items = append(items, item) + } + return items, total, rows.Err() +} + +// UpsertResourceShopItems 批量添加或重配售卖资源;同一个资源在商店只保留一个当前售卖配置。 +func (r *Repository) UpsertResourceShopItems(ctx context.Context, command resourcedomain.ResourceShopItemsCommand) ([]resourcedomain.ResourceShopItem, error) { + if r == nil || r.db == nil { + return nil, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + ctx = contextWithCommandApp(ctx, command.AppCode) + command.AppCode = appcode.FromContext(ctx) + command = normalizeResourceShopItemsCommand(command) + if err := validateResourceShopItemsCommand(command); err != nil { + return nil, err + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer func() { _ = tx.Rollback() }() + + nowMs := time.Now().UnixMilli() + resourceIDs := make([]int64, 0, len(command.Items)) + seen := make(map[int64]struct{}, len(command.Items)) + for _, item := range command.Items { + if _, exists := seen[item.ResourceID]; exists { + return nil, xerr.New(xerr.InvalidArgument, "resource shop contains duplicate resource") + } + seen[item.ResourceID] = struct{}{} + resource, err := r.getResourceForUpdate(ctx, tx, item.ResourceID) + if err != nil { + return nil, err + } + if err := validateResourceShopResource(resource); err != nil { + return nil, err + } + if _, err := tx.ExecContext(ctx, ` + INSERT INTO resource_shop_items ( + app_code, resource_id, status, duration_days, effective_from_ms, effective_to_ms, sort_order, + created_by_user_id, updated_by_user_id, created_at_ms, updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + status = VALUES(status), + duration_days = VALUES(duration_days), + effective_from_ms = VALUES(effective_from_ms), + effective_to_ms = VALUES(effective_to_ms), + sort_order = VALUES(sort_order), + updated_by_user_id = VALUES(updated_by_user_id), + updated_at_ms = VALUES(updated_at_ms)`, + command.AppCode, item.ResourceID, item.Status, item.DurationDays, item.EffectiveFromMS, item.EffectiveToMS, item.SortOrder, + command.OperatorUserID, command.OperatorUserID, nowMs, nowMs, + ); err != nil { + return nil, err + } + resourceIDs = append(resourceIDs, item.ResourceID) + } + if err := tx.Commit(); err != nil { + return nil, err + } + return r.listResourceShopItemsByResourceIDs(ctx, resourceIDs) +} + +func (r *Repository) SetResourceShopItemStatus(ctx context.Context, command resourcedomain.ResourceShopItemStatusCommand) (resourcedomain.ResourceShopItem, error) { + if r == nil || r.db == nil { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + ctx = contextWithCommandApp(ctx, command.AppCode) + command.AppCode = appcode.FromContext(ctx) + command.Status = resourcedomain.NormalizeStatus(command.Status) + if command.ShopItemID <= 0 { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.InvalidArgument, "shop_item_id is required") + } + if !resourcedomain.ValidStatus(command.Status) { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.InvalidArgument, "status is invalid") + } + tx, err := r.db.BeginTx(ctx, nil) + if err != nil { + return resourcedomain.ResourceShopItem{}, err + } + defer func() { _ = tx.Rollback() }() + + item, err := r.getResourceShopItemTx(ctx, tx, command.ShopItemID, true) + if err != nil { + return resourcedomain.ResourceShopItem{}, err + } + if command.Status == resourcedomain.StatusActive { + if err := validateResourceShopResource(item.Resource); err != nil { + return resourcedomain.ResourceShopItem{}, err + } + } + nowMs := time.Now().UnixMilli() + result, err := tx.ExecContext(ctx, ` + UPDATE resource_shop_items + SET status = ?, updated_by_user_id = ?, updated_at_ms = ? + WHERE app_code = ? AND shop_item_id = ?`, + command.Status, command.OperatorUserID, nowMs, command.AppCode, command.ShopItemID, + ) + if err != nil { + return resourcedomain.ResourceShopItem{}, err + } + if affected, err := result.RowsAffected(); err != nil { + return resourcedomain.ResourceShopItem{}, err + } else if affected == 0 { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.NotFound, "resource shop item not found") + } + if err := tx.Commit(); err != nil { + return resourcedomain.ResourceShopItem{}, err + } + return r.getResourceShopItem(ctx, command.ShopItemID) +} + func (r *Repository) GetResourceGrant(ctx context.Context, grantID string) (resourcedomain.ResourceGrant, error) { if r == nil || r.db == nil { return resourcedomain.ResourceGrant{}, xerr.New(xerr.Unavailable, "mysql repository is not configured") @@ -1559,6 +1704,53 @@ func (r *Repository) getResourceForUpdate(ctx context.Context, tx *sql.Tx, resou return resource, err } +func (r *Repository) getResourceShopItem(ctx context.Context, shopItemID int64) (resourcedomain.ResourceShopItem, error) { + return r.getResourceShopItemWithQuerier(ctx, r.db, shopItemID, false) +} + +func (r *Repository) getResourceShopItemTx(ctx context.Context, tx *sql.Tx, shopItemID int64, lock bool) (resourcedomain.ResourceShopItem, error) { + return r.getResourceShopItemWithQuerier(ctx, tx, shopItemID, lock) +} + +func (r *Repository) getResourceShopItemWithQuerier(ctx context.Context, querier sqlRowQuerier, shopItemID int64, lock bool) (resourcedomain.ResourceShopItem, error) { + query := resourceShopItemSelectSQL() + ` WHERE si.app_code = ? AND si.shop_item_id = ?` + if lock { + query += ` FOR UPDATE` + } + row := querier.QueryRowContext(ctx, query, appcode.FromContext(ctx), shopItemID) + item, err := scanResourceShopItem(row) + if errors.Is(err, sql.ErrNoRows) { + return resourcedomain.ResourceShopItem{}, xerr.New(xerr.NotFound, "resource shop item not found") + } + return item, err +} + +func (r *Repository) listResourceShopItemsByResourceIDs(ctx context.Context, resourceIDs []int64) ([]resourcedomain.ResourceShopItem, error) { + resourceIDs = compactPositiveInt64s(resourceIDs) + if len(resourceIDs) == 0 { + return []resourcedomain.ResourceShopItem{}, nil + } + args := append([]any{appcode.FromContext(ctx)}, int64AnyArgs(resourceIDs)...) + rows, err := r.db.QueryContext(ctx, resourceShopItemSelectSQL()+` + WHERE si.app_code = ? AND si.resource_id IN (`+placeholders(len(resourceIDs))+`) + ORDER BY si.sort_order ASC, si.shop_item_id DESC`, + args..., + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := make([]resourcedomain.ResourceShopItem, 0, len(resourceIDs)) + for rows.Next() { + item, err := scanResourceShopItem(rows) + if err != nil { + return nil, err + } + items = append(items, item) + } + return items, rows.Err() +} + func (r *Repository) getResourceGroup(ctx context.Context, querier sqlRowQuerier, groupID int64, lock bool) (resourcedomain.ResourceGroup, error) { query := ` SELECT app_code, group_id, group_code, name, status, description, sort_order, @@ -1800,6 +1992,57 @@ func scanResource(scanner scanTarget) (resourcedomain.Resource, error) { return resource, nil } +func scanResourceShopItem(scanner scanTarget) (resourcedomain.ResourceShopItem, error) { + var item resourcedomain.ResourceShopItem + var resource resourcedomain.Resource + var scopesJSON string + if err := scanner.Scan( + &item.AppCode, + &item.ShopItemID, + &item.ResourceID, + &item.Status, + &item.DurationDays, + &item.PriceType, + &item.CoinPrice, + &item.EffectiveFromMS, + &item.EffectiveToMS, + &item.SortOrder, + &item.CreatedByUserID, + &item.UpdatedByUserID, + &item.CreatedAtMS, + &item.UpdatedAtMS, + &resource.AppCode, + &resource.ResourceID, + &resource.ResourceCode, + &resource.ResourceType, + &resource.Name, + &resource.Status, + &resource.Grantable, + &resource.ManagerGrantEnabled, + &resource.GrantStrategy, + &resource.WalletAssetType, + &resource.WalletAssetAmount, + &resource.PriceType, + &resource.CoinPrice, + &resource.GiftPointAmount, + &scopesJSON, + &resource.AssetURL, + &resource.PreviewURL, + &resource.AnimationURL, + &resource.MetadataJSON, + &resource.SortOrder, + &resource.CreatedByUserID, + &resource.UpdatedByUserID, + &resource.CreatedAtMS, + &resource.UpdatedAtMS, + ); err != nil { + return resourcedomain.ResourceShopItem{}, err + } + resource.UsageScopes = parseStringArray(scopesJSON) + item.Resource = resource + return item, nil +} + func scanResourceGroup(scanner scanTarget) (resourcedomain.ResourceGroup, error) { var group resourcedomain.ResourceGroup err := scanner.Scan( @@ -2057,6 +2300,19 @@ func giftTypeConfigSelectSQL() string { ` } +func resourceShopItemSelectSQL() string { + return ` + SELECT si.app_code, si.shop_item_id, si.resource_id, si.status, si.duration_days, + r.price_type, + CASE WHEN r.price_type = 'coin' THEN r.coin_price * si.duration_days ELSE 0 END AS coin_price, + si.effective_from_ms, si.effective_to_ms, si.sort_order, + si.created_by_user_id, si.updated_by_user_id, si.created_at_ms, si.updated_at_ms, + ` + resourceColumnsWithAlias("r") + ` + FROM resource_shop_items si + JOIN resources r ON r.app_code = si.app_code AND r.resource_id = si.resource_id + ` +} + func userResourceSelectSQL() string { return ` SELECT e.app_code, e.entitlement_id, e.user_id, e.resource_id, e.status, @@ -2159,6 +2415,31 @@ func giftTypeConfigWhereSQL(query resourcedomain.ListGiftTypeConfigsQuery) (stri return where, args } +func resourceShopItemsWhereSQL(query resourcedomain.ListResourceShopItemsQuery) (string, []any) { + where := `WHERE si.app_code = ? AND r.resource_type IN ('avatar_frame', 'profile_card', 'vehicle', 'chat_bubble', 'badge', 'mic_seat_icon', 'mic_seat_animation')` + args := []any{query.AppCode} + if query.ActiveOnly { + nowMs := time.Now().UnixMilli() + where += ` AND si.status = 'active' AND r.status = 'active' + AND (si.effective_from_ms = 0 OR si.effective_from_ms <= ?) + AND (si.effective_to_ms = 0 OR si.effective_to_ms > ?)` + args = append(args, nowMs, nowMs) + } else if query.Status != "" { + where += ` AND si.status = ?` + args = append(args, query.Status) + } + if query.ResourceType != "" { + where += ` AND r.resource_type = ?` + args = append(args, query.ResourceType) + } + if query.Keyword != "" { + like := "%" + query.Keyword + "%" + where += ` AND (r.resource_code LIKE ? OR r.name LIKE ?)` + args = append(args, like, like) + } + return where, args +} + func normalizeResourceListQuery(query resourcedomain.ListResourcesQuery) resourcedomain.ListResourcesQuery { query.ResourceType = resourcedomain.NormalizeResourceType(query.ResourceType) if query.ResourceType != "" && !resourcedomain.ValidResourceType(query.ResourceType) { @@ -2198,6 +2479,17 @@ func normalizeResourceGrantsQuery(query resourcedomain.ListResourceGrantsQuery) return query } +func normalizeResourceShopItemsQuery(query resourcedomain.ListResourceShopItemsQuery) resourcedomain.ListResourceShopItemsQuery { + query.ResourceType = resourcedomain.NormalizeResourceType(query.ResourceType) + if query.ResourceType != "" && !resourcedomain.ResourceTypeSellableInShop(query.ResourceType) { + query.ResourceType = "__invalid__" + } + query.Status = strings.ToLower(strings.TrimSpace(query.Status)) + query.Keyword = strings.TrimSpace(query.Keyword) + query.Page, query.PageSize = normalizePage(query.Page, query.PageSize) + return query +} + func normalizePage(page int32, pageSize int32) (int32, int32) { if page < 1 { page = 1 @@ -2215,6 +2507,41 @@ func resourceOffset(page int32, pageSize int32) int32 { return (page - 1) * pageSize } +func placeholders(count int) string { + if count <= 0 { + return "" + } + items := make([]string, count) + for index := range items { + items[index] = "?" + } + return strings.Join(items, ",") +} + +func int64AnyArgs(values []int64) []any { + args := make([]any, 0, len(values)) + for _, value := range values { + args = append(args, value) + } + return args +} + +func compactPositiveInt64s(values []int64) []int64 { + seen := make(map[int64]struct{}, len(values)) + out := make([]int64, 0, len(values)) + for _, value := range values { + if value <= 0 { + continue + } + if _, exists := seen[value]; exists { + continue + } + seen[value] = struct{}{} + out = append(out, value) + } + return out +} + func mapResourceWriteError(err error) error { if isMySQLDuplicateError(err) { return xerr.New(xerr.Conflict, "resource_code already exists") @@ -2282,6 +2609,47 @@ func validateResourceCommand(command resourcedomain.ResourceCommand) error { return nil } +func normalizeResourceShopItemsCommand(command resourcedomain.ResourceShopItemsCommand) resourcedomain.ResourceShopItemsCommand { + for index := range command.Items { + command.Items[index].Status = resourcedomain.NormalizeStatus(command.Items[index].Status) + } + return command +} + +func validateResourceShopItemsCommand(command resourcedomain.ResourceShopItemsCommand) error { + if len(command.Items) == 0 || command.OperatorUserID < 0 { + return xerr.New(xerr.InvalidArgument, "resource shop command is incomplete") + } + for _, item := range command.Items { + if item.ResourceID <= 0 { + return xerr.New(xerr.InvalidArgument, "resource_id is required") + } + if !resourcedomain.ValidStatus(item.Status) { + return xerr.New(xerr.InvalidArgument, "status is invalid") + } + if !resourcedomain.ValidShopDurationDays(item.DurationDays) { + return xerr.New(xerr.InvalidArgument, "resource shop duration is invalid") + } + if item.EffectiveFromMS < 0 || item.EffectiveToMS < 0 || (item.EffectiveFromMS > 0 && item.EffectiveToMS > 0 && item.EffectiveToMS <= item.EffectiveFromMS) { + return xerr.New(xerr.InvalidArgument, "resource shop effective time is invalid") + } + } + return nil +} + +func validateResourceShopResource(resource resourcedomain.Resource) error { + if !resourcedomain.ResourceTypeSellableInShop(resource.ResourceType) { + return xerr.New(xerr.InvalidArgument, "resource_type cannot be sold in shop") + } + if resource.Status != resourcedomain.StatusActive { + return xerr.New(xerr.Conflict, "resource is disabled") + } + if resourcedomain.NormalizePriceType(resource.PriceType) != resourcedomain.PriceTypeCoin || resource.CoinPrice <= 0 { + return xerr.New(xerr.InvalidArgument, "resource coin price is required") + } + return nil +} + func normalizeResourceGroupCommand(command resourcedomain.ResourceGroupCommand) resourcedomain.ResourceGroupCommand { command.GroupCode = strings.TrimSpace(command.GroupCode) command.Name = strings.TrimSpace(command.Name) diff --git a/services/wallet-service/internal/transport/grpc/resource.go b/services/wallet-service/internal/transport/grpc/resource.go index 4e635d86..1f2e3414 100644 --- a/services/wallet-service/internal/transport/grpc/resource.go +++ b/services/wallet-service/internal/transport/grpc/resource.go @@ -287,6 +287,55 @@ func (s *Server) ListResourceGrants(ctx context.Context, req *walletv1.ListResou return resp, nil } +func (s *Server) ListResourceShopItems(ctx context.Context, req *walletv1.ListResourceShopItemsRequest) (*walletv1.ListResourceShopItemsResponse, error) { + items, total, err := s.svc.ListResourceShopItems(ctx, resourcedomain.ListResourceShopItemsQuery{ + AppCode: req.GetAppCode(), + ResourceType: req.GetResourceType(), + Status: req.GetStatus(), + Keyword: req.GetKeyword(), + Page: req.GetPage(), + PageSize: req.GetPageSize(), + ActiveOnly: req.GetActiveOnly(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + resp := &walletv1.ListResourceShopItemsResponse{Items: make([]*walletv1.ResourceShopItem, 0, len(items)), Total: total} + for _, item := range items { + resp.Items = append(resp.Items, resourceShopItemToProto(item)) + } + return resp, nil +} + +func (s *Server) UpsertResourceShopItems(ctx context.Context, req *walletv1.UpsertResourceShopItemsRequest) (*walletv1.UpsertResourceShopItemsResponse, error) { + items, err := s.svc.UpsertResourceShopItems(ctx, resourcedomain.ResourceShopItemsCommand{ + AppCode: req.GetAppCode(), + Items: resourceShopItemInputs(req.GetItems()), + OperatorUserID: req.GetOperatorUserId(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + resp := &walletv1.UpsertResourceShopItemsResponse{Items: make([]*walletv1.ResourceShopItem, 0, len(items))} + for _, item := range items { + resp.Items = append(resp.Items, resourceShopItemToProto(item)) + } + return resp, nil +} + +func (s *Server) SetResourceShopItemStatus(ctx context.Context, req *walletv1.SetResourceShopItemStatusRequest) (*walletv1.ResourceShopItemResponse, error) { + item, err := s.svc.SetResourceShopItemStatus(ctx, resourcedomain.ResourceShopItemStatusCommand{ + AppCode: req.GetAppCode(), + ShopItemID: req.GetShopItemId(), + Status: req.GetStatus(), + OperatorUserID: req.GetOperatorUserId(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return &walletv1.ResourceShopItemResponse{Item: resourceShopItemToProto(item)}, nil +} + func resourceCommandFromCreate(req *walletv1.CreateResourceRequest) resourcedomain.ResourceCommand { return resourcedomain.ResourceCommand{ AppCode: req.GetAppCode(), @@ -433,6 +482,25 @@ func groupItemInputs(items []*walletv1.ResourceGroupItemInput) []resourcedomain. return out } +func resourceShopItemInputs(items []*walletv1.ResourceShopItemInput) []resourcedomain.ResourceShopItemInput { + out := make([]resourcedomain.ResourceShopItemInput, 0, len(items)) + for _, item := range items { + if item == nil { + continue + } + out = append(out, resourcedomain.ResourceShopItemInput{ + ShopItemID: item.GetShopItemId(), + ResourceID: item.GetResourceId(), + Status: item.GetStatus(), + DurationDays: item.GetDurationDays(), + EffectiveFromMS: item.GetEffectiveFromMs(), + EffectiveToMS: item.GetEffectiveToMs(), + SortOrder: item.GetSortOrder(), + }) + } + return out +} + func resourceToProto(resource resourcedomain.Resource) *walletv1.Resource { return &walletv1.Resource{ AppCode: appcode.Normalize(resource.AppCode), @@ -462,6 +530,26 @@ func resourceToProto(resource resourcedomain.Resource) *walletv1.Resource { } } +func resourceShopItemToProto(item resourcedomain.ResourceShopItem) *walletv1.ResourceShopItem { + return &walletv1.ResourceShopItem{ + AppCode: appcode.Normalize(item.AppCode), + ShopItemId: item.ShopItemID, + ResourceId: item.ResourceID, + Resource: resourceToProto(item.Resource), + Status: item.Status, + DurationDays: item.DurationDays, + PriceType: item.PriceType, + CoinPrice: item.CoinPrice, + EffectiveFromMs: item.EffectiveFromMS, + EffectiveToMs: item.EffectiveToMS, + SortOrder: item.SortOrder, + CreatedByUserId: item.CreatedByUserID, + UpdatedByUserId: item.UpdatedByUserID, + CreatedAtMs: item.CreatedAtMS, + UpdatedAtMs: item.UpdatedAtMS, + } +} + func managerGrantEnabledOrDefault(value *bool) bool { if value == nil { // 新建/编辑入口如果没显式携带开关,仍按产品规则默认允许经理中心赠送。