diff --git a/api/proto/user/v1/host.pb.go b/api/proto/user/v1/host.pb.go index 251820fb..63b93855 100644 --- a/api/proto/user/v1/host.pb.go +++ b/api/proto/user/v1/host.pb.go @@ -441,6 +441,155 @@ func (x *CoinSellerProfile) GetUpdatedAtMs() int64 { return 0 } +// CoinSellerListItem 是 App 充值页展示的同区域启用币商投影。 +type CoinSellerListItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DisplayUserId string `protobuf:"bytes,2,opt,name=display_user_id,json=displayUserId,proto3" json:"display_user_id,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"` + CountryId int64 `protobuf:"varint,5,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + CountryCode string `protobuf:"bytes,6,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + CountryName string `protobuf:"bytes,7,opt,name=country_name,json=countryName,proto3" json:"country_name,omitempty"` + CountryDisplayName string `protobuf:"bytes,8,opt,name=country_display_name,json=countryDisplayName,proto3" json:"country_display_name,omitempty"` + RegionId int64 `protobuf:"varint,9,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + RegionCode string `protobuf:"bytes,10,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"` + RegionName string `protobuf:"bytes,11,opt,name=region_name,json=regionName,proto3" json:"region_name,omitempty"` + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + MerchantAssetType string `protobuf:"bytes,13,opt,name=merchant_asset_type,json=merchantAssetType,proto3" json:"merchant_asset_type,omitempty"` + UpdatedAtMs int64 `protobuf:"varint,14,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CoinSellerListItem) Reset() { + *x = CoinSellerListItem{} + mi := &file_proto_user_v1_host_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CoinSellerListItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CoinSellerListItem) ProtoMessage() {} + +func (x *CoinSellerListItem) ProtoReflect() protoreflect.Message { + mi := &file_proto_user_v1_host_proto_msgTypes[4] + 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 CoinSellerListItem.ProtoReflect.Descriptor instead. +func (*CoinSellerListItem) Descriptor() ([]byte, []int) { + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{4} +} + +func (x *CoinSellerListItem) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *CoinSellerListItem) GetDisplayUserId() string { + if x != nil { + return x.DisplayUserId + } + return "" +} + +func (x *CoinSellerListItem) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *CoinSellerListItem) GetAvatar() string { + if x != nil { + return x.Avatar + } + return "" +} + +func (x *CoinSellerListItem) GetCountryId() int64 { + if x != nil { + return x.CountryId + } + return 0 +} + +func (x *CoinSellerListItem) GetCountryCode() string { + if x != nil { + return x.CountryCode + } + return "" +} + +func (x *CoinSellerListItem) GetCountryName() string { + if x != nil { + return x.CountryName + } + return "" +} + +func (x *CoinSellerListItem) GetCountryDisplayName() string { + if x != nil { + return x.CountryDisplayName + } + return "" +} + +func (x *CoinSellerListItem) GetRegionId() int64 { + if x != nil { + return x.RegionId + } + return 0 +} + +func (x *CoinSellerListItem) GetRegionCode() string { + if x != nil { + return x.RegionCode + } + return "" +} + +func (x *CoinSellerListItem) GetRegionName() string { + if x != nil { + return x.RegionName + } + return "" +} + +func (x *CoinSellerListItem) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *CoinSellerListItem) GetMerchantAssetType() string { + if x != nil { + return x.MerchantAssetType + } + return "" +} + +func (x *CoinSellerListItem) GetUpdatedAtMs() int64 { + if x != nil { + return x.UpdatedAtMs + } + return 0 +} + // UserRoleSummary 是 App 我的页和入口显隐使用的轻量角色摘要。 // 它把 host、Agency、manager、BD 和币商身份收敛到一次 user-service RPC,避免 gateway 随角色扩张继续 fanout。 type UserRoleSummary struct { @@ -464,7 +613,7 @@ type UserRoleSummary struct { func (x *UserRoleSummary) Reset() { *x = UserRoleSummary{} - mi := &file_proto_user_v1_host_proto_msgTypes[4] + mi := &file_proto_user_v1_host_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -476,7 +625,7 @@ func (x *UserRoleSummary) String() string { func (*UserRoleSummary) ProtoMessage() {} func (x *UserRoleSummary) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[4] + mi := &file_proto_user_v1_host_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -489,7 +638,7 @@ func (x *UserRoleSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use UserRoleSummary.ProtoReflect.Descriptor instead. func (*UserRoleSummary) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{4} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{5} } func (x *UserRoleSummary) GetUserId() int64 { @@ -604,7 +753,7 @@ type AgencyMembership struct { func (x *AgencyMembership) Reset() { *x = AgencyMembership{} - mi := &file_proto_user_v1_host_proto_msgTypes[5] + mi := &file_proto_user_v1_host_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +765,7 @@ func (x *AgencyMembership) String() string { func (*AgencyMembership) ProtoMessage() {} func (x *AgencyMembership) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[5] + mi := &file_proto_user_v1_host_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +778,7 @@ func (x *AgencyMembership) ProtoReflect() protoreflect.Message { // Deprecated: Use AgencyMembership.ProtoReflect.Descriptor instead. func (*AgencyMembership) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{5} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{6} } func (x *AgencyMembership) GetMembershipId() int64 { @@ -736,7 +885,7 @@ type AgencyApplication struct { func (x *AgencyApplication) Reset() { *x = AgencyApplication{} - mi := &file_proto_user_v1_host_proto_msgTypes[6] + mi := &file_proto_user_v1_host_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -748,7 +897,7 @@ func (x *AgencyApplication) String() string { func (*AgencyApplication) ProtoMessage() {} func (x *AgencyApplication) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[6] + mi := &file_proto_user_v1_host_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -761,7 +910,7 @@ func (x *AgencyApplication) ProtoReflect() protoreflect.Message { // Deprecated: Use AgencyApplication.ProtoReflect.Descriptor instead. func (*AgencyApplication) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{6} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{7} } func (x *AgencyApplication) GetApplicationId() int64 { @@ -866,7 +1015,7 @@ type RoleInvitation struct { func (x *RoleInvitation) Reset() { *x = RoleInvitation{} - mi := &file_proto_user_v1_host_proto_msgTypes[7] + mi := &file_proto_user_v1_host_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -878,7 +1027,7 @@ func (x *RoleInvitation) String() string { func (*RoleInvitation) ProtoMessage() {} func (x *RoleInvitation) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[7] + mi := &file_proto_user_v1_host_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -891,7 +1040,7 @@ func (x *RoleInvitation) ProtoReflect() protoreflect.Message { // Deprecated: Use RoleInvitation.ProtoReflect.Descriptor instead. func (*RoleInvitation) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{7} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{8} } func (x *RoleInvitation) GetInvitationId() int64 { @@ -1018,7 +1167,7 @@ type SearchAgenciesRequest struct { func (x *SearchAgenciesRequest) Reset() { *x = SearchAgenciesRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[8] + mi := &file_proto_user_v1_host_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +1179,7 @@ func (x *SearchAgenciesRequest) String() string { func (*SearchAgenciesRequest) ProtoMessage() {} func (x *SearchAgenciesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[8] + mi := &file_proto_user_v1_host_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +1192,7 @@ func (x *SearchAgenciesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchAgenciesRequest.ProtoReflect.Descriptor instead. func (*SearchAgenciesRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{8} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{9} } func (x *SearchAgenciesRequest) GetMeta() *RequestMeta { @@ -1083,7 +1232,7 @@ type SearchAgenciesResponse struct { func (x *SearchAgenciesResponse) Reset() { *x = SearchAgenciesResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[9] + mi := &file_proto_user_v1_host_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1244,7 @@ func (x *SearchAgenciesResponse) String() string { func (*SearchAgenciesResponse) ProtoMessage() {} func (x *SearchAgenciesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[9] + mi := &file_proto_user_v1_host_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1257,7 @@ func (x *SearchAgenciesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchAgenciesResponse.ProtoReflect.Descriptor instead. func (*SearchAgenciesResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{9} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{10} } func (x *SearchAgenciesResponse) GetAgencies() []*Agency { @@ -1130,7 +1279,7 @@ type ApplyToAgencyRequest struct { func (x *ApplyToAgencyRequest) Reset() { *x = ApplyToAgencyRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[10] + mi := &file_proto_user_v1_host_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1142,7 +1291,7 @@ func (x *ApplyToAgencyRequest) String() string { func (*ApplyToAgencyRequest) ProtoMessage() {} func (x *ApplyToAgencyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[10] + mi := &file_proto_user_v1_host_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1155,7 +1304,7 @@ func (x *ApplyToAgencyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyToAgencyRequest.ProtoReflect.Descriptor instead. func (*ApplyToAgencyRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{10} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{11} } func (x *ApplyToAgencyRequest) GetMeta() *RequestMeta { @@ -1195,7 +1344,7 @@ type ApplyToAgencyResponse struct { func (x *ApplyToAgencyResponse) Reset() { *x = ApplyToAgencyResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[11] + mi := &file_proto_user_v1_host_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1207,7 +1356,7 @@ func (x *ApplyToAgencyResponse) String() string { func (*ApplyToAgencyResponse) ProtoMessage() {} func (x *ApplyToAgencyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[11] + mi := &file_proto_user_v1_host_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1220,7 +1369,7 @@ func (x *ApplyToAgencyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyToAgencyResponse.ProtoReflect.Descriptor instead. func (*ApplyToAgencyResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{11} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{12} } func (x *ApplyToAgencyResponse) GetApplication() *AgencyApplication { @@ -1244,7 +1393,7 @@ type ReviewAgencyApplicationRequest struct { func (x *ReviewAgencyApplicationRequest) Reset() { *x = ReviewAgencyApplicationRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[12] + mi := &file_proto_user_v1_host_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1405,7 @@ func (x *ReviewAgencyApplicationRequest) String() string { func (*ReviewAgencyApplicationRequest) ProtoMessage() {} func (x *ReviewAgencyApplicationRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[12] + mi := &file_proto_user_v1_host_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1418,7 @@ func (x *ReviewAgencyApplicationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReviewAgencyApplicationRequest.ProtoReflect.Descriptor instead. func (*ReviewAgencyApplicationRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{12} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{13} } func (x *ReviewAgencyApplicationRequest) GetMeta() *RequestMeta { @@ -1325,7 +1474,7 @@ type ReviewAgencyApplicationResponse struct { func (x *ReviewAgencyApplicationResponse) Reset() { *x = ReviewAgencyApplicationResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[13] + mi := &file_proto_user_v1_host_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1337,7 +1486,7 @@ func (x *ReviewAgencyApplicationResponse) String() string { func (*ReviewAgencyApplicationResponse) ProtoMessage() {} func (x *ReviewAgencyApplicationResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[13] + mi := &file_proto_user_v1_host_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1350,7 +1499,7 @@ func (x *ReviewAgencyApplicationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReviewAgencyApplicationResponse.ProtoReflect.Descriptor instead. func (*ReviewAgencyApplicationResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{13} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{14} } func (x *ReviewAgencyApplicationResponse) GetApplication() *AgencyApplication { @@ -1388,7 +1537,7 @@ type KickAgencyHostRequest struct { func (x *KickAgencyHostRequest) Reset() { *x = KickAgencyHostRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[14] + mi := &file_proto_user_v1_host_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1549,7 @@ func (x *KickAgencyHostRequest) String() string { func (*KickAgencyHostRequest) ProtoMessage() {} func (x *KickAgencyHostRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[14] + mi := &file_proto_user_v1_host_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1413,7 +1562,7 @@ func (x *KickAgencyHostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KickAgencyHostRequest.ProtoReflect.Descriptor instead. func (*KickAgencyHostRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{14} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{15} } func (x *KickAgencyHostRequest) GetMeta() *RequestMeta { @@ -1468,7 +1617,7 @@ type KickAgencyHostResponse struct { func (x *KickAgencyHostResponse) Reset() { *x = KickAgencyHostResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[15] + mi := &file_proto_user_v1_host_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1480,7 +1629,7 @@ func (x *KickAgencyHostResponse) String() string { func (*KickAgencyHostResponse) ProtoMessage() {} func (x *KickAgencyHostResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[15] + mi := &file_proto_user_v1_host_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1493,7 +1642,7 @@ func (x *KickAgencyHostResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KickAgencyHostResponse.ProtoReflect.Descriptor instead. func (*KickAgencyHostResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{15} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{16} } func (x *KickAgencyHostResponse) GetMembership() *AgencyMembership { @@ -1523,7 +1672,7 @@ type InviteAgencyRequest struct { func (x *InviteAgencyRequest) Reset() { *x = InviteAgencyRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[16] + mi := &file_proto_user_v1_host_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1535,7 +1684,7 @@ func (x *InviteAgencyRequest) String() string { func (*InviteAgencyRequest) ProtoMessage() {} func (x *InviteAgencyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[16] + mi := &file_proto_user_v1_host_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1548,7 +1697,7 @@ func (x *InviteAgencyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteAgencyRequest.ProtoReflect.Descriptor instead. func (*InviteAgencyRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{16} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{17} } func (x *InviteAgencyRequest) GetMeta() *RequestMeta { @@ -1595,7 +1744,7 @@ type InviteAgencyResponse struct { func (x *InviteAgencyResponse) Reset() { *x = InviteAgencyResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[17] + mi := &file_proto_user_v1_host_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1607,7 +1756,7 @@ func (x *InviteAgencyResponse) String() string { func (*InviteAgencyResponse) ProtoMessage() {} func (x *InviteAgencyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[17] + mi := &file_proto_user_v1_host_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1620,7 +1769,7 @@ func (x *InviteAgencyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteAgencyResponse.ProtoReflect.Descriptor instead. func (*InviteAgencyResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{17} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{18} } func (x *InviteAgencyResponse) GetInvitation() *RoleInvitation { @@ -1642,7 +1791,7 @@ type InviteBDRequest struct { func (x *InviteBDRequest) Reset() { *x = InviteBDRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[18] + mi := &file_proto_user_v1_host_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1654,7 +1803,7 @@ func (x *InviteBDRequest) String() string { func (*InviteBDRequest) ProtoMessage() {} func (x *InviteBDRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[18] + mi := &file_proto_user_v1_host_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1667,7 +1816,7 @@ func (x *InviteBDRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteBDRequest.ProtoReflect.Descriptor instead. func (*InviteBDRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{18} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{19} } func (x *InviteBDRequest) GetMeta() *RequestMeta { @@ -1707,7 +1856,7 @@ type InviteBDResponse struct { func (x *InviteBDResponse) Reset() { *x = InviteBDResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[19] + mi := &file_proto_user_v1_host_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1719,7 +1868,7 @@ func (x *InviteBDResponse) String() string { func (*InviteBDResponse) ProtoMessage() {} func (x *InviteBDResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[19] + mi := &file_proto_user_v1_host_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1732,7 +1881,7 @@ func (x *InviteBDResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteBDResponse.ProtoReflect.Descriptor instead. func (*InviteBDResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{19} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{20} } func (x *InviteBDResponse) GetInvitation() *RoleInvitation { @@ -1756,7 +1905,7 @@ type ProcessRoleInvitationRequest struct { func (x *ProcessRoleInvitationRequest) Reset() { *x = ProcessRoleInvitationRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[20] + mi := &file_proto_user_v1_host_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1768,7 +1917,7 @@ func (x *ProcessRoleInvitationRequest) String() string { func (*ProcessRoleInvitationRequest) ProtoMessage() {} func (x *ProcessRoleInvitationRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[20] + mi := &file_proto_user_v1_host_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1781,7 +1930,7 @@ func (x *ProcessRoleInvitationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessRoleInvitationRequest.ProtoReflect.Descriptor instead. func (*ProcessRoleInvitationRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{20} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{21} } func (x *ProcessRoleInvitationRequest) GetMeta() *RequestMeta { @@ -1839,7 +1988,7 @@ type ProcessRoleInvitationResponse struct { func (x *ProcessRoleInvitationResponse) Reset() { *x = ProcessRoleInvitationResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[21] + mi := &file_proto_user_v1_host_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1851,7 +2000,7 @@ func (x *ProcessRoleInvitationResponse) String() string { func (*ProcessRoleInvitationResponse) ProtoMessage() {} func (x *ProcessRoleInvitationResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[21] + mi := &file_proto_user_v1_host_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1864,7 +2013,7 @@ func (x *ProcessRoleInvitationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessRoleInvitationResponse.ProtoReflect.Descriptor instead. func (*ProcessRoleInvitationResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{21} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{22} } func (x *ProcessRoleInvitationResponse) GetInvitation() *RoleInvitation { @@ -1912,7 +2061,7 @@ type GetHostProfileRequest struct { func (x *GetHostProfileRequest) Reset() { *x = GetHostProfileRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[22] + mi := &file_proto_user_v1_host_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1924,7 +2073,7 @@ func (x *GetHostProfileRequest) String() string { func (*GetHostProfileRequest) ProtoMessage() {} func (x *GetHostProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[22] + mi := &file_proto_user_v1_host_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1937,7 +2086,7 @@ func (x *GetHostProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHostProfileRequest.ProtoReflect.Descriptor instead. func (*GetHostProfileRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{22} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{23} } func (x *GetHostProfileRequest) GetMeta() *RequestMeta { @@ -1963,7 +2112,7 @@ type GetHostProfileResponse struct { func (x *GetHostProfileResponse) Reset() { *x = GetHostProfileResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[23] + mi := &file_proto_user_v1_host_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1975,7 +2124,7 @@ func (x *GetHostProfileResponse) String() string { func (*GetHostProfileResponse) ProtoMessage() {} func (x *GetHostProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[23] + mi := &file_proto_user_v1_host_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1988,7 +2137,7 @@ func (x *GetHostProfileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHostProfileResponse.ProtoReflect.Descriptor instead. func (*GetHostProfileResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{23} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{24} } func (x *GetHostProfileResponse) GetHostProfile() *HostProfile { @@ -2008,7 +2157,7 @@ type GetBDProfileRequest struct { func (x *GetBDProfileRequest) Reset() { *x = GetBDProfileRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[24] + mi := &file_proto_user_v1_host_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2020,7 +2169,7 @@ func (x *GetBDProfileRequest) String() string { func (*GetBDProfileRequest) ProtoMessage() {} func (x *GetBDProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[24] + mi := &file_proto_user_v1_host_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2033,7 +2182,7 @@ func (x *GetBDProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBDProfileRequest.ProtoReflect.Descriptor instead. func (*GetBDProfileRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{24} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{25} } func (x *GetBDProfileRequest) GetMeta() *RequestMeta { @@ -2059,7 +2208,7 @@ type GetBDProfileResponse struct { func (x *GetBDProfileResponse) Reset() { *x = GetBDProfileResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[25] + mi := &file_proto_user_v1_host_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2071,7 +2220,7 @@ func (x *GetBDProfileResponse) String() string { func (*GetBDProfileResponse) ProtoMessage() {} func (x *GetBDProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[25] + mi := &file_proto_user_v1_host_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2084,7 +2233,7 @@ func (x *GetBDProfileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBDProfileResponse.ProtoReflect.Descriptor instead. func (*GetBDProfileResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{25} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{26} } func (x *GetBDProfileResponse) GetBdProfile() *BDProfile { @@ -2104,7 +2253,7 @@ type GetCoinSellerProfileRequest struct { func (x *GetCoinSellerProfileRequest) Reset() { *x = GetCoinSellerProfileRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[26] + mi := &file_proto_user_v1_host_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2116,7 +2265,7 @@ func (x *GetCoinSellerProfileRequest) String() string { func (*GetCoinSellerProfileRequest) ProtoMessage() {} func (x *GetCoinSellerProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[26] + mi := &file_proto_user_v1_host_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2129,7 +2278,7 @@ func (x *GetCoinSellerProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCoinSellerProfileRequest.ProtoReflect.Descriptor instead. func (*GetCoinSellerProfileRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{26} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{27} } func (x *GetCoinSellerProfileRequest) GetMeta() *RequestMeta { @@ -2155,7 +2304,7 @@ type GetCoinSellerProfileResponse struct { func (x *GetCoinSellerProfileResponse) Reset() { *x = GetCoinSellerProfileResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[27] + mi := &file_proto_user_v1_host_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2167,7 +2316,7 @@ func (x *GetCoinSellerProfileResponse) String() string { func (*GetCoinSellerProfileResponse) ProtoMessage() {} func (x *GetCoinSellerProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[27] + mi := &file_proto_user_v1_host_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2180,7 +2329,7 @@ func (x *GetCoinSellerProfileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCoinSellerProfileResponse.ProtoReflect.Descriptor instead. func (*GetCoinSellerProfileResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{27} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{28} } func (x *GetCoinSellerProfileResponse) GetCoinSellerProfile() *CoinSellerProfile { @@ -2190,6 +2339,102 @@ func (x *GetCoinSellerProfileResponse) GetCoinSellerProfile() *CoinSellerProfile return nil } +type ListActiveCoinSellersInMyRegionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActiveCoinSellersInMyRegionRequest) Reset() { + *x = ListActiveCoinSellersInMyRegionRequest{} + mi := &file_proto_user_v1_host_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActiveCoinSellersInMyRegionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActiveCoinSellersInMyRegionRequest) ProtoMessage() {} + +func (x *ListActiveCoinSellersInMyRegionRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_user_v1_host_proto_msgTypes[29] + 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 ListActiveCoinSellersInMyRegionRequest.ProtoReflect.Descriptor instead. +func (*ListActiveCoinSellersInMyRegionRequest) Descriptor() ([]byte, []int) { + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{29} +} + +func (x *ListActiveCoinSellersInMyRegionRequest) GetMeta() *RequestMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *ListActiveCoinSellersInMyRegionRequest) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +type ListActiveCoinSellersInMyRegionResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + CoinSellers []*CoinSellerListItem `protobuf:"bytes,1,rep,name=coin_sellers,json=coinSellers,proto3" json:"coin_sellers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListActiveCoinSellersInMyRegionResponse) Reset() { + *x = ListActiveCoinSellersInMyRegionResponse{} + mi := &file_proto_user_v1_host_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListActiveCoinSellersInMyRegionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActiveCoinSellersInMyRegionResponse) ProtoMessage() {} + +func (x *ListActiveCoinSellersInMyRegionResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_user_v1_host_proto_msgTypes[30] + 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 ListActiveCoinSellersInMyRegionResponse.ProtoReflect.Descriptor instead. +func (*ListActiveCoinSellersInMyRegionResponse) Descriptor() ([]byte, []int) { + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{30} +} + +func (x *ListActiveCoinSellersInMyRegionResponse) GetCoinSellers() []*CoinSellerListItem { + if x != nil { + return x.CoinSellers + } + return nil +} + type GetUserRoleSummaryRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` @@ -2200,7 +2445,7 @@ type GetUserRoleSummaryRequest struct { func (x *GetUserRoleSummaryRequest) Reset() { *x = GetUserRoleSummaryRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[28] + mi := &file_proto_user_v1_host_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2212,7 +2457,7 @@ func (x *GetUserRoleSummaryRequest) String() string { func (*GetUserRoleSummaryRequest) ProtoMessage() {} func (x *GetUserRoleSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[28] + mi := &file_proto_user_v1_host_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2225,7 +2470,7 @@ func (x *GetUserRoleSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserRoleSummaryRequest.ProtoReflect.Descriptor instead. func (*GetUserRoleSummaryRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{28} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{31} } func (x *GetUserRoleSummaryRequest) GetMeta() *RequestMeta { @@ -2251,7 +2496,7 @@ type GetUserRoleSummaryResponse struct { func (x *GetUserRoleSummaryResponse) Reset() { *x = GetUserRoleSummaryResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[29] + mi := &file_proto_user_v1_host_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2263,7 +2508,7 @@ func (x *GetUserRoleSummaryResponse) String() string { func (*GetUserRoleSummaryResponse) ProtoMessage() {} func (x *GetUserRoleSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[29] + mi := &file_proto_user_v1_host_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2276,7 +2521,7 @@ func (x *GetUserRoleSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserRoleSummaryResponse.ProtoReflect.Descriptor instead. func (*GetUserRoleSummaryResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{29} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{32} } func (x *GetUserRoleSummaryResponse) GetSummary() *UserRoleSummary { @@ -2297,7 +2542,7 @@ type CheckBusinessCapabilityRequest struct { func (x *CheckBusinessCapabilityRequest) Reset() { *x = CheckBusinessCapabilityRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[30] + mi := &file_proto_user_v1_host_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2309,7 +2554,7 @@ func (x *CheckBusinessCapabilityRequest) String() string { func (*CheckBusinessCapabilityRequest) ProtoMessage() {} func (x *CheckBusinessCapabilityRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[30] + mi := &file_proto_user_v1_host_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2322,7 +2567,7 @@ func (x *CheckBusinessCapabilityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckBusinessCapabilityRequest.ProtoReflect.Descriptor instead. func (*CheckBusinessCapabilityRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{30} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{33} } func (x *CheckBusinessCapabilityRequest) GetMeta() *RequestMeta { @@ -2356,7 +2601,7 @@ type CheckBusinessCapabilityResponse struct { func (x *CheckBusinessCapabilityResponse) Reset() { *x = CheckBusinessCapabilityResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[31] + mi := &file_proto_user_v1_host_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2368,7 +2613,7 @@ func (x *CheckBusinessCapabilityResponse) String() string { func (*CheckBusinessCapabilityResponse) ProtoMessage() {} func (x *CheckBusinessCapabilityResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[31] + mi := &file_proto_user_v1_host_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2381,7 +2626,7 @@ func (x *CheckBusinessCapabilityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckBusinessCapabilityResponse.ProtoReflect.Descriptor instead. func (*CheckBusinessCapabilityResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{31} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{34} } func (x *CheckBusinessCapabilityResponse) GetAllowed() bool { @@ -2409,7 +2654,7 @@ type GetAgencyMembersRequest struct { func (x *GetAgencyMembersRequest) Reset() { *x = GetAgencyMembersRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[32] + mi := &file_proto_user_v1_host_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2421,7 +2666,7 @@ func (x *GetAgencyMembersRequest) String() string { func (*GetAgencyMembersRequest) ProtoMessage() {} func (x *GetAgencyMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[32] + mi := &file_proto_user_v1_host_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2434,7 +2679,7 @@ func (x *GetAgencyMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyMembersRequest.ProtoReflect.Descriptor instead. func (*GetAgencyMembersRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{32} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{35} } func (x *GetAgencyMembersRequest) GetMeta() *RequestMeta { @@ -2467,7 +2712,7 @@ type GetAgencyMembersResponse struct { func (x *GetAgencyMembersResponse) Reset() { *x = GetAgencyMembersResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[33] + mi := &file_proto_user_v1_host_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2479,7 +2724,7 @@ func (x *GetAgencyMembersResponse) String() string { func (*GetAgencyMembersResponse) ProtoMessage() {} func (x *GetAgencyMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[33] + mi := &file_proto_user_v1_host_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2492,7 +2737,7 @@ func (x *GetAgencyMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyMembersResponse.ProtoReflect.Descriptor instead. func (*GetAgencyMembersResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{33} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{36} } func (x *GetAgencyMembersResponse) GetMemberships() []*AgencyMembership { @@ -2513,7 +2758,7 @@ type GetAgencyApplicationsRequest struct { func (x *GetAgencyApplicationsRequest) Reset() { *x = GetAgencyApplicationsRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[34] + mi := &file_proto_user_v1_host_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2525,7 +2770,7 @@ func (x *GetAgencyApplicationsRequest) String() string { func (*GetAgencyApplicationsRequest) ProtoMessage() {} func (x *GetAgencyApplicationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[34] + mi := &file_proto_user_v1_host_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2538,7 +2783,7 @@ func (x *GetAgencyApplicationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyApplicationsRequest.ProtoReflect.Descriptor instead. func (*GetAgencyApplicationsRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{34} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{37} } func (x *GetAgencyApplicationsRequest) GetMeta() *RequestMeta { @@ -2571,7 +2816,7 @@ type GetAgencyApplicationsResponse struct { func (x *GetAgencyApplicationsResponse) Reset() { *x = GetAgencyApplicationsResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[35] + mi := &file_proto_user_v1_host_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2583,7 +2828,7 @@ func (x *GetAgencyApplicationsResponse) String() string { func (*GetAgencyApplicationsResponse) ProtoMessage() {} func (x *GetAgencyApplicationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[35] + mi := &file_proto_user_v1_host_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2596,7 +2841,7 @@ func (x *GetAgencyApplicationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgencyApplicationsResponse.ProtoReflect.Descriptor instead. func (*GetAgencyApplicationsResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{35} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{38} } func (x *GetAgencyApplicationsResponse) GetApplications() []*AgencyApplication { @@ -2620,7 +2865,7 @@ type CreateBDLeaderRequest struct { func (x *CreateBDLeaderRequest) Reset() { *x = CreateBDLeaderRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[36] + mi := &file_proto_user_v1_host_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2632,7 +2877,7 @@ func (x *CreateBDLeaderRequest) String() string { func (*CreateBDLeaderRequest) ProtoMessage() {} func (x *CreateBDLeaderRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[36] + mi := &file_proto_user_v1_host_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2645,7 +2890,7 @@ func (x *CreateBDLeaderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBDLeaderRequest.ProtoReflect.Descriptor instead. func (*CreateBDLeaderRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{36} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{39} } func (x *CreateBDLeaderRequest) GetMeta() *RequestMeta { @@ -2699,7 +2944,7 @@ type CreateBDLeaderResponse struct { func (x *CreateBDLeaderResponse) Reset() { *x = CreateBDLeaderResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[37] + mi := &file_proto_user_v1_host_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2711,7 +2956,7 @@ func (x *CreateBDLeaderResponse) String() string { func (*CreateBDLeaderResponse) ProtoMessage() {} func (x *CreateBDLeaderResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[37] + mi := &file_proto_user_v1_host_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2724,7 +2969,7 @@ func (x *CreateBDLeaderResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBDLeaderResponse.ProtoReflect.Descriptor instead. func (*CreateBDLeaderResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{37} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{40} } func (x *CreateBDLeaderResponse) GetBdProfile() *BDProfile { @@ -2748,7 +2993,7 @@ type CreateBDRequest struct { func (x *CreateBDRequest) Reset() { *x = CreateBDRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[38] + mi := &file_proto_user_v1_host_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2760,7 +3005,7 @@ func (x *CreateBDRequest) String() string { func (*CreateBDRequest) ProtoMessage() {} func (x *CreateBDRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[38] + mi := &file_proto_user_v1_host_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2773,7 +3018,7 @@ func (x *CreateBDRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBDRequest.ProtoReflect.Descriptor instead. func (*CreateBDRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{38} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{41} } func (x *CreateBDRequest) GetMeta() *RequestMeta { @@ -2827,7 +3072,7 @@ type CreateBDResponse struct { func (x *CreateBDResponse) Reset() { *x = CreateBDResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[39] + mi := &file_proto_user_v1_host_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +3084,7 @@ func (x *CreateBDResponse) String() string { func (*CreateBDResponse) ProtoMessage() {} func (x *CreateBDResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[39] + mi := &file_proto_user_v1_host_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +3097,7 @@ func (x *CreateBDResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBDResponse.ProtoReflect.Descriptor instead. func (*CreateBDResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{39} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{42} } func (x *CreateBDResponse) GetBdProfile() *BDProfile { @@ -2876,7 +3121,7 @@ type SetBDStatusRequest struct { func (x *SetBDStatusRequest) Reset() { *x = SetBDStatusRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[40] + mi := &file_proto_user_v1_host_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2888,7 +3133,7 @@ func (x *SetBDStatusRequest) String() string { func (*SetBDStatusRequest) ProtoMessage() {} func (x *SetBDStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[40] + mi := &file_proto_user_v1_host_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2901,7 +3146,7 @@ func (x *SetBDStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetBDStatusRequest.ProtoReflect.Descriptor instead. func (*SetBDStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{40} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{43} } func (x *SetBDStatusRequest) GetMeta() *RequestMeta { @@ -2955,7 +3200,7 @@ type SetBDStatusResponse struct { func (x *SetBDStatusResponse) Reset() { *x = SetBDStatusResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[41] + mi := &file_proto_user_v1_host_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2967,7 +3212,7 @@ func (x *SetBDStatusResponse) String() string { func (*SetBDStatusResponse) ProtoMessage() {} func (x *SetBDStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[41] + mi := &file_proto_user_v1_host_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2980,7 +3225,7 @@ func (x *SetBDStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetBDStatusResponse.ProtoReflect.Descriptor instead. func (*SetBDStatusResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{41} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{44} } func (x *SetBDStatusResponse) GetBdProfile() *BDProfile { @@ -3003,7 +3248,7 @@ type CreateCoinSellerRequest struct { func (x *CreateCoinSellerRequest) Reset() { *x = CreateCoinSellerRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[42] + mi := &file_proto_user_v1_host_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3015,7 +3260,7 @@ func (x *CreateCoinSellerRequest) String() string { func (*CreateCoinSellerRequest) ProtoMessage() {} func (x *CreateCoinSellerRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[42] + mi := &file_proto_user_v1_host_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3028,7 +3273,7 @@ func (x *CreateCoinSellerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateCoinSellerRequest.ProtoReflect.Descriptor instead. func (*CreateCoinSellerRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{42} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{45} } func (x *CreateCoinSellerRequest) GetMeta() *RequestMeta { @@ -3075,7 +3320,7 @@ type CreateCoinSellerResponse struct { func (x *CreateCoinSellerResponse) Reset() { *x = CreateCoinSellerResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[43] + mi := &file_proto_user_v1_host_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3087,7 +3332,7 @@ func (x *CreateCoinSellerResponse) String() string { func (*CreateCoinSellerResponse) ProtoMessage() {} func (x *CreateCoinSellerResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[43] + mi := &file_proto_user_v1_host_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3100,7 +3345,7 @@ func (x *CreateCoinSellerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateCoinSellerResponse.ProtoReflect.Descriptor instead. func (*CreateCoinSellerResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{43} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{46} } func (x *CreateCoinSellerResponse) GetCoinSellerProfile() *CoinSellerProfile { @@ -3124,7 +3369,7 @@ type SetCoinSellerStatusRequest struct { func (x *SetCoinSellerStatusRequest) Reset() { *x = SetCoinSellerStatusRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[44] + mi := &file_proto_user_v1_host_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3136,7 +3381,7 @@ func (x *SetCoinSellerStatusRequest) String() string { func (*SetCoinSellerStatusRequest) ProtoMessage() {} func (x *SetCoinSellerStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[44] + mi := &file_proto_user_v1_host_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3149,7 +3394,7 @@ func (x *SetCoinSellerStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCoinSellerStatusRequest.ProtoReflect.Descriptor instead. func (*SetCoinSellerStatusRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{44} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{47} } func (x *SetCoinSellerStatusRequest) GetMeta() *RequestMeta { @@ -3203,7 +3448,7 @@ type SetCoinSellerStatusResponse struct { func (x *SetCoinSellerStatusResponse) Reset() { *x = SetCoinSellerStatusResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[45] + mi := &file_proto_user_v1_host_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3215,7 +3460,7 @@ func (x *SetCoinSellerStatusResponse) String() string { func (*SetCoinSellerStatusResponse) ProtoMessage() {} func (x *SetCoinSellerStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[45] + mi := &file_proto_user_v1_host_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3228,7 +3473,7 @@ func (x *SetCoinSellerStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCoinSellerStatusResponse.ProtoReflect.Descriptor instead. func (*SetCoinSellerStatusResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{45} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{48} } func (x *SetCoinSellerStatusResponse) GetCoinSellerProfile() *CoinSellerProfile { @@ -3255,7 +3500,7 @@ type CreateAgencyRequest struct { func (x *CreateAgencyRequest) Reset() { *x = CreateAgencyRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[46] + mi := &file_proto_user_v1_host_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3267,7 +3512,7 @@ func (x *CreateAgencyRequest) String() string { func (*CreateAgencyRequest) ProtoMessage() {} func (x *CreateAgencyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[46] + mi := &file_proto_user_v1_host_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3280,7 +3525,7 @@ func (x *CreateAgencyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAgencyRequest.ProtoReflect.Descriptor instead. func (*CreateAgencyRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{46} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{49} } func (x *CreateAgencyRequest) GetMeta() *RequestMeta { @@ -3357,7 +3602,7 @@ type CreateAgencyResponse struct { func (x *CreateAgencyResponse) Reset() { *x = CreateAgencyResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[47] + mi := &file_proto_user_v1_host_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3369,7 +3614,7 @@ func (x *CreateAgencyResponse) String() string { func (*CreateAgencyResponse) ProtoMessage() {} func (x *CreateAgencyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[47] + mi := &file_proto_user_v1_host_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3382,7 +3627,7 @@ func (x *CreateAgencyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAgencyResponse.ProtoReflect.Descriptor instead. func (*CreateAgencyResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{47} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{50} } func (x *CreateAgencyResponse) GetAgency() *Agency { @@ -3419,7 +3664,7 @@ type CloseAgencyRequest struct { func (x *CloseAgencyRequest) Reset() { *x = CloseAgencyRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[48] + mi := &file_proto_user_v1_host_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3431,7 +3676,7 @@ func (x *CloseAgencyRequest) String() string { func (*CloseAgencyRequest) ProtoMessage() {} func (x *CloseAgencyRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[48] + mi := &file_proto_user_v1_host_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3444,7 +3689,7 @@ func (x *CloseAgencyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseAgencyRequest.ProtoReflect.Descriptor instead. func (*CloseAgencyRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{48} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{51} } func (x *CloseAgencyRequest) GetMeta() *RequestMeta { @@ -3491,7 +3736,7 @@ type CloseAgencyResponse struct { func (x *CloseAgencyResponse) Reset() { *x = CloseAgencyResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[49] + mi := &file_proto_user_v1_host_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3503,7 +3748,7 @@ func (x *CloseAgencyResponse) String() string { func (*CloseAgencyResponse) ProtoMessage() {} func (x *CloseAgencyResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[49] + mi := &file_proto_user_v1_host_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3516,7 +3761,7 @@ func (x *CloseAgencyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseAgencyResponse.ProtoReflect.Descriptor instead. func (*CloseAgencyResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{49} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{52} } func (x *CloseAgencyResponse) GetAgency() *Agency { @@ -3540,7 +3785,7 @@ type SetAgencyJoinEnabledRequest struct { func (x *SetAgencyJoinEnabledRequest) Reset() { *x = SetAgencyJoinEnabledRequest{} - mi := &file_proto_user_v1_host_proto_msgTypes[50] + mi := &file_proto_user_v1_host_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3552,7 +3797,7 @@ func (x *SetAgencyJoinEnabledRequest) String() string { func (*SetAgencyJoinEnabledRequest) ProtoMessage() {} func (x *SetAgencyJoinEnabledRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[50] + mi := &file_proto_user_v1_host_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3565,7 +3810,7 @@ func (x *SetAgencyJoinEnabledRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAgencyJoinEnabledRequest.ProtoReflect.Descriptor instead. func (*SetAgencyJoinEnabledRequest) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{50} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{53} } func (x *SetAgencyJoinEnabledRequest) GetMeta() *RequestMeta { @@ -3619,7 +3864,7 @@ type SetAgencyJoinEnabledResponse struct { func (x *SetAgencyJoinEnabledResponse) Reset() { *x = SetAgencyJoinEnabledResponse{} - mi := &file_proto_user_v1_host_proto_msgTypes[51] + mi := &file_proto_user_v1_host_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3631,7 +3876,7 @@ func (x *SetAgencyJoinEnabledResponse) String() string { func (*SetAgencyJoinEnabledResponse) ProtoMessage() {} func (x *SetAgencyJoinEnabledResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_user_v1_host_proto_msgTypes[51] + mi := &file_proto_user_v1_host_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3644,7 +3889,7 @@ func (x *SetAgencyJoinEnabledResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAgencyJoinEnabledResponse.ProtoReflect.Descriptor instead. func (*SetAgencyJoinEnabledResponse) Descriptor() ([]byte, []int) { - return file_proto_user_v1_host_proto_rawDescGZIP(), []int{51} + return file_proto_user_v1_host_proto_rawDescGZIP(), []int{54} } func (x *SetAgencyJoinEnabledResponse) GetAgency() *Agency { @@ -3697,7 +3942,26 @@ const file_proto_user_v1_host_proto_rawDesc = "" + "\x13merchant_asset_type\x18\x03 \x01(\tR\x11merchantAssetType\x12+\n" + "\x12created_by_user_id\x18\x04 \x01(\x03R\x0fcreatedByUserId\x12\"\n" + "\rcreated_at_ms\x18\x05 \x01(\x03R\vcreatedAtMs\x12\"\n" + - "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\xb4\x03\n" + + "\rupdated_at_ms\x18\x06 \x01(\x03R\vupdatedAtMs\"\xeb\x03\n" + + "\x12CoinSellerListItem\x12\x17\n" + + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12&\n" + + "\x0fdisplay_user_id\x18\x02 \x01(\tR\rdisplayUserId\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\x12\x16\n" + + "\x06avatar\x18\x04 \x01(\tR\x06avatar\x12\x1d\n" + + "\n" + + "country_id\x18\x05 \x01(\x03R\tcountryId\x12!\n" + + "\fcountry_code\x18\x06 \x01(\tR\vcountryCode\x12!\n" + + "\fcountry_name\x18\a \x01(\tR\vcountryName\x120\n" + + "\x14country_display_name\x18\b \x01(\tR\x12countryDisplayName\x12\x1b\n" + + "\tregion_id\x18\t \x01(\x03R\bregionId\x12\x1f\n" + + "\vregion_code\x18\n" + + " \x01(\tR\n" + + "regionCode\x12\x1f\n" + + "\vregion_name\x18\v \x01(\tR\n" + + "regionName\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12.\n" + + "\x13merchant_asset_type\x18\r \x01(\tR\x11merchantAssetType\x12\"\n" + + "\rupdated_at_ms\x18\x0e \x01(\x03R\vupdatedAtMs\"\xb4\x03\n" + "\x0fUserRoleSummary\x12\x17\n" + "\auser_id\x18\x01 \x01(\x03R\x06userId\x12\x17\n" + "\ais_host\x18\x02 \x01(\bR\x06isHost\x12\x1b\n" + @@ -3865,7 +4129,12 @@ const file_proto_user_v1_host_proto_rawDesc = "" + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + "\auser_id\x18\x02 \x01(\x03R\x06userId\"p\n" + "\x1cGetCoinSellerProfileResponse\x12P\n" + - "\x13coin_seller_profile\x18\x01 \x01(\v2 .hyapp.user.v1.CoinSellerProfileR\x11coinSellerProfile\"d\n" + + "\x13coin_seller_profile\x18\x01 \x01(\v2 .hyapp.user.v1.CoinSellerProfileR\x11coinSellerProfile\"q\n" + + "&ListActiveCoinSellersInMyRegionRequest\x12.\n" + + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + + "\auser_id\x18\x02 \x01(\x03R\x06userId\"o\n" + + "'ListActiveCoinSellersInMyRegionResponse\x12D\n" + + "\fcoin_sellers\x18\x01 \x03(\v2!.hyapp.user.v1.CoinSellerListItemR\vcoinSellers\"d\n" + "\x19GetUserRoleSummaryRequest\x12.\n" + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.user.v1.RequestMetaR\x04meta\x12\x17\n" + "\auser_id\x18\x02 \x01(\x03R\x06userId\"V\n" + @@ -3979,7 +4248,7 @@ const file_proto_user_v1_host_proto_rawDesc = "" + "\fjoin_enabled\x18\x05 \x01(\bR\vjoinEnabled\x12\x16\n" + "\x06reason\x18\x06 \x01(\tR\x06reason\"M\n" + "\x1cSetAgencyJoinEnabledResponse\x12-\n" + - "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency2\xa6\v\n" + + "\x06agency\x18\x01 \x01(\v2\x15.hyapp.user.v1.AgencyR\x06agency2\xb9\f\n" + "\x0fUserHostService\x12]\n" + "\x0eSearchAgencies\x12$.hyapp.user.v1.SearchAgenciesRequest\x1a%.hyapp.user.v1.SearchAgenciesResponse\x12Z\n" + "\rApplyToAgency\x12#.hyapp.user.v1.ApplyToAgencyRequest\x1a$.hyapp.user.v1.ApplyToAgencyResponse\x12x\n" + @@ -3990,7 +4259,8 @@ const file_proto_user_v1_host_proto_rawDesc = "" + "\x15ProcessRoleInvitation\x12+.hyapp.user.v1.ProcessRoleInvitationRequest\x1a,.hyapp.user.v1.ProcessRoleInvitationResponse\x12]\n" + "\x0eGetHostProfile\x12$.hyapp.user.v1.GetHostProfileRequest\x1a%.hyapp.user.v1.GetHostProfileResponse\x12W\n" + "\fGetBDProfile\x12\".hyapp.user.v1.GetBDProfileRequest\x1a#.hyapp.user.v1.GetBDProfileResponse\x12o\n" + - "\x14GetCoinSellerProfile\x12*.hyapp.user.v1.GetCoinSellerProfileRequest\x1a+.hyapp.user.v1.GetCoinSellerProfileResponse\x12i\n" + + "\x14GetCoinSellerProfile\x12*.hyapp.user.v1.GetCoinSellerProfileRequest\x1a+.hyapp.user.v1.GetCoinSellerProfileResponse\x12\x90\x01\n" + + "\x1fListActiveCoinSellersInMyRegion\x125.hyapp.user.v1.ListActiveCoinSellersInMyRegionRequest\x1a6.hyapp.user.v1.ListActiveCoinSellersInMyRegionResponse\x12i\n" + "\x12GetUserRoleSummary\x12(.hyapp.user.v1.GetUserRoleSummaryRequest\x1a).hyapp.user.v1.GetUserRoleSummaryResponse\x12x\n" + "\x17CheckBusinessCapability\x12-.hyapp.user.v1.CheckBusinessCapabilityRequest\x1a..hyapp.user.v1.CheckBusinessCapabilityResponse\x12c\n" + "\x10GetAgencyMembers\x12&.hyapp.user.v1.GetAgencyMembersRequest\x1a'.hyapp.user.v1.GetAgencyMembersResponse\x12r\n" + @@ -4017,164 +4287,171 @@ func file_proto_user_v1_host_proto_rawDescGZIP() []byte { return file_proto_user_v1_host_proto_rawDescData } -var file_proto_user_v1_host_proto_msgTypes = make([]protoimpl.MessageInfo, 52) +var file_proto_user_v1_host_proto_msgTypes = make([]protoimpl.MessageInfo, 55) var file_proto_user_v1_host_proto_goTypes = []any{ - (*HostProfile)(nil), // 0: hyapp.user.v1.HostProfile - (*Agency)(nil), // 1: hyapp.user.v1.Agency - (*BDProfile)(nil), // 2: hyapp.user.v1.BDProfile - (*CoinSellerProfile)(nil), // 3: hyapp.user.v1.CoinSellerProfile - (*UserRoleSummary)(nil), // 4: hyapp.user.v1.UserRoleSummary - (*AgencyMembership)(nil), // 5: hyapp.user.v1.AgencyMembership - (*AgencyApplication)(nil), // 6: hyapp.user.v1.AgencyApplication - (*RoleInvitation)(nil), // 7: hyapp.user.v1.RoleInvitation - (*SearchAgenciesRequest)(nil), // 8: hyapp.user.v1.SearchAgenciesRequest - (*SearchAgenciesResponse)(nil), // 9: hyapp.user.v1.SearchAgenciesResponse - (*ApplyToAgencyRequest)(nil), // 10: hyapp.user.v1.ApplyToAgencyRequest - (*ApplyToAgencyResponse)(nil), // 11: hyapp.user.v1.ApplyToAgencyResponse - (*ReviewAgencyApplicationRequest)(nil), // 12: hyapp.user.v1.ReviewAgencyApplicationRequest - (*ReviewAgencyApplicationResponse)(nil), // 13: hyapp.user.v1.ReviewAgencyApplicationResponse - (*KickAgencyHostRequest)(nil), // 14: hyapp.user.v1.KickAgencyHostRequest - (*KickAgencyHostResponse)(nil), // 15: hyapp.user.v1.KickAgencyHostResponse - (*InviteAgencyRequest)(nil), // 16: hyapp.user.v1.InviteAgencyRequest - (*InviteAgencyResponse)(nil), // 17: hyapp.user.v1.InviteAgencyResponse - (*InviteBDRequest)(nil), // 18: hyapp.user.v1.InviteBDRequest - (*InviteBDResponse)(nil), // 19: hyapp.user.v1.InviteBDResponse - (*ProcessRoleInvitationRequest)(nil), // 20: hyapp.user.v1.ProcessRoleInvitationRequest - (*ProcessRoleInvitationResponse)(nil), // 21: hyapp.user.v1.ProcessRoleInvitationResponse - (*GetHostProfileRequest)(nil), // 22: hyapp.user.v1.GetHostProfileRequest - (*GetHostProfileResponse)(nil), // 23: hyapp.user.v1.GetHostProfileResponse - (*GetBDProfileRequest)(nil), // 24: hyapp.user.v1.GetBDProfileRequest - (*GetBDProfileResponse)(nil), // 25: hyapp.user.v1.GetBDProfileResponse - (*GetCoinSellerProfileRequest)(nil), // 26: hyapp.user.v1.GetCoinSellerProfileRequest - (*GetCoinSellerProfileResponse)(nil), // 27: hyapp.user.v1.GetCoinSellerProfileResponse - (*GetUserRoleSummaryRequest)(nil), // 28: hyapp.user.v1.GetUserRoleSummaryRequest - (*GetUserRoleSummaryResponse)(nil), // 29: hyapp.user.v1.GetUserRoleSummaryResponse - (*CheckBusinessCapabilityRequest)(nil), // 30: hyapp.user.v1.CheckBusinessCapabilityRequest - (*CheckBusinessCapabilityResponse)(nil), // 31: hyapp.user.v1.CheckBusinessCapabilityResponse - (*GetAgencyMembersRequest)(nil), // 32: hyapp.user.v1.GetAgencyMembersRequest - (*GetAgencyMembersResponse)(nil), // 33: hyapp.user.v1.GetAgencyMembersResponse - (*GetAgencyApplicationsRequest)(nil), // 34: hyapp.user.v1.GetAgencyApplicationsRequest - (*GetAgencyApplicationsResponse)(nil), // 35: hyapp.user.v1.GetAgencyApplicationsResponse - (*CreateBDLeaderRequest)(nil), // 36: hyapp.user.v1.CreateBDLeaderRequest - (*CreateBDLeaderResponse)(nil), // 37: hyapp.user.v1.CreateBDLeaderResponse - (*CreateBDRequest)(nil), // 38: hyapp.user.v1.CreateBDRequest - (*CreateBDResponse)(nil), // 39: hyapp.user.v1.CreateBDResponse - (*SetBDStatusRequest)(nil), // 40: hyapp.user.v1.SetBDStatusRequest - (*SetBDStatusResponse)(nil), // 41: hyapp.user.v1.SetBDStatusResponse - (*CreateCoinSellerRequest)(nil), // 42: hyapp.user.v1.CreateCoinSellerRequest - (*CreateCoinSellerResponse)(nil), // 43: hyapp.user.v1.CreateCoinSellerResponse - (*SetCoinSellerStatusRequest)(nil), // 44: hyapp.user.v1.SetCoinSellerStatusRequest - (*SetCoinSellerStatusResponse)(nil), // 45: hyapp.user.v1.SetCoinSellerStatusResponse - (*CreateAgencyRequest)(nil), // 46: hyapp.user.v1.CreateAgencyRequest - (*CreateAgencyResponse)(nil), // 47: hyapp.user.v1.CreateAgencyResponse - (*CloseAgencyRequest)(nil), // 48: hyapp.user.v1.CloseAgencyRequest - (*CloseAgencyResponse)(nil), // 49: hyapp.user.v1.CloseAgencyResponse - (*SetAgencyJoinEnabledRequest)(nil), // 50: hyapp.user.v1.SetAgencyJoinEnabledRequest - (*SetAgencyJoinEnabledResponse)(nil), // 51: hyapp.user.v1.SetAgencyJoinEnabledResponse - (*RequestMeta)(nil), // 52: hyapp.user.v1.RequestMeta + (*HostProfile)(nil), // 0: hyapp.user.v1.HostProfile + (*Agency)(nil), // 1: hyapp.user.v1.Agency + (*BDProfile)(nil), // 2: hyapp.user.v1.BDProfile + (*CoinSellerProfile)(nil), // 3: hyapp.user.v1.CoinSellerProfile + (*CoinSellerListItem)(nil), // 4: hyapp.user.v1.CoinSellerListItem + (*UserRoleSummary)(nil), // 5: hyapp.user.v1.UserRoleSummary + (*AgencyMembership)(nil), // 6: hyapp.user.v1.AgencyMembership + (*AgencyApplication)(nil), // 7: hyapp.user.v1.AgencyApplication + (*RoleInvitation)(nil), // 8: hyapp.user.v1.RoleInvitation + (*SearchAgenciesRequest)(nil), // 9: hyapp.user.v1.SearchAgenciesRequest + (*SearchAgenciesResponse)(nil), // 10: hyapp.user.v1.SearchAgenciesResponse + (*ApplyToAgencyRequest)(nil), // 11: hyapp.user.v1.ApplyToAgencyRequest + (*ApplyToAgencyResponse)(nil), // 12: hyapp.user.v1.ApplyToAgencyResponse + (*ReviewAgencyApplicationRequest)(nil), // 13: hyapp.user.v1.ReviewAgencyApplicationRequest + (*ReviewAgencyApplicationResponse)(nil), // 14: hyapp.user.v1.ReviewAgencyApplicationResponse + (*KickAgencyHostRequest)(nil), // 15: hyapp.user.v1.KickAgencyHostRequest + (*KickAgencyHostResponse)(nil), // 16: hyapp.user.v1.KickAgencyHostResponse + (*InviteAgencyRequest)(nil), // 17: hyapp.user.v1.InviteAgencyRequest + (*InviteAgencyResponse)(nil), // 18: hyapp.user.v1.InviteAgencyResponse + (*InviteBDRequest)(nil), // 19: hyapp.user.v1.InviteBDRequest + (*InviteBDResponse)(nil), // 20: hyapp.user.v1.InviteBDResponse + (*ProcessRoleInvitationRequest)(nil), // 21: hyapp.user.v1.ProcessRoleInvitationRequest + (*ProcessRoleInvitationResponse)(nil), // 22: hyapp.user.v1.ProcessRoleInvitationResponse + (*GetHostProfileRequest)(nil), // 23: hyapp.user.v1.GetHostProfileRequest + (*GetHostProfileResponse)(nil), // 24: hyapp.user.v1.GetHostProfileResponse + (*GetBDProfileRequest)(nil), // 25: hyapp.user.v1.GetBDProfileRequest + (*GetBDProfileResponse)(nil), // 26: hyapp.user.v1.GetBDProfileResponse + (*GetCoinSellerProfileRequest)(nil), // 27: hyapp.user.v1.GetCoinSellerProfileRequest + (*GetCoinSellerProfileResponse)(nil), // 28: hyapp.user.v1.GetCoinSellerProfileResponse + (*ListActiveCoinSellersInMyRegionRequest)(nil), // 29: hyapp.user.v1.ListActiveCoinSellersInMyRegionRequest + (*ListActiveCoinSellersInMyRegionResponse)(nil), // 30: hyapp.user.v1.ListActiveCoinSellersInMyRegionResponse + (*GetUserRoleSummaryRequest)(nil), // 31: hyapp.user.v1.GetUserRoleSummaryRequest + (*GetUserRoleSummaryResponse)(nil), // 32: hyapp.user.v1.GetUserRoleSummaryResponse + (*CheckBusinessCapabilityRequest)(nil), // 33: hyapp.user.v1.CheckBusinessCapabilityRequest + (*CheckBusinessCapabilityResponse)(nil), // 34: hyapp.user.v1.CheckBusinessCapabilityResponse + (*GetAgencyMembersRequest)(nil), // 35: hyapp.user.v1.GetAgencyMembersRequest + (*GetAgencyMembersResponse)(nil), // 36: hyapp.user.v1.GetAgencyMembersResponse + (*GetAgencyApplicationsRequest)(nil), // 37: hyapp.user.v1.GetAgencyApplicationsRequest + (*GetAgencyApplicationsResponse)(nil), // 38: hyapp.user.v1.GetAgencyApplicationsResponse + (*CreateBDLeaderRequest)(nil), // 39: hyapp.user.v1.CreateBDLeaderRequest + (*CreateBDLeaderResponse)(nil), // 40: hyapp.user.v1.CreateBDLeaderResponse + (*CreateBDRequest)(nil), // 41: hyapp.user.v1.CreateBDRequest + (*CreateBDResponse)(nil), // 42: hyapp.user.v1.CreateBDResponse + (*SetBDStatusRequest)(nil), // 43: hyapp.user.v1.SetBDStatusRequest + (*SetBDStatusResponse)(nil), // 44: hyapp.user.v1.SetBDStatusResponse + (*CreateCoinSellerRequest)(nil), // 45: hyapp.user.v1.CreateCoinSellerRequest + (*CreateCoinSellerResponse)(nil), // 46: hyapp.user.v1.CreateCoinSellerResponse + (*SetCoinSellerStatusRequest)(nil), // 47: hyapp.user.v1.SetCoinSellerStatusRequest + (*SetCoinSellerStatusResponse)(nil), // 48: hyapp.user.v1.SetCoinSellerStatusResponse + (*CreateAgencyRequest)(nil), // 49: hyapp.user.v1.CreateAgencyRequest + (*CreateAgencyResponse)(nil), // 50: hyapp.user.v1.CreateAgencyResponse + (*CloseAgencyRequest)(nil), // 51: hyapp.user.v1.CloseAgencyRequest + (*CloseAgencyResponse)(nil), // 52: hyapp.user.v1.CloseAgencyResponse + (*SetAgencyJoinEnabledRequest)(nil), // 53: hyapp.user.v1.SetAgencyJoinEnabledRequest + (*SetAgencyJoinEnabledResponse)(nil), // 54: hyapp.user.v1.SetAgencyJoinEnabledResponse + (*RequestMeta)(nil), // 55: hyapp.user.v1.RequestMeta } var file_proto_user_v1_host_proto_depIdxs = []int32{ - 52, // 0: hyapp.user.v1.SearchAgenciesRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 55, // 0: hyapp.user.v1.SearchAgenciesRequest.meta:type_name -> hyapp.user.v1.RequestMeta 1, // 1: hyapp.user.v1.SearchAgenciesResponse.agencies:type_name -> hyapp.user.v1.Agency - 52, // 2: hyapp.user.v1.ApplyToAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 6, // 3: hyapp.user.v1.ApplyToAgencyResponse.application:type_name -> hyapp.user.v1.AgencyApplication - 52, // 4: hyapp.user.v1.ReviewAgencyApplicationRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 6, // 5: hyapp.user.v1.ReviewAgencyApplicationResponse.application:type_name -> hyapp.user.v1.AgencyApplication + 55, // 2: hyapp.user.v1.ApplyToAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 7, // 3: hyapp.user.v1.ApplyToAgencyResponse.application:type_name -> hyapp.user.v1.AgencyApplication + 55, // 4: hyapp.user.v1.ReviewAgencyApplicationRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 7, // 5: hyapp.user.v1.ReviewAgencyApplicationResponse.application:type_name -> hyapp.user.v1.AgencyApplication 0, // 6: hyapp.user.v1.ReviewAgencyApplicationResponse.host_profile:type_name -> hyapp.user.v1.HostProfile - 5, // 7: hyapp.user.v1.ReviewAgencyApplicationResponse.membership:type_name -> hyapp.user.v1.AgencyMembership - 52, // 8: hyapp.user.v1.KickAgencyHostRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 5, // 9: hyapp.user.v1.KickAgencyHostResponse.membership:type_name -> hyapp.user.v1.AgencyMembership + 6, // 7: hyapp.user.v1.ReviewAgencyApplicationResponse.membership:type_name -> hyapp.user.v1.AgencyMembership + 55, // 8: hyapp.user.v1.KickAgencyHostRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 6, // 9: hyapp.user.v1.KickAgencyHostResponse.membership:type_name -> hyapp.user.v1.AgencyMembership 0, // 10: hyapp.user.v1.KickAgencyHostResponse.host_profile:type_name -> hyapp.user.v1.HostProfile - 52, // 11: hyapp.user.v1.InviteAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 7, // 12: hyapp.user.v1.InviteAgencyResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation - 52, // 13: hyapp.user.v1.InviteBDRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 7, // 14: hyapp.user.v1.InviteBDResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation - 52, // 15: hyapp.user.v1.ProcessRoleInvitationRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 7, // 16: hyapp.user.v1.ProcessRoleInvitationResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation + 55, // 11: hyapp.user.v1.InviteAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 8, // 12: hyapp.user.v1.InviteAgencyResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation + 55, // 13: hyapp.user.v1.InviteBDRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 8, // 14: hyapp.user.v1.InviteBDResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation + 55, // 15: hyapp.user.v1.ProcessRoleInvitationRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 8, // 16: hyapp.user.v1.ProcessRoleInvitationResponse.invitation:type_name -> hyapp.user.v1.RoleInvitation 0, // 17: hyapp.user.v1.ProcessRoleInvitationResponse.host_profile:type_name -> hyapp.user.v1.HostProfile 1, // 18: hyapp.user.v1.ProcessRoleInvitationResponse.agency:type_name -> hyapp.user.v1.Agency - 5, // 19: hyapp.user.v1.ProcessRoleInvitationResponse.membership:type_name -> hyapp.user.v1.AgencyMembership + 6, // 19: hyapp.user.v1.ProcessRoleInvitationResponse.membership:type_name -> hyapp.user.v1.AgencyMembership 2, // 20: hyapp.user.v1.ProcessRoleInvitationResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile - 52, // 21: hyapp.user.v1.GetHostProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 55, // 21: hyapp.user.v1.GetHostProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta 0, // 22: hyapp.user.v1.GetHostProfileResponse.host_profile:type_name -> hyapp.user.v1.HostProfile - 52, // 23: hyapp.user.v1.GetBDProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 55, // 23: hyapp.user.v1.GetBDProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta 2, // 24: hyapp.user.v1.GetBDProfileResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile - 52, // 25: hyapp.user.v1.GetCoinSellerProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 55, // 25: hyapp.user.v1.GetCoinSellerProfileRequest.meta:type_name -> hyapp.user.v1.RequestMeta 3, // 26: hyapp.user.v1.GetCoinSellerProfileResponse.coin_seller_profile:type_name -> hyapp.user.v1.CoinSellerProfile - 52, // 27: hyapp.user.v1.GetUserRoleSummaryRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 4, // 28: hyapp.user.v1.GetUserRoleSummaryResponse.summary:type_name -> hyapp.user.v1.UserRoleSummary - 52, // 29: hyapp.user.v1.CheckBusinessCapabilityRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 52, // 30: hyapp.user.v1.GetAgencyMembersRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 5, // 31: hyapp.user.v1.GetAgencyMembersResponse.memberships:type_name -> hyapp.user.v1.AgencyMembership - 52, // 32: hyapp.user.v1.GetAgencyApplicationsRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 6, // 33: hyapp.user.v1.GetAgencyApplicationsResponse.applications:type_name -> hyapp.user.v1.AgencyApplication - 52, // 34: hyapp.user.v1.CreateBDLeaderRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 2, // 35: hyapp.user.v1.CreateBDLeaderResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile - 52, // 36: hyapp.user.v1.CreateBDRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 2, // 37: hyapp.user.v1.CreateBDResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile - 52, // 38: hyapp.user.v1.SetBDStatusRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 2, // 39: hyapp.user.v1.SetBDStatusResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile - 52, // 40: hyapp.user.v1.CreateCoinSellerRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 3, // 41: hyapp.user.v1.CreateCoinSellerResponse.coin_seller_profile:type_name -> hyapp.user.v1.CoinSellerProfile - 52, // 42: hyapp.user.v1.SetCoinSellerStatusRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 3, // 43: hyapp.user.v1.SetCoinSellerStatusResponse.coin_seller_profile:type_name -> hyapp.user.v1.CoinSellerProfile - 52, // 44: hyapp.user.v1.CreateAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 1, // 45: hyapp.user.v1.CreateAgencyResponse.agency:type_name -> hyapp.user.v1.Agency - 0, // 46: hyapp.user.v1.CreateAgencyResponse.host_profile:type_name -> hyapp.user.v1.HostProfile - 5, // 47: hyapp.user.v1.CreateAgencyResponse.membership:type_name -> hyapp.user.v1.AgencyMembership - 52, // 48: hyapp.user.v1.CloseAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 1, // 49: hyapp.user.v1.CloseAgencyResponse.agency:type_name -> hyapp.user.v1.Agency - 52, // 50: hyapp.user.v1.SetAgencyJoinEnabledRequest.meta:type_name -> hyapp.user.v1.RequestMeta - 1, // 51: hyapp.user.v1.SetAgencyJoinEnabledResponse.agency:type_name -> hyapp.user.v1.Agency - 8, // 52: hyapp.user.v1.UserHostService.SearchAgencies:input_type -> hyapp.user.v1.SearchAgenciesRequest - 10, // 53: hyapp.user.v1.UserHostService.ApplyToAgency:input_type -> hyapp.user.v1.ApplyToAgencyRequest - 12, // 54: hyapp.user.v1.UserHostService.ReviewAgencyApplication:input_type -> hyapp.user.v1.ReviewAgencyApplicationRequest - 14, // 55: hyapp.user.v1.UserHostService.KickAgencyHost:input_type -> hyapp.user.v1.KickAgencyHostRequest - 16, // 56: hyapp.user.v1.UserHostService.InviteAgency:input_type -> hyapp.user.v1.InviteAgencyRequest - 18, // 57: hyapp.user.v1.UserHostService.InviteBD:input_type -> hyapp.user.v1.InviteBDRequest - 20, // 58: hyapp.user.v1.UserHostService.ProcessRoleInvitation:input_type -> hyapp.user.v1.ProcessRoleInvitationRequest - 22, // 59: hyapp.user.v1.UserHostService.GetHostProfile:input_type -> hyapp.user.v1.GetHostProfileRequest - 24, // 60: hyapp.user.v1.UserHostService.GetBDProfile:input_type -> hyapp.user.v1.GetBDProfileRequest - 26, // 61: hyapp.user.v1.UserHostService.GetCoinSellerProfile:input_type -> hyapp.user.v1.GetCoinSellerProfileRequest - 28, // 62: hyapp.user.v1.UserHostService.GetUserRoleSummary:input_type -> hyapp.user.v1.GetUserRoleSummaryRequest - 30, // 63: hyapp.user.v1.UserHostService.CheckBusinessCapability:input_type -> hyapp.user.v1.CheckBusinessCapabilityRequest - 32, // 64: hyapp.user.v1.UserHostService.GetAgencyMembers:input_type -> hyapp.user.v1.GetAgencyMembersRequest - 34, // 65: hyapp.user.v1.UserHostService.GetAgencyApplications:input_type -> hyapp.user.v1.GetAgencyApplicationsRequest - 36, // 66: hyapp.user.v1.UserHostAdminService.CreateBDLeader:input_type -> hyapp.user.v1.CreateBDLeaderRequest - 38, // 67: hyapp.user.v1.UserHostAdminService.CreateBD:input_type -> hyapp.user.v1.CreateBDRequest - 40, // 68: hyapp.user.v1.UserHostAdminService.SetBDStatus:input_type -> hyapp.user.v1.SetBDStatusRequest - 42, // 69: hyapp.user.v1.UserHostAdminService.CreateCoinSeller:input_type -> hyapp.user.v1.CreateCoinSellerRequest - 44, // 70: hyapp.user.v1.UserHostAdminService.SetCoinSellerStatus:input_type -> hyapp.user.v1.SetCoinSellerStatusRequest - 46, // 71: hyapp.user.v1.UserHostAdminService.CreateAgency:input_type -> hyapp.user.v1.CreateAgencyRequest - 48, // 72: hyapp.user.v1.UserHostAdminService.CloseAgency:input_type -> hyapp.user.v1.CloseAgencyRequest - 50, // 73: hyapp.user.v1.UserHostAdminService.SetAgencyJoinEnabled:input_type -> hyapp.user.v1.SetAgencyJoinEnabledRequest - 9, // 74: hyapp.user.v1.UserHostService.SearchAgencies:output_type -> hyapp.user.v1.SearchAgenciesResponse - 11, // 75: hyapp.user.v1.UserHostService.ApplyToAgency:output_type -> hyapp.user.v1.ApplyToAgencyResponse - 13, // 76: hyapp.user.v1.UserHostService.ReviewAgencyApplication:output_type -> hyapp.user.v1.ReviewAgencyApplicationResponse - 15, // 77: hyapp.user.v1.UserHostService.KickAgencyHost:output_type -> hyapp.user.v1.KickAgencyHostResponse - 17, // 78: hyapp.user.v1.UserHostService.InviteAgency:output_type -> hyapp.user.v1.InviteAgencyResponse - 19, // 79: hyapp.user.v1.UserHostService.InviteBD:output_type -> hyapp.user.v1.InviteBDResponse - 21, // 80: hyapp.user.v1.UserHostService.ProcessRoleInvitation:output_type -> hyapp.user.v1.ProcessRoleInvitationResponse - 23, // 81: hyapp.user.v1.UserHostService.GetHostProfile:output_type -> hyapp.user.v1.GetHostProfileResponse - 25, // 82: hyapp.user.v1.UserHostService.GetBDProfile:output_type -> hyapp.user.v1.GetBDProfileResponse - 27, // 83: hyapp.user.v1.UserHostService.GetCoinSellerProfile:output_type -> hyapp.user.v1.GetCoinSellerProfileResponse - 29, // 84: hyapp.user.v1.UserHostService.GetUserRoleSummary:output_type -> hyapp.user.v1.GetUserRoleSummaryResponse - 31, // 85: hyapp.user.v1.UserHostService.CheckBusinessCapability:output_type -> hyapp.user.v1.CheckBusinessCapabilityResponse - 33, // 86: hyapp.user.v1.UserHostService.GetAgencyMembers:output_type -> hyapp.user.v1.GetAgencyMembersResponse - 35, // 87: hyapp.user.v1.UserHostService.GetAgencyApplications:output_type -> hyapp.user.v1.GetAgencyApplicationsResponse - 37, // 88: hyapp.user.v1.UserHostAdminService.CreateBDLeader:output_type -> hyapp.user.v1.CreateBDLeaderResponse - 39, // 89: hyapp.user.v1.UserHostAdminService.CreateBD:output_type -> hyapp.user.v1.CreateBDResponse - 41, // 90: hyapp.user.v1.UserHostAdminService.SetBDStatus:output_type -> hyapp.user.v1.SetBDStatusResponse - 43, // 91: hyapp.user.v1.UserHostAdminService.CreateCoinSeller:output_type -> hyapp.user.v1.CreateCoinSellerResponse - 45, // 92: hyapp.user.v1.UserHostAdminService.SetCoinSellerStatus:output_type -> hyapp.user.v1.SetCoinSellerStatusResponse - 47, // 93: hyapp.user.v1.UserHostAdminService.CreateAgency:output_type -> hyapp.user.v1.CreateAgencyResponse - 49, // 94: hyapp.user.v1.UserHostAdminService.CloseAgency:output_type -> hyapp.user.v1.CloseAgencyResponse - 51, // 95: hyapp.user.v1.UserHostAdminService.SetAgencyJoinEnabled:output_type -> hyapp.user.v1.SetAgencyJoinEnabledResponse - 74, // [74:96] is the sub-list for method output_type - 52, // [52:74] is the sub-list for method input_type - 52, // [52:52] is the sub-list for extension type_name - 52, // [52:52] is the sub-list for extension extendee - 0, // [0:52] is the sub-list for field type_name + 55, // 27: hyapp.user.v1.ListActiveCoinSellersInMyRegionRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 4, // 28: hyapp.user.v1.ListActiveCoinSellersInMyRegionResponse.coin_sellers:type_name -> hyapp.user.v1.CoinSellerListItem + 55, // 29: hyapp.user.v1.GetUserRoleSummaryRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 5, // 30: hyapp.user.v1.GetUserRoleSummaryResponse.summary:type_name -> hyapp.user.v1.UserRoleSummary + 55, // 31: hyapp.user.v1.CheckBusinessCapabilityRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 55, // 32: hyapp.user.v1.GetAgencyMembersRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 6, // 33: hyapp.user.v1.GetAgencyMembersResponse.memberships:type_name -> hyapp.user.v1.AgencyMembership + 55, // 34: hyapp.user.v1.GetAgencyApplicationsRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 7, // 35: hyapp.user.v1.GetAgencyApplicationsResponse.applications:type_name -> hyapp.user.v1.AgencyApplication + 55, // 36: hyapp.user.v1.CreateBDLeaderRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 2, // 37: hyapp.user.v1.CreateBDLeaderResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile + 55, // 38: hyapp.user.v1.CreateBDRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 2, // 39: hyapp.user.v1.CreateBDResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile + 55, // 40: hyapp.user.v1.SetBDStatusRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 2, // 41: hyapp.user.v1.SetBDStatusResponse.bd_profile:type_name -> hyapp.user.v1.BDProfile + 55, // 42: hyapp.user.v1.CreateCoinSellerRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 3, // 43: hyapp.user.v1.CreateCoinSellerResponse.coin_seller_profile:type_name -> hyapp.user.v1.CoinSellerProfile + 55, // 44: hyapp.user.v1.SetCoinSellerStatusRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 3, // 45: hyapp.user.v1.SetCoinSellerStatusResponse.coin_seller_profile:type_name -> hyapp.user.v1.CoinSellerProfile + 55, // 46: hyapp.user.v1.CreateAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 1, // 47: hyapp.user.v1.CreateAgencyResponse.agency:type_name -> hyapp.user.v1.Agency + 0, // 48: hyapp.user.v1.CreateAgencyResponse.host_profile:type_name -> hyapp.user.v1.HostProfile + 6, // 49: hyapp.user.v1.CreateAgencyResponse.membership:type_name -> hyapp.user.v1.AgencyMembership + 55, // 50: hyapp.user.v1.CloseAgencyRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 1, // 51: hyapp.user.v1.CloseAgencyResponse.agency:type_name -> hyapp.user.v1.Agency + 55, // 52: hyapp.user.v1.SetAgencyJoinEnabledRequest.meta:type_name -> hyapp.user.v1.RequestMeta + 1, // 53: hyapp.user.v1.SetAgencyJoinEnabledResponse.agency:type_name -> hyapp.user.v1.Agency + 9, // 54: hyapp.user.v1.UserHostService.SearchAgencies:input_type -> hyapp.user.v1.SearchAgenciesRequest + 11, // 55: hyapp.user.v1.UserHostService.ApplyToAgency:input_type -> hyapp.user.v1.ApplyToAgencyRequest + 13, // 56: hyapp.user.v1.UserHostService.ReviewAgencyApplication:input_type -> hyapp.user.v1.ReviewAgencyApplicationRequest + 15, // 57: hyapp.user.v1.UserHostService.KickAgencyHost:input_type -> hyapp.user.v1.KickAgencyHostRequest + 17, // 58: hyapp.user.v1.UserHostService.InviteAgency:input_type -> hyapp.user.v1.InviteAgencyRequest + 19, // 59: hyapp.user.v1.UserHostService.InviteBD:input_type -> hyapp.user.v1.InviteBDRequest + 21, // 60: hyapp.user.v1.UserHostService.ProcessRoleInvitation:input_type -> hyapp.user.v1.ProcessRoleInvitationRequest + 23, // 61: hyapp.user.v1.UserHostService.GetHostProfile:input_type -> hyapp.user.v1.GetHostProfileRequest + 25, // 62: hyapp.user.v1.UserHostService.GetBDProfile:input_type -> hyapp.user.v1.GetBDProfileRequest + 27, // 63: hyapp.user.v1.UserHostService.GetCoinSellerProfile:input_type -> hyapp.user.v1.GetCoinSellerProfileRequest + 29, // 64: hyapp.user.v1.UserHostService.ListActiveCoinSellersInMyRegion:input_type -> hyapp.user.v1.ListActiveCoinSellersInMyRegionRequest + 31, // 65: hyapp.user.v1.UserHostService.GetUserRoleSummary:input_type -> hyapp.user.v1.GetUserRoleSummaryRequest + 33, // 66: hyapp.user.v1.UserHostService.CheckBusinessCapability:input_type -> hyapp.user.v1.CheckBusinessCapabilityRequest + 35, // 67: hyapp.user.v1.UserHostService.GetAgencyMembers:input_type -> hyapp.user.v1.GetAgencyMembersRequest + 37, // 68: hyapp.user.v1.UserHostService.GetAgencyApplications:input_type -> hyapp.user.v1.GetAgencyApplicationsRequest + 39, // 69: hyapp.user.v1.UserHostAdminService.CreateBDLeader:input_type -> hyapp.user.v1.CreateBDLeaderRequest + 41, // 70: hyapp.user.v1.UserHostAdminService.CreateBD:input_type -> hyapp.user.v1.CreateBDRequest + 43, // 71: hyapp.user.v1.UserHostAdminService.SetBDStatus:input_type -> hyapp.user.v1.SetBDStatusRequest + 45, // 72: hyapp.user.v1.UserHostAdminService.CreateCoinSeller:input_type -> hyapp.user.v1.CreateCoinSellerRequest + 47, // 73: hyapp.user.v1.UserHostAdminService.SetCoinSellerStatus:input_type -> hyapp.user.v1.SetCoinSellerStatusRequest + 49, // 74: hyapp.user.v1.UserHostAdminService.CreateAgency:input_type -> hyapp.user.v1.CreateAgencyRequest + 51, // 75: hyapp.user.v1.UserHostAdminService.CloseAgency:input_type -> hyapp.user.v1.CloseAgencyRequest + 53, // 76: hyapp.user.v1.UserHostAdminService.SetAgencyJoinEnabled:input_type -> hyapp.user.v1.SetAgencyJoinEnabledRequest + 10, // 77: hyapp.user.v1.UserHostService.SearchAgencies:output_type -> hyapp.user.v1.SearchAgenciesResponse + 12, // 78: hyapp.user.v1.UserHostService.ApplyToAgency:output_type -> hyapp.user.v1.ApplyToAgencyResponse + 14, // 79: hyapp.user.v1.UserHostService.ReviewAgencyApplication:output_type -> hyapp.user.v1.ReviewAgencyApplicationResponse + 16, // 80: hyapp.user.v1.UserHostService.KickAgencyHost:output_type -> hyapp.user.v1.KickAgencyHostResponse + 18, // 81: hyapp.user.v1.UserHostService.InviteAgency:output_type -> hyapp.user.v1.InviteAgencyResponse + 20, // 82: hyapp.user.v1.UserHostService.InviteBD:output_type -> hyapp.user.v1.InviteBDResponse + 22, // 83: hyapp.user.v1.UserHostService.ProcessRoleInvitation:output_type -> hyapp.user.v1.ProcessRoleInvitationResponse + 24, // 84: hyapp.user.v1.UserHostService.GetHostProfile:output_type -> hyapp.user.v1.GetHostProfileResponse + 26, // 85: hyapp.user.v1.UserHostService.GetBDProfile:output_type -> hyapp.user.v1.GetBDProfileResponse + 28, // 86: hyapp.user.v1.UserHostService.GetCoinSellerProfile:output_type -> hyapp.user.v1.GetCoinSellerProfileResponse + 30, // 87: hyapp.user.v1.UserHostService.ListActiveCoinSellersInMyRegion:output_type -> hyapp.user.v1.ListActiveCoinSellersInMyRegionResponse + 32, // 88: hyapp.user.v1.UserHostService.GetUserRoleSummary:output_type -> hyapp.user.v1.GetUserRoleSummaryResponse + 34, // 89: hyapp.user.v1.UserHostService.CheckBusinessCapability:output_type -> hyapp.user.v1.CheckBusinessCapabilityResponse + 36, // 90: hyapp.user.v1.UserHostService.GetAgencyMembers:output_type -> hyapp.user.v1.GetAgencyMembersResponse + 38, // 91: hyapp.user.v1.UserHostService.GetAgencyApplications:output_type -> hyapp.user.v1.GetAgencyApplicationsResponse + 40, // 92: hyapp.user.v1.UserHostAdminService.CreateBDLeader:output_type -> hyapp.user.v1.CreateBDLeaderResponse + 42, // 93: hyapp.user.v1.UserHostAdminService.CreateBD:output_type -> hyapp.user.v1.CreateBDResponse + 44, // 94: hyapp.user.v1.UserHostAdminService.SetBDStatus:output_type -> hyapp.user.v1.SetBDStatusResponse + 46, // 95: hyapp.user.v1.UserHostAdminService.CreateCoinSeller:output_type -> hyapp.user.v1.CreateCoinSellerResponse + 48, // 96: hyapp.user.v1.UserHostAdminService.SetCoinSellerStatus:output_type -> hyapp.user.v1.SetCoinSellerStatusResponse + 50, // 97: hyapp.user.v1.UserHostAdminService.CreateAgency:output_type -> hyapp.user.v1.CreateAgencyResponse + 52, // 98: hyapp.user.v1.UserHostAdminService.CloseAgency:output_type -> hyapp.user.v1.CloseAgencyResponse + 54, // 99: hyapp.user.v1.UserHostAdminService.SetAgencyJoinEnabled:output_type -> hyapp.user.v1.SetAgencyJoinEnabledResponse + 77, // [77:100] is the sub-list for method output_type + 54, // [54:77] is the sub-list for method input_type + 54, // [54:54] is the sub-list for extension type_name + 54, // [54:54] is the sub-list for extension extendee + 0, // [0:54] is the sub-list for field type_name } func init() { file_proto_user_v1_host_proto_init() } @@ -4189,7 +4466,7 @@ func file_proto_user_v1_host_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_user_v1_host_proto_rawDesc), len(file_proto_user_v1_host_proto_rawDesc)), NumEnums: 0, - NumMessages: 52, + NumMessages: 55, NumExtensions: 0, NumServices: 2, }, diff --git a/api/proto/user/v1/host.proto b/api/proto/user/v1/host.proto index 5e210ead..f7686d7b 100644 --- a/api/proto/user/v1/host.proto +++ b/api/proto/user/v1/host.proto @@ -56,6 +56,24 @@ message CoinSellerProfile { int64 updated_at_ms = 6; } +// CoinSellerListItem 是 App 充值页展示的同区域启用币商投影。 +message CoinSellerListItem { + int64 user_id = 1; + string display_user_id = 2; + string username = 3; + string avatar = 4; + int64 country_id = 5; + string country_code = 6; + string country_name = 7; + string country_display_name = 8; + int64 region_id = 9; + string region_code = 10; + string region_name = 11; + string status = 12; + string merchant_asset_type = 13; + int64 updated_at_ms = 14; +} + // UserRoleSummary 是 App 我的页和入口显隐使用的轻量角色摘要。 // 它把 host、Agency、manager、BD 和币商身份收敛到一次 user-service RPC,避免 gateway 随角色扩张继续 fanout。 message UserRoleSummary { @@ -243,6 +261,15 @@ message GetCoinSellerProfileResponse { CoinSellerProfile coin_seller_profile = 1; } +message ListActiveCoinSellersInMyRegionRequest { + RequestMeta meta = 1; + int64 user_id = 2; +} + +message ListActiveCoinSellersInMyRegionResponse { + repeated CoinSellerListItem coin_sellers = 1; +} + message GetUserRoleSummaryRequest { RequestMeta meta = 1; int64 user_id = 2; @@ -402,6 +429,7 @@ service UserHostService { rpc GetHostProfile(GetHostProfileRequest) returns (GetHostProfileResponse); rpc GetBDProfile(GetBDProfileRequest) returns (GetBDProfileResponse); rpc GetCoinSellerProfile(GetCoinSellerProfileRequest) returns (GetCoinSellerProfileResponse); + rpc ListActiveCoinSellersInMyRegion(ListActiveCoinSellersInMyRegionRequest) returns (ListActiveCoinSellersInMyRegionResponse); rpc GetUserRoleSummary(GetUserRoleSummaryRequest) returns (GetUserRoleSummaryResponse); rpc CheckBusinessCapability(CheckBusinessCapabilityRequest) returns (CheckBusinessCapabilityResponse); rpc GetAgencyMembers(GetAgencyMembersRequest) returns (GetAgencyMembersResponse); diff --git a/api/proto/user/v1/host_grpc.pb.go b/api/proto/user/v1/host_grpc.pb.go index a46483e0..15cd5332 100644 --- a/api/proto/user/v1/host_grpc.pb.go +++ b/api/proto/user/v1/host_grpc.pb.go @@ -19,20 +19,21 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - UserHostService_SearchAgencies_FullMethodName = "/hyapp.user.v1.UserHostService/SearchAgencies" - UserHostService_ApplyToAgency_FullMethodName = "/hyapp.user.v1.UserHostService/ApplyToAgency" - UserHostService_ReviewAgencyApplication_FullMethodName = "/hyapp.user.v1.UserHostService/ReviewAgencyApplication" - UserHostService_KickAgencyHost_FullMethodName = "/hyapp.user.v1.UserHostService/KickAgencyHost" - UserHostService_InviteAgency_FullMethodName = "/hyapp.user.v1.UserHostService/InviteAgency" - UserHostService_InviteBD_FullMethodName = "/hyapp.user.v1.UserHostService/InviteBD" - UserHostService_ProcessRoleInvitation_FullMethodName = "/hyapp.user.v1.UserHostService/ProcessRoleInvitation" - UserHostService_GetHostProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetHostProfile" - UserHostService_GetBDProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetBDProfile" - UserHostService_GetCoinSellerProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetCoinSellerProfile" - UserHostService_GetUserRoleSummary_FullMethodName = "/hyapp.user.v1.UserHostService/GetUserRoleSummary" - UserHostService_CheckBusinessCapability_FullMethodName = "/hyapp.user.v1.UserHostService/CheckBusinessCapability" - UserHostService_GetAgencyMembers_FullMethodName = "/hyapp.user.v1.UserHostService/GetAgencyMembers" - UserHostService_GetAgencyApplications_FullMethodName = "/hyapp.user.v1.UserHostService/GetAgencyApplications" + UserHostService_SearchAgencies_FullMethodName = "/hyapp.user.v1.UserHostService/SearchAgencies" + UserHostService_ApplyToAgency_FullMethodName = "/hyapp.user.v1.UserHostService/ApplyToAgency" + UserHostService_ReviewAgencyApplication_FullMethodName = "/hyapp.user.v1.UserHostService/ReviewAgencyApplication" + UserHostService_KickAgencyHost_FullMethodName = "/hyapp.user.v1.UserHostService/KickAgencyHost" + UserHostService_InviteAgency_FullMethodName = "/hyapp.user.v1.UserHostService/InviteAgency" + UserHostService_InviteBD_FullMethodName = "/hyapp.user.v1.UserHostService/InviteBD" + UserHostService_ProcessRoleInvitation_FullMethodName = "/hyapp.user.v1.UserHostService/ProcessRoleInvitation" + UserHostService_GetHostProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetHostProfile" + UserHostService_GetBDProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetBDProfile" + UserHostService_GetCoinSellerProfile_FullMethodName = "/hyapp.user.v1.UserHostService/GetCoinSellerProfile" + UserHostService_ListActiveCoinSellersInMyRegion_FullMethodName = "/hyapp.user.v1.UserHostService/ListActiveCoinSellersInMyRegion" + UserHostService_GetUserRoleSummary_FullMethodName = "/hyapp.user.v1.UserHostService/GetUserRoleSummary" + UserHostService_CheckBusinessCapability_FullMethodName = "/hyapp.user.v1.UserHostService/CheckBusinessCapability" + UserHostService_GetAgencyMembers_FullMethodName = "/hyapp.user.v1.UserHostService/GetAgencyMembers" + UserHostService_GetAgencyApplications_FullMethodName = "/hyapp.user.v1.UserHostService/GetAgencyApplications" ) // UserHostServiceClient is the client API for UserHostService service. @@ -51,6 +52,7 @@ type UserHostServiceClient interface { GetHostProfile(ctx context.Context, in *GetHostProfileRequest, opts ...grpc.CallOption) (*GetHostProfileResponse, error) GetBDProfile(ctx context.Context, in *GetBDProfileRequest, opts ...grpc.CallOption) (*GetBDProfileResponse, error) GetCoinSellerProfile(ctx context.Context, in *GetCoinSellerProfileRequest, opts ...grpc.CallOption) (*GetCoinSellerProfileResponse, error) + ListActiveCoinSellersInMyRegion(ctx context.Context, in *ListActiveCoinSellersInMyRegionRequest, opts ...grpc.CallOption) (*ListActiveCoinSellersInMyRegionResponse, error) GetUserRoleSummary(ctx context.Context, in *GetUserRoleSummaryRequest, opts ...grpc.CallOption) (*GetUserRoleSummaryResponse, error) CheckBusinessCapability(ctx context.Context, in *CheckBusinessCapabilityRequest, opts ...grpc.CallOption) (*CheckBusinessCapabilityResponse, error) GetAgencyMembers(ctx context.Context, in *GetAgencyMembersRequest, opts ...grpc.CallOption) (*GetAgencyMembersResponse, error) @@ -165,6 +167,16 @@ func (c *userHostServiceClient) GetCoinSellerProfile(ctx context.Context, in *Ge return out, nil } +func (c *userHostServiceClient) ListActiveCoinSellersInMyRegion(ctx context.Context, in *ListActiveCoinSellersInMyRegionRequest, opts ...grpc.CallOption) (*ListActiveCoinSellersInMyRegionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListActiveCoinSellersInMyRegionResponse) + err := c.cc.Invoke(ctx, UserHostService_ListActiveCoinSellersInMyRegion_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *userHostServiceClient) GetUserRoleSummary(ctx context.Context, in *GetUserRoleSummaryRequest, opts ...grpc.CallOption) (*GetUserRoleSummaryResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetUserRoleSummaryResponse) @@ -221,6 +233,7 @@ type UserHostServiceServer interface { GetHostProfile(context.Context, *GetHostProfileRequest) (*GetHostProfileResponse, error) GetBDProfile(context.Context, *GetBDProfileRequest) (*GetBDProfileResponse, error) GetCoinSellerProfile(context.Context, *GetCoinSellerProfileRequest) (*GetCoinSellerProfileResponse, error) + ListActiveCoinSellersInMyRegion(context.Context, *ListActiveCoinSellersInMyRegionRequest) (*ListActiveCoinSellersInMyRegionResponse, error) GetUserRoleSummary(context.Context, *GetUserRoleSummaryRequest) (*GetUserRoleSummaryResponse, error) CheckBusinessCapability(context.Context, *CheckBusinessCapabilityRequest) (*CheckBusinessCapabilityResponse, error) GetAgencyMembers(context.Context, *GetAgencyMembersRequest) (*GetAgencyMembersResponse, error) @@ -265,6 +278,9 @@ func (UnimplementedUserHostServiceServer) GetBDProfile(context.Context, *GetBDPr func (UnimplementedUserHostServiceServer) GetCoinSellerProfile(context.Context, *GetCoinSellerProfileRequest) (*GetCoinSellerProfileResponse, error) { return nil, status.Error(codes.Unimplemented, "method GetCoinSellerProfile not implemented") } +func (UnimplementedUserHostServiceServer) ListActiveCoinSellersInMyRegion(context.Context, *ListActiveCoinSellersInMyRegionRequest) (*ListActiveCoinSellersInMyRegionResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListActiveCoinSellersInMyRegion not implemented") +} func (UnimplementedUserHostServiceServer) GetUserRoleSummary(context.Context, *GetUserRoleSummaryRequest) (*GetUserRoleSummaryResponse, error) { return nil, status.Error(codes.Unimplemented, "method GetUserRoleSummary not implemented") } @@ -478,6 +494,24 @@ func _UserHostService_GetCoinSellerProfile_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _UserHostService_ListActiveCoinSellersInMyRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActiveCoinSellersInMyRegionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserHostServiceServer).ListActiveCoinSellersInMyRegion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserHostService_ListActiveCoinSellersInMyRegion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserHostServiceServer).ListActiveCoinSellersInMyRegion(ctx, req.(*ListActiveCoinSellersInMyRegionRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _UserHostService_GetUserRoleSummary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetUserRoleSummaryRequest) if err := dec(in); err != nil { @@ -597,6 +631,10 @@ var UserHostService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetCoinSellerProfile", Handler: _UserHostService_GetCoinSellerProfile_Handler, }, + { + MethodName: "ListActiveCoinSellersInMyRegion", + Handler: _UserHostService_ListActiveCoinSellersInMyRegion_Handler, + }, { MethodName: "GetUserRoleSummary", Handler: _UserHostService_GetUserRoleSummary_Handler, diff --git a/docs/flutter对接/币商列表Flutter对接.md b/docs/flutter对接/币商列表Flutter对接.md new file mode 100644 index 00000000..9bf55985 --- /dev/null +++ b/docs/flutter对接/币商列表Flutter对接.md @@ -0,0 +1,149 @@ +# 币商列表 Flutter 对接 + +本文描述 Flutter App 获取当前用户所在区域启用币商列表的接口。币商身份、状态和区域过滤由 `user-service` 维护;App 只展示 gateway 返回的列表,不传 `region_id`,也不在本地缓存为跨区域通用数据。 + +## 接口 + +`GET /api/v1/wallet/coin-sellers` + +登录接口,需要 `Authorization: Bearer `。接口按当前登录用户的 `users.region_id` 查询同区域、状态为 `active`、资产类型为 `COIN_SELLER_COIN` 的币商。 + +请求头: + +| Header | 必填 | 说明 | +| --- | --- | --- | +| `Authorization` | 是 | App 登录 access token。 | +| `X-App-Code` | 否 | App 编码,默认 `lalu`。 | +| `X-Request-ID` | 否 | 客户端链路 ID;服务端也会生成并在响应中返回。 | + +Query:无。不要传 `region_id`、`country_id` 或 `user_id`。 + +示例: + +```http +GET /api/v1/wallet/coin-sellers +Authorization: Bearer +X-App-Code: lalu +``` + +成功响应: + +```json +{ + "code": "OK", + "message": "ok", + "request_id": "req_abc", + "data": { + "items": [ + { + "user_id": "801", + "display_user_id": "900801", + "username": "Seller One", + "avatar": "https://cdn.example/avatar.png", + "country_id": 86, + "country_code": "CN", + "country_name": "China", + "country_display_name": "中国", + "region_id": 30, + "region_code": "east-asia", + "region_name": "East Asia", + "status": "active", + "merchant_asset_type": "COIN_SELLER_COIN", + "updated_at_ms": 1700000001000 + } + ], + "total": 1 + } +} +``` + +字段规则: + +| 字段 | 说明 | +| --- | --- | +| `user_id` | 币商用户长 ID,JSON 中按字符串返回,避免 Dart/JS 大整数精度问题。 | +| `display_user_id` | 当前展示短号,可用于转账页展示和输入确认。 | +| `username` | 币商昵称;为空时客户端可展示短号。 | +| `avatar` | 币商头像 URL;为空时展示默认头像。 | +| `country_id` | 币商用户当前国家 ID。 | +| `country_code` | 国家编码,例如 `CN`。 | +| `country_name` | 英文或标准国家名。 | +| `country_display_name` | 客户端展示优先使用的国家名。 | +| `region_id` | 币商用户当前区域 ID;应与当前用户区域一致。 | +| `status` | 当前只会返回 `active`。 | +| `merchant_asset_type` | 当前固定为 `COIN_SELLER_COIN`。 | +| `updated_at_ms` | 币商身份最近更新时间,Unix epoch milliseconds。 | + +## Flutter 解析示例 + +```dart +class CoinSellerList { + CoinSellerList({ + required this.items, + required this.total, + }); + + final List items; + final int total; + + factory CoinSellerList.fromJson(Map json) { + return CoinSellerList( + items: (json['items'] as List? ?? const []) + .map((item) => CoinSeller.fromJson(item as Map)) + .toList(), + total: (json['total'] as num?)?.toInt() ?? 0, + ); + } +} + +class CoinSeller { + CoinSeller({ + required this.userId, + required this.displayUserId, + required this.username, + required this.avatar, + required this.countryId, + required this.countryDisplayName, + required this.regionId, + required this.status, + required this.merchantAssetType, + required this.updatedAtMs, + }); + + final String userId; + final String displayUserId; + final String username; + final String avatar; + final int countryId; + final String countryDisplayName; + final int regionId; + final String status; + final String merchantAssetType; + final int updatedAtMs; + + String get title => username.isNotEmpty ? username : displayUserId; + + factory CoinSeller.fromJson(Map json) { + return CoinSeller( + userId: json['user_id'] as String? ?? '', + displayUserId: json['display_user_id'] as String? ?? '', + username: json['username'] as String? ?? '', + avatar: json['avatar'] as String? ?? '', + countryId: (json['country_id'] as num?)?.toInt() ?? 0, + countryDisplayName: json['country_display_name'] as String? ?? '', + regionId: (json['region_id'] as num?)?.toInt() ?? 0, + status: json['status'] as String? ?? '', + merchantAssetType: json['merchant_asset_type'] as String? ?? '', + updatedAtMs: (json['updated_at_ms'] as num?)?.toInt() ?? 0, + ); + } +} +``` + +## 客户端处理 + +1. 先解析外层 envelope,只有 `code == "OK"` 时读取 `data.items`。 +2. 空列表表示当前区域暂无启用币商;展示空状态,不切换到其他区域。 +3. 点击币商进入转账或联系流程时,使用 `display_user_id` 做用户可见确认,实际后续接口仍以服务端解析结果为准。 +4. 用户切换国家或完成资料变更后重新拉取本接口,不复用旧区域列表。 +5. 请求失败时记录 `request_id`,按登录失效、参数错误、服务错误分别处理。 diff --git a/server/admin/internal/model/models.go b/server/admin/internal/model/models.go index d15fd2e5..a64b3844 100644 --- a/server/admin/internal/model/models.go +++ b/server/admin/internal/model/models.go @@ -97,7 +97,7 @@ type AppBanner struct { CoverURL string `gorm:"size:1024;not null" json:"coverUrl"` RoomSmallImageURL string `gorm:"column:room_small_image_url;size:1024;not null;default:'';comment:房间内小屏图 URL" json:"roomSmallImageUrl"` BannerType string `gorm:"size:16;not null" json:"bannerType"` - DisplayScope string `gorm:"size:32;index:idx_admin_app_banners_display,not null;default:home;comment:显示范围:首页、房间内或充值页" json:"displayScope"` + DisplayScope string `gorm:"size:128;index:idx_admin_app_banners_display,not null;default:home;comment:显示范围,多选逗号分隔:首页、房间内或充值页" json:"displayScope"` Param string `gorm:"size:2048" json:"param"` Status string `gorm:"size:24;index:idx_admin_app_banners_app_sort,not null;default:active" json:"status"` Platform string `gorm:"size:24;index:idx_admin_app_banners_scope,not null" json:"platform"` diff --git a/server/admin/internal/modules/appconfig/request.go b/server/admin/internal/modules/appconfig/request.go index 7da6eacd..bff655ab 100644 --- a/server/admin/internal/modules/appconfig/request.go +++ b/server/admin/internal/modules/appconfig/request.go @@ -11,19 +11,20 @@ type h5LinkPayload struct { } type bannerRequest struct { - CoverURL string `json:"coverUrl" binding:"required"` - RoomSmallImageURL string `json:"roomSmallImageUrl"` - BannerType string `json:"bannerType" binding:"required"` - DisplayScope string `json:"displayScope"` - Param string `json:"param"` - Status string `json:"status" binding:"required"` - Platform string `json:"platform" binding:"required"` - SortOrder int `json:"sortOrder"` - RegionID int64 `json:"regionId"` - CountryCode string `json:"countryCode"` - Description string `json:"description"` - StartsAtMs int64 `json:"startsAtMs"` - EndsAtMs int64 `json:"endsAtMs"` + CoverURL string `json:"coverUrl" binding:"required"` + RoomSmallImageURL string `json:"roomSmallImageUrl"` + BannerType string `json:"bannerType" binding:"required"` + DisplayScope string `json:"displayScope"` + DisplayScopes []string `json:"displayScopes"` + Param string `json:"param"` + Status string `json:"status" binding:"required"` + Platform string `json:"platform" binding:"required"` + SortOrder int `json:"sortOrder"` + RegionID int64 `json:"regionId"` + CountryCode string `json:"countryCode"` + Description string `json:"description"` + StartsAtMs int64 `json:"startsAtMs"` + EndsAtMs int64 `json:"endsAtMs"` } type appVersionRequest struct { diff --git a/server/admin/internal/modules/appconfig/service.go b/server/admin/internal/modules/appconfig/service.go index 401a7386..b9e35fff 100644 --- a/server/admin/internal/modules/appconfig/service.go +++ b/server/admin/internal/modules/appconfig/service.go @@ -25,6 +25,8 @@ const ( bannerStatusExpired = "expired" ) +var bannerDisplayScopeOrder = []string{bannerDisplayScopeHome, bannerDisplayScopeRoom, bannerDisplayScopeRecharge} + type AppConfigService struct { store *repository.Store } @@ -37,23 +39,24 @@ type H5Link struct { } type AppBanner struct { - ID uint `json:"id"` - AppCode string `json:"appCode"` - CoverURL string `json:"coverUrl"` - RoomSmallImageURL string `json:"roomSmallImageUrl"` - BannerType string `json:"bannerType"` - DisplayScope string `json:"displayScope"` - Param string `json:"param"` - Status string `json:"status"` - Platform string `json:"platform"` - SortOrder int `json:"sortOrder"` - RegionID int64 `json:"regionId"` - CountryCode string `json:"countryCode"` - Description string `json:"description"` - StartsAtMs int64 `json:"startsAtMs"` - EndsAtMs int64 `json:"endsAtMs"` - CreatedAtMs int64 `json:"createdAtMs"` - UpdatedAtMs int64 `json:"updatedAtMs"` + ID uint `json:"id"` + AppCode string `json:"appCode"` + CoverURL string `json:"coverUrl"` + RoomSmallImageURL string `json:"roomSmallImageUrl"` + BannerType string `json:"bannerType"` + DisplayScope string `json:"displayScope"` + DisplayScopes []string `json:"displayScopes"` + Param string `json:"param"` + Status string `json:"status"` + Platform string `json:"platform"` + SortOrder int `json:"sortOrder"` + RegionID int64 `json:"regionId"` + CountryCode string `json:"countryCode"` + Description string `json:"description"` + StartsAtMs int64 `json:"startsAtMs"` + EndsAtMs int64 `json:"endsAtMs"` + CreatedAtMs int64 `json:"createdAtMs"` + UpdatedAtMs int64 `json:"updatedAtMs"` } type AppVersion struct { @@ -391,12 +394,13 @@ func h5LinkFromModel(config model.AppConfig) H5Link { } func bannerModelFromRequest(appCode string, req bannerRequest) (model.AppBanner, error) { + displayScopes := normalizeBannerDisplayScopes(req.DisplayScopes, req.DisplayScope) item := model.AppBanner{ AppCode: appctx.Normalize(appCode), CoverURL: strings.TrimSpace(req.CoverURL), RoomSmallImageURL: strings.TrimSpace(req.RoomSmallImageURL), BannerType: normalizeBannerType(req.BannerType), - DisplayScope: normalizeBannerDisplayScope(req.DisplayScope), + DisplayScope: bannerDisplayScopeValue(displayScopes), Param: strings.TrimSpace(req.Param), Status: normalizeBannerStatus(req.Status), Platform: normalizeBannerPlatform(req.Platform), @@ -413,10 +417,10 @@ func bannerModelFromRequest(appCode string, req bannerRequest) (model.AppBanner, if containsWhitespace(item.CoverURL) { return model.AppBanner{}, errors.New("banner cover cannot contain whitespace") } - if item.DisplayScope != bannerDisplayScopeHome && item.DisplayScope != bannerDisplayScopeRoom && item.DisplayScope != bannerDisplayScopeRecharge { + if !validBannerDisplayScopes(displayScopes) { return model.AppBanner{}, errors.New("banner display scope is invalid") } - if item.DisplayScope == bannerDisplayScopeRoom { + if bannerDisplayScopesContain(displayScopes, bannerDisplayScopeRoom) { if item.RoomSmallImageURL == "" || len(item.RoomSmallImageURL) > 1024 { return model.AppBanner{}, errors.New("room small image is required") } @@ -424,7 +428,7 @@ func bannerModelFromRequest(appCode string, req bannerRequest) (model.AppBanner, return model.AppBanner{}, errors.New("room small image cannot contain whitespace") } } else { - // 非房间内投放不保留房间小屏图,避免客户端误用其它显示范围的专属素材。 + // 未投放到房间内时不保留小屏图,避免客户端误用房间专属素材。 item.RoomSmallImageURL = "" } if item.BannerType != "h5" && item.BannerType != "app" { @@ -476,6 +480,7 @@ func appBannerFromModel(item model.AppBanner) AppBanner { RoomSmallImageURL: item.RoomSmallImageURL, BannerType: item.BannerType, DisplayScope: item.DisplayScope, + DisplayScopes: bannerDisplayScopeList(item.DisplayScope), Param: item.Param, Status: item.Status, Platform: item.Platform, @@ -599,6 +604,71 @@ func normalizeBannerDisplayScope(value string) string { } } +func normalizeBannerDisplayScopes(values []string, fallback string) []string { + seen := make(map[string]struct{}, len(bannerDisplayScopeOrder)) + for _, value := range values { + for _, part := range strings.Split(value, ",") { + scope := normalizeBannerDisplayScope(part) + if scope == "" { + continue + } + seen[scope] = struct{}{} + } + } + if len(seen) == 0 { + for _, part := range strings.Split(fallback, ",") { + scope := normalizeBannerDisplayScope(part) + if scope == "" { + continue + } + seen[scope] = struct{}{} + } + } + if len(seen) == 0 { + seen[bannerDisplayScopeHome] = struct{}{} + } + out := make([]string, 0, len(seen)) + for _, scope := range bannerDisplayScopeOrder { + if _, ok := seen[scope]; ok { + out = append(out, scope) + delete(seen, scope) + } + } + for scope := range seen { + out = append(out, scope) + } + return out +} + +func bannerDisplayScopeList(value string) []string { + return normalizeBannerDisplayScopes(nil, value) +} + +func bannerDisplayScopeValue(scopes []string) string { + return strings.Join(scopes, ",") +} + +func validBannerDisplayScopes(scopes []string) bool { + if len(scopes) == 0 { + return false + } + for _, scope := range scopes { + if scope != bannerDisplayScopeHome && scope != bannerDisplayScopeRoom && scope != bannerDisplayScopeRecharge { + return false + } + } + return true +} + +func bannerDisplayScopesContain(scopes []string, target string) bool { + for _, scope := range scopes { + if scope == target { + return true + } + } + return false +} + func normalizeBannerPlatform(value string) string { return strings.ToLower(strings.TrimSpace(value)) } diff --git a/server/admin/internal/modules/appconfig/service_test.go b/server/admin/internal/modules/appconfig/service_test.go index e0c72846..39d8d118 100644 --- a/server/admin/internal/modules/appconfig/service_test.go +++ b/server/admin/internal/modules/appconfig/service_test.go @@ -3,6 +3,8 @@ package appconfig import ( "testing" "time" + + "hyapp-admin-server/internal/model" ) func TestH5LinkModelFromPayloadValidatesDynamicConfig(t *testing.T) { @@ -52,7 +54,7 @@ func TestBannerModelFromRequestKeepsRoomScopeScheduleFields(t *testing.T) { CoverURL: "https://cdn.example.com/banner.png", RoomSmallImageURL: "https://cdn.example.com/banner-small.png", BannerType: "h5", - DisplayScope: bannerDisplayScopeRoom, + DisplayScopes: []string{bannerDisplayScopeHome, bannerDisplayScopeRoom}, Param: "https://h5.example.com/activity", Status: bannerStatusActive, Platform: "android", @@ -62,7 +64,7 @@ func TestBannerModelFromRequestKeepsRoomScopeScheduleFields(t *testing.T) { if err != nil { t.Fatalf("banner model should be valid: %v", err) } - if item.DisplayScope != bannerDisplayScopeRoom || item.RoomSmallImageURL == "" { + if item.DisplayScope != "home,room" || item.RoomSmallImageURL == "" { t.Fatalf("room display fields mismatch: %+v", item) } if item.StartsAtMS != startsAtMs || item.EndsAtMS != endsAtMs || item.Status != bannerStatusActive { @@ -91,6 +93,30 @@ func TestBannerModelFromRequestExpiresEndedActiveBanner(t *testing.T) { } } +func TestAppBannerFromModelReturnsDisplayScopes(t *testing.T) { + item := appBannerFromModel(bannerModel("home,room,recharge")) + + if item.DisplayScope != "home,room,recharge" { + t.Fatalf("display scope should keep stored value: %+v", item) + } + if len(item.DisplayScopes) != 3 || item.DisplayScopes[0] != bannerDisplayScopeHome || item.DisplayScopes[1] != bannerDisplayScopeRoom || item.DisplayScopes[2] != bannerDisplayScopeRecharge { + t.Fatalf("display scopes mismatch: %+v", item.DisplayScopes) + } +} + +func bannerModel(displayScope string) model.AppBanner { + return model.AppBanner{ + ID: 1, + AppCode: "lalu", + CoverURL: "https://cdn.example.com/banner.png", + BannerType: "h5", + DisplayScope: displayScope, + Param: "https://h5.example.com/activity", + Status: bannerStatusActive, + Platform: "android", + } +} + func TestExploreTabModelFromRequestValidatesRequiredFields(t *testing.T) { item, err := exploreTabModelFromRequest("lalu", exploreTabRequest{ Enabled: true, diff --git a/server/admin/internal/repository/app_banner_repository.go b/server/admin/internal/repository/app_banner_repository.go index 1930ae28..5b5253d4 100644 --- a/server/admin/internal/repository/app_banner_repository.go +++ b/server/admin/internal/repository/app_banner_repository.go @@ -23,7 +23,7 @@ func (s *Store) ListAppBanners(options AppBannerListOptions) ([]model.AppBanner, query = query.Where("status = ?", strings.TrimSpace(options.Status)) } if options.DisplayScope != "" { - query = query.Where("display_scope = ?", strings.TrimSpace(options.DisplayScope)) + query = query.Where("FIND_IN_SET(?, display_scope) > 0", strings.TrimSpace(options.DisplayScope)) } if options.Platform != "" { query = query.Where("platform = ?", strings.TrimSpace(options.Platform)) diff --git a/server/admin/migrations/025_admin_app_banner_multi_display_scope.sql b/server/admin/migrations/025_admin_app_banner_multi_display_scope.sql new file mode 100644 index 00000000..db24776e --- /dev/null +++ b/server/admin/migrations/025_admin_app_banner_multi_display_scope.sql @@ -0,0 +1,6 @@ +SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- Banner 显示范围支持多选,display_scope 以稳定逗号分隔值保存,例如 home,room,recharge。 + +ALTER TABLE admin_app_banners + MODIFY COLUMN display_scope VARCHAR(128) NOT NULL DEFAULT 'home' COMMENT '显示范围,多选逗号分隔:首页、房间内或充值页'; diff --git a/services/gateway-service/internal/appconfig/mysql.go b/services/gateway-service/internal/appconfig/mysql.go index 91a45cad..56819bbb 100644 --- a/services/gateway-service/internal/appconfig/mysql.go +++ b/services/gateway-service/internal/appconfig/mysql.go @@ -22,7 +22,7 @@ const listExploreTabsSQL = ` const listAppBannersSQL = ` SELECT id, app_code, cover_url, room_small_image_url, banner_type, display_scope, param, platform, sort_order, region_id, country_code, description, starts_at_ms, ends_at_ms, updated_at_ms FROM admin_app_banners - WHERE app_code = ? AND status = 'active' AND display_scope = ? + WHERE app_code = ? AND status = 'active' AND FIND_IN_SET(?, display_scope) > 0 AND (? = '' OR platform = ?) AND (region_id = 0 OR region_id = ?) AND (country_code = '' OR country_code = ?) @@ -66,20 +66,21 @@ type BannerQuery struct { // Banner 是 gateway 下发给 App 指定显示范围的 banner 配置。 type Banner struct { - ID uint `json:"id"` - CoverURL string `json:"cover_url"` - RoomSmallImageURL string `json:"room_small_image_url,omitempty"` - BannerType string `json:"type"` - DisplayScope string `json:"display_scope"` - Param string `json:"param"` - Platform string `json:"platform"` - SortOrder int `json:"sort_order"` - RegionID int64 `json:"region_id,omitempty"` - CountryCode string `json:"country_code,omitempty"` - Description string `json:"description,omitempty"` - StartsAtMs int64 `json:"starts_at_ms,omitempty"` - EndsAtMs int64 `json:"ends_at_ms,omitempty"` - UpdatedAtMs int64 `json:"updated_at_ms"` + ID uint `json:"id"` + CoverURL string `json:"cover_url"` + RoomSmallImageURL string `json:"room_small_image_url,omitempty"` + BannerType string `json:"type"` + DisplayScope string `json:"display_scope"` + DisplayScopes []string `json:"display_scopes,omitempty"` + Param string `json:"param"` + Platform string `json:"platform"` + SortOrder int `json:"sort_order"` + RegionID int64 `json:"region_id,omitempty"` + CountryCode string `json:"country_code,omitempty"` + Description string `json:"description,omitempty"` + StartsAtMs int64 `json:"starts_at_ms,omitempty"` + EndsAtMs int64 `json:"ends_at_ms,omitempty"` + UpdatedAtMs int64 `json:"updated_at_ms"` } // VersionQuery 是 App 检查更新的公开筛选条件。 @@ -237,6 +238,7 @@ func (r *MySQLReader) ListBanners(ctx context.Context, query BannerQuery) ([]Ban return nil, err } item.UpdatedAtMs = updatedAtMS + item.DisplayScopes = bannerDisplayScopeList(item.DisplayScope) items = append(items, item) } if err := rows.Err(); err != nil { @@ -311,6 +313,11 @@ func (r StaticReader) ListBanners(context.Context, BannerQuery) ([]Banner, error out := make([]Banner, len(r.Banners)) copy(out, r.Banners) + for index := range out { + if len(out[index].DisplayScopes) == 0 { + out[index].DisplayScopes = bannerDisplayScopeList(out[index].DisplayScope) + } + } return out, nil } @@ -361,3 +368,20 @@ func NormalizeBannerDisplayScope(value string) string { return "" } } + +func bannerDisplayScopeList(value string) []string { + seen := make(map[string]struct{}, 3) + for _, part := range strings.Split(value, ",") { + scope := NormalizeBannerDisplayScope(part) + if scope != "" { + seen[scope] = struct{}{} + } + } + out := make([]string, 0, len(seen)) + for _, scope := range []string{"home", "room", "recharge"} { + if _, ok := seen[scope]; ok { + out = append(out, scope) + } + } + return out +} diff --git a/services/gateway-service/internal/appconfig/mysql_test.go b/services/gateway-service/internal/appconfig/mysql_test.go index 0632cf66..23a2b4be 100644 --- a/services/gateway-service/internal/appconfig/mysql_test.go +++ b/services/gateway-service/internal/appconfig/mysql_test.go @@ -17,3 +17,16 @@ func TestNormalizeBannerDisplayScopeAcceptsChineseLabels(t *testing.T) { } } } + +func TestBannerDisplayScopeListParsesMultiScopeValue(t *testing.T) { + got := bannerDisplayScopeList("room,home,recharge") + want := []string{"home", "room", "recharge"} + if len(got) != len(want) { + t.Fatalf("scope count mismatch: got %+v want %+v", got, want) + } + for index := range want { + if got[index] != want[index] { + t.Fatalf("scope %d mismatch: got %+v want %+v", index, got, want) + } + } +} diff --git a/services/gateway-service/internal/client/user_client.go b/services/gateway-service/internal/client/user_client.go index 4d69a72e..e2fdf20b 100644 --- a/services/gateway-service/internal/client/user_client.go +++ b/services/gateway-service/internal/client/user_client.go @@ -71,6 +71,7 @@ type UserHostClient interface { GetHostProfile(ctx context.Context, req *userv1.GetHostProfileRequest) (*userv1.GetHostProfileResponse, error) GetBDProfile(ctx context.Context, req *userv1.GetBDProfileRequest) (*userv1.GetBDProfileResponse, error) GetCoinSellerProfile(ctx context.Context, req *userv1.GetCoinSellerProfileRequest) (*userv1.GetCoinSellerProfileResponse, error) + ListActiveCoinSellersInMyRegion(ctx context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error) GetUserRoleSummary(ctx context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error) CheckBusinessCapability(ctx context.Context, req *userv1.CheckBusinessCapabilityRequest) (*userv1.CheckBusinessCapabilityResponse, error) } @@ -316,6 +317,10 @@ func (c *grpcUserHostClient) GetCoinSellerProfile(ctx context.Context, req *user return c.client.GetCoinSellerProfile(ctx, req) } +func (c *grpcUserHostClient) ListActiveCoinSellersInMyRegion(ctx context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error) { + return c.client.ListActiveCoinSellersInMyRegion(ctx, req) +} + func (c *grpcUserHostClient) GetUserRoleSummary(ctx context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error) { return c.client.GetUserRoleSummary(ctx, req) } diff --git a/services/gateway-service/internal/transport/http/httproutes/router.go b/services/gateway-service/internal/transport/http/httproutes/router.go index aa33b614..b07ae07f 100644 --- a/services/gateway-service/internal/transport/http/httproutes/router.go +++ b/services/gateway-service/internal/transport/http/httproutes/router.go @@ -162,6 +162,7 @@ type WalletHandlers struct { ApplyWithdrawal http.HandlerFunc ListCoinTransactions http.HandlerFunc ListWalletTransactions http.HandlerFunc + ListCoinSellers http.HandlerFunc TransferCoinFromSeller http.HandlerFunc GetRedPacketConfig http.HandlerFunc ListRoomRedPackets http.HandlerFunc @@ -373,6 +374,7 @@ func (r routes) registerWalletRoutes() { r.profile("/wallet/withdrawals/apply", http.MethodPost, h.ApplyWithdrawal) r.profile("/wallet/coin-transactions", http.MethodGet, h.ListCoinTransactions) r.profile("/wallet/transactions", http.MethodGet, h.ListWalletTransactions) + r.profile("/wallet/coin-sellers", http.MethodGet, h.ListCoinSellers) r.profile("/wallet/coin-seller/transfer", "", h.TransferCoinFromSeller) r.profile("/red-packets/config", http.MethodGet, h.GetRedPacketConfig) r.profile("/rooms/{room_id}/red-packets", http.MethodGet, h.ListRoomRedPackets) diff --git a/services/gateway-service/internal/transport/http/response_test.go b/services/gateway-service/internal/transport/http/response_test.go index cc47a893..b3256933 100644 --- a/services/gateway-service/internal/transport/http/response_test.go +++ b/services/gateway-service/internal/transport/http/response_test.go @@ -319,27 +319,30 @@ type fakeUserCountryQueryClient struct { } type fakeUserHostClient struct { - lastSearchAgencies *userv1.SearchAgenciesRequest - searchAgenciesResp *userv1.SearchAgenciesResponse - searchAgenciesErr error - lastApplyAgency *userv1.ApplyToAgencyRequest - applyAgencyResp *userv1.ApplyToAgencyResponse - applyAgencyErr error - last *userv1.GetCoinSellerProfileRequest - profile *userv1.CoinSellerProfile - err error - lastHost *userv1.GetHostProfileRequest - hostProfile *userv1.HostProfile - hostErr error - lastBD *userv1.GetBDProfileRequest - bdProfile *userv1.BDProfile - bdErr error - lastRoleSummary *userv1.GetUserRoleSummaryRequest - roleSummary *userv1.UserRoleSummary - roleSummaryErr error - lastCapability *userv1.CheckBusinessCapabilityRequest - capabilityResp *userv1.CheckBusinessCapabilityResponse - capabilityErr error + lastSearchAgencies *userv1.SearchAgenciesRequest + searchAgenciesResp *userv1.SearchAgenciesResponse + searchAgenciesErr error + lastApplyAgency *userv1.ApplyToAgencyRequest + applyAgencyResp *userv1.ApplyToAgencyResponse + applyAgencyErr error + last *userv1.GetCoinSellerProfileRequest + profile *userv1.CoinSellerProfile + err error + lastListCoinSellers *userv1.ListActiveCoinSellersInMyRegionRequest + listCoinSellersResp *userv1.ListActiveCoinSellersInMyRegionResponse + listCoinSellersErr error + lastHost *userv1.GetHostProfileRequest + hostProfile *userv1.HostProfile + hostErr error + lastBD *userv1.GetBDProfileRequest + bdProfile *userv1.BDProfile + bdErr error + lastRoleSummary *userv1.GetUserRoleSummaryRequest + roleSummary *userv1.UserRoleSummary + roleSummaryErr error + lastCapability *userv1.CheckBusinessCapabilityRequest + capabilityResp *userv1.CheckBusinessCapabilityResponse + capabilityErr error } type fakeWalletClient struct { @@ -971,6 +974,17 @@ func (f *fakeUserHostClient) GetCoinSellerProfile(_ context.Context, req *userv1 return &userv1.GetCoinSellerProfileResponse{}, nil } +func (f *fakeUserHostClient) ListActiveCoinSellersInMyRegion(_ context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error) { + f.lastListCoinSellers = req + if f.listCoinSellersErr != nil { + return nil, f.listCoinSellersErr + } + if f.listCoinSellersResp != nil { + return f.listCoinSellersResp, nil + } + return &userv1.ListActiveCoinSellersInMyRegionResponse{}, nil +} + func (f *fakeUserHostClient) GetUserRoleSummary(_ context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error) { f.lastRoleSummary = req if f.roleSummaryErr != nil { @@ -2422,7 +2436,8 @@ func TestListAppBannersReturnsAdminAppConfig(t *testing.T) { CoverURL: "https://cdn.example.com/banner.png", RoomSmallImageURL: "https://cdn.example.com/banner-small.png", BannerType: "h5", - DisplayScope: "room", + DisplayScope: "home,room", + DisplayScopes: []string{"home", "room"}, Param: "https://h5.example.com/activity", Platform: "android", SortOrder: 10, @@ -2468,9 +2483,13 @@ func TestListAppBannersReturnsAdminAppConfig(t *testing.T) { if !ok || first["cover_url"] != "https://cdn.example.com/banner.png" || first["type"] != "h5" || first["param"] != "https://h5.example.com/activity" { t.Fatalf("banner item mismatch: %+v", first) } - if first["display_scope"] != "room" || first["room_small_image_url"] != "https://cdn.example.com/banner-small.png" { + if first["display_scope"] != "home,room" || first["room_small_image_url"] != "https://cdn.example.com/banner-small.png" { t.Fatalf("banner display fields mismatch: %+v", first) } + displayScopes, ok := first["display_scopes"].([]any) + if !ok || len(displayScopes) != 2 || displayScopes[0] != "home" || displayScopes[1] != "room" { + t.Fatalf("banner display scopes mismatch: %+v", first) + } if first["platform"] != "android" || first["sort_order"].(float64) != 10 || first["starts_at_ms"].(float64) != 1700000000000 || first["ends_at_ms"].(float64) != 1800000000000 || first["updated_at_ms"].(float64) != 1700000002000 { t.Fatalf("banner metadata mismatch: %+v", first) } @@ -2636,6 +2655,53 @@ func TestSearchHostAgenciesUsesAuthenticatedUserAndShortID(t *testing.T) { } } +func TestListCoinSellersUsesAuthenticatedUserRegion(t *testing.T) { + hostClient := &fakeUserHostClient{listCoinSellersResp: &userv1.ListActiveCoinSellersInMyRegionResponse{CoinSellers: []*userv1.CoinSellerListItem{ + { + UserId: 801, + DisplayUserId: "900801", + Username: "Seller One", + Avatar: "https://cdn.example/avatar.png", + CountryId: 86, + CountryCode: "CN", + CountryName: "China", + CountryDisplayName: "中国", + RegionId: 30, + RegionCode: "east-asia", + RegionName: "East Asia", + Status: "active", + MerchantAssetType: "COIN_SELLER_COIN", + UpdatedAtMs: 1700000001000, + }, + }}} + handler := NewHandlerWithClients(&fakeRoomClient{}, nil, nil, &fakeUserProfileClient{}) + handler.SetUserHostClient(hostClient) + router := handler.Routes(auth.NewVerifier("secret")) + request := httptest.NewRequest(http.MethodGet, "/api/v1/wallet/coin-sellers", nil) + request.Header.Set("Authorization", "Bearer "+signGatewayToken(t, "secret", 42)) + request.Header.Set("X-Request-ID", "req-coin-sellers") + 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 hostClient.lastListCoinSellers == nil || hostClient.lastListCoinSellers.GetUserId() != 42 { + t.Fatalf("coin seller list request mismatch: %+v", hostClient.lastListCoinSellers) + } + var response httpkit.ResponseEnvelope + if err := json.NewDecoder(recorder.Body).Decode(&response); err != nil { + t.Fatalf("decode response failed: %v", err) + } + data := response.Data.(map[string]any) + items := data["items"].([]any) + first := items[0].(map[string]any) + if data["total"] != float64(1) || first["user_id"] != "801" || first["display_user_id"] != "900801" || first["username"] != "Seller One" || first["country_id"] != float64(86) || first["status"] != "active" { + t.Fatalf("coin seller list response mismatch: %+v", response) + } +} + func TestApplyToHostAgencyPropagatesClientCommandID(t *testing.T) { hostClient := &fakeUserHostClient{applyAgencyResp: &userv1.ApplyToAgencyResponse{Application: &userv1.AgencyApplication{ ApplicationId: 8001, diff --git a/services/gateway-service/internal/transport/http/walletapi/coin_seller_handler.go b/services/gateway-service/internal/transport/http/walletapi/coin_seller_handler.go new file mode 100644 index 00000000..e97ccdc1 --- /dev/null +++ b/services/gateway-service/internal/transport/http/walletapi/coin_seller_handler.go @@ -0,0 +1,80 @@ +package walletapi + +import ( + "net/http" + "strconv" + + userv1 "hyapp.local/api/proto/user/v1" + "hyapp/services/gateway-service/internal/auth" + "hyapp/services/gateway-service/internal/transport/http/httpkit" +) + +type coinSellerData struct { + UserID string `json:"user_id"` + DisplayUserID string `json:"display_user_id"` + Username string `json:"username"` + Avatar string `json:"avatar,omitempty"` + CountryID int64 `json:"country_id"` + CountryCode string `json:"country_code,omitempty"` + CountryName string `json:"country_name,omitempty"` + CountryDisplayName string `json:"country_display_name,omitempty"` + RegionID int64 `json:"region_id"` + RegionCode string `json:"region_code,omitempty"` + RegionName string `json:"region_name,omitempty"` + Status string `json:"status"` + MerchantAssetType string `json:"merchant_asset_type"` + UpdatedAtMS int64 `json:"updated_at_ms"` +} + +// listCoinSellers 返回当前用户所在区域内所有启用币商。 +// gateway 不接受 region_id 参数,避免客户端绕过 user-service 的当前区域边界。 +func (h *Handler) listCoinSellers(writer http.ResponseWriter, request *http.Request) { + if h.userHostClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + + resp, err := h.userHostClient.ListActiveCoinSellersInMyRegion(request.Context(), &userv1.ListActiveCoinSellersInMyRegionRequest{ + Meta: httpkit.UserMeta(request, ""), + UserId: auth.UserIDFromContext(request.Context()), + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + + items := make([]coinSellerData, 0, len(resp.GetCoinSellers())) + for _, item := range resp.GetCoinSellers() { + items = append(items, coinSellerFromProto(item)) + } + httpkit.WriteOK(writer, request, map[string]any{"items": items, "total": len(items)}) +} + +func coinSellerFromProto(item *userv1.CoinSellerListItem) coinSellerData { + if item == nil { + return coinSellerData{} + } + return coinSellerData{ + UserID: int64IDString(item.GetUserId()), + DisplayUserID: item.GetDisplayUserId(), + Username: item.GetUsername(), + Avatar: item.GetAvatar(), + CountryID: item.GetCountryId(), + CountryCode: item.GetCountryCode(), + CountryName: item.GetCountryName(), + CountryDisplayName: item.GetCountryDisplayName(), + RegionID: item.GetRegionId(), + RegionCode: item.GetRegionCode(), + RegionName: item.GetRegionName(), + Status: item.GetStatus(), + MerchantAssetType: item.GetMerchantAssetType(), + UpdatedAtMS: item.GetUpdatedAtMs(), + } +} + +func int64IDString(value int64) string { + if value <= 0 { + return "" + } + return strconv.FormatInt(value, 10) +} diff --git a/services/gateway-service/internal/transport/http/walletapi/handler.go b/services/gateway-service/internal/transport/http/walletapi/handler.go index 3d9d87c2..47e07c1b 100644 --- a/services/gateway-service/internal/transport/http/walletapi/handler.go +++ b/services/gateway-service/internal/transport/http/walletapi/handler.go @@ -45,6 +45,7 @@ func (h *Handler) WalletHandlers() httproutes.WalletHandlers { ApplyWithdrawal: h.applyWithdrawal, ListCoinTransactions: h.listCoinTransactions, ListWalletTransactions: h.listWalletTransactions, + ListCoinSellers: h.listCoinSellers, TransferCoinFromSeller: h.transferCoinFromSeller, GetRedPacketConfig: h.getRedPacketConfig, ListRoomRedPackets: h.listRoomRedPackets, diff --git a/services/user-service/internal/domain/host/host.go b/services/user-service/internal/domain/host/host.go index da5fc52b..d890c8c0 100644 --- a/services/user-service/internal/domain/host/host.go +++ b/services/user-service/internal/domain/host/host.go @@ -178,6 +178,25 @@ type CoinSellerProfile struct { UpdatedAtMs int64 } +// CoinSellerListItem 是 App 充值入口需要的启用币商展示资料。 +// 区域来自 users 当前事实,币商状态来自 coin_seller_profiles,不在 gateway 拼装。 +type CoinSellerListItem struct { + UserID int64 + DisplayUserID string + Username string + Avatar string + CountryID int64 + CountryCode string + CountryName string + CountryDisplayName string + RegionID int64 + RegionCode string + RegionName string + Status string + MerchantAssetType string + UpdatedAtMs int64 +} + // UserRoleSummary 是面向 App 入口显隐的聚合 read model。 // 这里不承载团队统计或薪资指标,只表达当前用户是否拥有可用身份和待处理邀请数量。 type UserRoleSummary struct { diff --git a/services/user-service/internal/service/host/service.go b/services/user-service/internal/service/host/service.go index 2a4f5410..320c6b4f 100644 --- a/services/user-service/internal/service/host/service.go +++ b/services/user-service/internal/service/host/service.go @@ -32,6 +32,7 @@ type Repository interface { GetHostProfile(ctx context.Context, userID int64) (hostdomain.HostProfile, error) GetBDProfile(ctx context.Context, userID int64) (hostdomain.BDProfile, error) GetCoinSellerProfile(ctx context.Context, userID int64) (hostdomain.CoinSellerProfile, error) + ListActiveCoinSellersInMyRegion(ctx context.Context, userID int64) ([]hostdomain.CoinSellerListItem, error) GetUserRoleSummary(ctx context.Context, userID int64) (hostdomain.UserRoleSummary, error) HasActiveAgencyOwner(ctx context.Context, userID int64) (int64, bool, error) ListAgencyMembers(ctx context.Context, agencyID int64, status string) ([]hostdomain.AgencyMembership, error) @@ -484,6 +485,19 @@ func (s *Service) GetCoinSellerProfile(ctx context.Context, userID int64) (hostd return s.repository.GetCoinSellerProfile(ctx, userID) } +// ListActiveCoinSellersInMyRegion 返回当前用户所在区域的所有启用币商。 +func (s *Service) ListActiveCoinSellersInMyRegion(ctx context.Context, userID int64) ([]hostdomain.CoinSellerListItem, error) { + if s.repository == nil { + return nil, xerr.New(xerr.Unavailable, "host repository is not configured") + } + if userID <= 0 { + return nil, xerr.New(xerr.InvalidArgument, "user_id is required") + } + + // 当前区域属于 user-service 用户主事实,gateway 不能传入 region_id 来扩大查询范围。 + return s.repository.ListActiveCoinSellersInMyRegion(ctx, userID) +} + // GetUserRoleSummary 读取 App 我的页使用的轻量身份摘要,避免 gateway 为入口显隐发起多个角色 RPC。 func (s *Service) GetUserRoleSummary(ctx context.Context, userID int64) (hostdomain.UserRoleSummary, error) { if s.repository == nil { diff --git a/services/user-service/internal/service/host/service_test.go b/services/user-service/internal/service/host/service_test.go index e4d11e53..b75bdc8a 100644 --- a/services/user-service/internal/service/host/service_test.go +++ b/services/user-service/internal/service/host/service_test.go @@ -539,6 +539,100 @@ func TestAdminCreateCoinSellerCanCoexistWithBDAndAgency(t *testing.T) { } } +func TestListActiveCoinSellersInMyRegionFiltersByCurrentUserRegion(t *testing.T) { + ctx := context.Background() + repository := mysqltest.NewRepository(t) + repository.PutCountry(userdomain.Country{ + CountryID: 86, + CountryCode: "CN", + CountryName: "China", + CountryDisplayName: "中国", + Enabled: true, + }) + repository.PutRegion(userdomain.Region{ + RegionID: 70, + RegionCode: "east-asia", + Name: "East Asia", + Status: userdomain.RegionStatusActive, + Countries: []string{"CN"}, + }) + repository.PutRegion(userdomain.Region{ + RegionID: 71, + RegionCode: "west-asia", + Name: "West Asia", + Status: userdomain.RegionStatusActive, + Countries: []string{"CN"}, + }) + seedActiveUser(t, repository, 940, 70) + repository.PutUser(userdomain.User{ + UserID: 941, + DefaultDisplayUserID: displayID(941), + CurrentDisplayUserID: displayID(941), + Username: "Seller One", + Avatar: "https://cdn.example/seller-one.png", + Country: "CN", + RegionID: 70, + ProfileCompleted: true, + ProfileCompletedAtMs: 1, + OnboardingStatus: userdomain.OnboardingStatusCompleted, + Status: userdomain.StatusActive, + }) + repository.PutUser(userdomain.User{ + UserID: 942, + DefaultDisplayUserID: displayID(942), + CurrentDisplayUserID: displayID(942), + Username: "Disabled Seller", + Country: "CN", + RegionID: 70, + ProfileCompleted: true, + ProfileCompletedAtMs: 1, + OnboardingStatus: userdomain.OnboardingStatusCompleted, + Status: userdomain.StatusActive, + }) + repository.PutUser(userdomain.User{ + UserID: 943, + DefaultDisplayUserID: displayID(943), + CurrentDisplayUserID: displayID(943), + Username: "Other Region Seller", + Country: "CN", + RegionID: 71, + ProfileCompleted: true, + ProfileCompletedAtMs: 1, + OnboardingStatus: userdomain.OnboardingStatusCompleted, + Status: userdomain.StatusActive, + }) + svc := newHostService(repository, 9000, 10000) + for _, userID := range []int64{941, 942, 943} { + if _, err := svc.CreateCoinSeller(ctx, hostservice.CreateCoinSellerInput{ + CommandID: fmt.Sprintf("admin-create-coin-seller-%d", userID), + AdminUserID: 1, + TargetUserID: userID, + }); err != nil { + t.Fatalf("CreateCoinSeller(%d) failed: %v", userID, err) + } + } + if _, err := svc.SetCoinSellerStatus(ctx, hostservice.SetCoinSellerStatusInput{ + CommandID: "admin-disable-coin-seller-942", + AdminUserID: 1, + TargetUserID: 942, + Status: hostdomain.CoinSellerStatusDisabled, + }); err != nil { + t.Fatalf("SetCoinSellerStatus failed: %v", err) + } + + items, err := svc.ListActiveCoinSellersInMyRegion(ctx, 940) + if err != nil { + t.Fatalf("ListActiveCoinSellersInMyRegion failed: %v", err) + } + if len(items) != 1 { + t.Fatalf("only same-region active sellers should be returned: %+v", items) + } + item := items[0] + if item.UserID != 941 || item.Username != "Seller One" || item.Avatar == "" || item.CountryID != 86 || item.CountryCode != "CN" || item.RegionID != 70 || item.RegionCode != "east-asia" || item.Status != hostdomain.CoinSellerStatusActive { + t.Fatalf("coin seller item mismatch: %+v", item) + } +} + func TestGetUserRoleSummaryAggregatesRolesAndPendingInvitations(t *testing.T) { ctx := context.Background() repository := mysqltest.NewRepository(t) diff --git a/services/user-service/internal/storage/mysql/host/queries.go b/services/user-service/internal/storage/mysql/host/queries.go index cc6c4208..5ca03912 100644 --- a/services/user-service/internal/storage/mysql/host/queries.go +++ b/services/user-service/internal/storage/mysql/host/queries.go @@ -74,6 +74,82 @@ func (r *Repository) GetCoinSellerProfile(ctx context.Context, userID int64) (ho return queryCoinSellerProfile(ctx, r.db, "WHERE user_id = ?", userID) } +// ListActiveCoinSellersInMyRegion 返回当前用户所在区域的启用币商列表。 +// 该查询从 users.region_id 出发过滤,避免把区域条件交给 gateway 或客户端传入。 +func (r *Repository) ListActiveCoinSellersInMyRegion(ctx context.Context, userID int64) ([]hostdomain.CoinSellerListItem, error) { + regionID, err := r.userRegion(ctx, r.db, userID, "") + if err != nil { + return nil, err + } + if regionID <= 0 { + // 币商列表是区域内充值入口,缺少当前区域时不能降级成全局列表。 + return nil, xerr.New(xerr.InvalidArgument, "user region is required") + } + if err := requireActiveRegion(ctx, r.db, regionID); err != nil { + return nil, err + } + + rows, err := r.db.QueryContext(ctx, ` + SELECT + u.user_id, + u.current_display_user_id, + COALESCE(u.username, ''), + COALESCE(u.avatar, ''), + COALESCE(country.country_id, 0), + COALESCE(u.country, ''), + COALESCE(country.country_name, ''), + COALESCE(country.country_display_name, ''), + u.region_id, + COALESCE(region.region_code, ''), + COALESCE(region.name, ''), + seller.status, + seller.merchant_asset_type, + seller.updated_at_ms + FROM users u + INNER JOIN coin_seller_profiles seller + ON seller.app_code = u.app_code AND seller.user_id = u.user_id + LEFT JOIN countries country + ON country.app_code = u.app_code AND country.country_code = u.country + LEFT JOIN regions region + ON region.app_code = u.app_code AND region.region_id = u.region_id + WHERE u.app_code = ? + AND u.region_id = ? + AND u.status = 'active' + AND seller.status = ? + AND seller.merchant_asset_type = ? + ORDER BY seller.updated_at_ms DESC, u.user_id DESC + `, appcode.FromContext(ctx), regionID, hostdomain.CoinSellerStatusActive, hostdomain.CoinSellerMerchantAssetType) + if err != nil { + return nil, err + } + defer rows.Close() + + items := make([]hostdomain.CoinSellerListItem, 0) + for rows.Next() { + var item hostdomain.CoinSellerListItem + if err := rows.Scan( + &item.UserID, + &item.DisplayUserID, + &item.Username, + &item.Avatar, + &item.CountryID, + &item.CountryCode, + &item.CountryName, + &item.CountryDisplayName, + &item.RegionID, + &item.RegionCode, + &item.RegionName, + &item.Status, + &item.MerchantAssetType, + &item.UpdatedAtMs, + ); err != nil { + return nil, err + } + items = append(items, item) + } + return items, rows.Err() +} + // GetUserRoleSummary 用一组索引点查构造我的页角色摘要。 // 摘要只表达入口显隐需要的当前身份,不加载成员列表、团队统计或薪资数据。 func (r *Repository) GetUserRoleSummary(ctx context.Context, userID int64) (hostdomain.UserRoleSummary, error) { diff --git a/services/user-service/internal/transport/grpc/convert.go b/services/user-service/internal/transport/grpc/convert.go index 2e8c656e..3dfbd00b 100644 --- a/services/user-service/internal/transport/grpc/convert.go +++ b/services/user-service/internal/transport/grpc/convert.go @@ -342,6 +342,29 @@ func toProtoCoinSellerProfile(profile hostdomain.CoinSellerProfile) *userv1.Coin } } +// toProtoCoinSellerListItem 把区域币商列表项转换为 App 读取投影。 +func toProtoCoinSellerListItem(item hostdomain.CoinSellerListItem) *userv1.CoinSellerListItem { + if item.UserID == 0 { + return nil + } + return &userv1.CoinSellerListItem{ + UserId: item.UserID, + DisplayUserId: item.DisplayUserID, + Username: item.Username, + Avatar: item.Avatar, + CountryId: item.CountryID, + CountryCode: item.CountryCode, + CountryName: item.CountryName, + CountryDisplayName: item.CountryDisplayName, + RegionId: item.RegionID, + RegionCode: item.RegionCode, + RegionName: item.RegionName, + Status: item.Status, + MerchantAssetType: item.MerchantAssetType, + UpdatedAtMs: item.UpdatedAtMs, + } +} + // toProtoUserRoleSummary 把 host domain 入口显隐摘要转换为 gRPC 投影。 func toProtoUserRoleSummary(summary hostdomain.UserRoleSummary) *userv1.UserRoleSummary { if summary.UserID == 0 { diff --git a/services/user-service/internal/transport/grpc/host.go b/services/user-service/internal/transport/grpc/host.go index 6db7c042..d7dd0a7b 100644 --- a/services/user-service/internal/transport/grpc/host.go +++ b/services/user-service/internal/transport/grpc/host.go @@ -206,6 +206,24 @@ func (s *Server) GetCoinSellerProfile(ctx context.Context, req *userv1.GetCoinSe return &userv1.GetCoinSellerProfileResponse{CoinSellerProfile: toProtoCoinSellerProfile(profile)}, nil } +// ListActiveCoinSellersInMyRegion 返回当前用户同区域启用币商。 +func (s *Server) ListActiveCoinSellersInMyRegion(ctx context.Context, req *userv1.ListActiveCoinSellersInMyRegionRequest) (*userv1.ListActiveCoinSellersInMyRegionResponse, error) { + if s.hostSvc == nil { + return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "host service is not configured")) + } + ctx = contextWithApp(ctx, req.GetMeta()) + items, err := s.hostSvc.ListActiveCoinSellersInMyRegion(ctx, req.GetUserId()) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + + resp := &userv1.ListActiveCoinSellersInMyRegionResponse{CoinSellers: make([]*userv1.CoinSellerListItem, 0, len(items))} + for _, item := range items { + resp.CoinSellers = append(resp.CoinSellers, toProtoCoinSellerListItem(item)) + } + return resp, nil +} + // GetUserRoleSummary 返回 App 入口显隐所需的角色摘要,替代 gateway 多角色 fanout。 func (s *Server) GetUserRoleSummary(ctx context.Context, req *userv1.GetUserRoleSummaryRequest) (*userv1.GetUserRoleSummaryResponse, error) { if s.hostSvc == nil {