wfz 3 năm trước cách đây
mục cha
commit
cc37ca9a39

+ 140 - 121
api/account/account.pb.go

@@ -7,6 +7,7 @@
 package account
 
 import (
+	common "git.ikuban.com/server/pw-protobuf/api/common"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
@@ -727,108 +728,119 @@ var file_account_proto_rawDesc = []byte{
 	0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
 	0x0b, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f,
 	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x29, 0x0a, 0x15, 0x52, 0x61,
-	0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x03, 0x73, 0x65, 0x78, 0x22, 0x31, 0x0a, 0x13, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e,
-	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08,
-	0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
-	0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x13, 0x52, 0x61, 0x6e, 0x64,
-	0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65,
-	0x78, 0x22, 0x31, 0x0a, 0x11, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61,
-	0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
-	0x55, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61,
-	0x72, 0x55, 0x72, 0x6c, 0x22, 0x45, 0x0a, 0x15, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e,
-	0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a,
-	0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f,
-	0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x49,
-	0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74,
-	0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22,
-	0x96, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x42, 0x12, 0x0e,
-	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a,
-	0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76,
-	0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
-	0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x10,
-	0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78,
-	0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x72,
-	0x74, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69,
-	0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69,
-	0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
-	0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61,
-	0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65,
-	0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06,
-	0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x72,
-	0x65, 0x64, 0x69, 0x74, 0x22, 0x78, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06,
-	0x6a, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x73,
-	0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79,
-	0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e,
-	0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x22, 0x22,
-	0x0a, 0x0a, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05,
-	0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b,
-	0x65, 0x6e, 0x22, 0x37, 0x0a, 0x11, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x0a, 0x4c,
-	0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74,
-	0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x32,
-	0x89, 0x05, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x62, 0x0a, 0x0a, 0x44,
-	0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67,
-	0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x70,
-	0x6c, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69,
-	0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x3a, 0x01, 0x2a, 0x12,
-	0x70, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41,
-	0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x23, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e,
-	0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01,
-	0x2a, 0x12, 0x77, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b,
-	0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x2f, 0x6e,
-	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x61,
-	0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41,
-	0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61,
+	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x61, 0x70, 0x69, 0x2f,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x22, 0x29, 0x0a, 0x15, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63,
+	0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03,
+	0x73, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x22, 0x31,
+	0x0a, 0x13, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d,
+	0x65, 0x22, 0x27, 0x0a, 0x13, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61,
+	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x22, 0x31, 0x0a, 0x11, 0x52, 0x61,
+	0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
+	0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x22, 0x45, 0x0a,
+	0x15, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x14,
+	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65,
+	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72,
+	0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65,
+	0x64, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69,
+	0x74, 0x22, 0x99, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66,
+	0x6f, 0x44, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a,
+	0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68,
+	0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x22, 0x78, 0x0a,
+	0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a,
+	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70,
+	0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f,
+	0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f,
+	0x6d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x22, 0x22, 0x0a, 0x0a, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x37, 0x0a, 0x11, 0x44,
+	0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x6b,
+	0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x32, 0xa5, 0x06, 0x0a, 0x07, 0x41, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x62, 0x0a, 0x0a, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67,
+	0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4,
+	0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f,
+	0x64, 0x65, 0x62, 0x75, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68,
+	0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+	0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x77, 0x0a, 0x0e, 0x52, 0x61,
+	0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x2e, 0x61,
 	0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f,
-	0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x61, 0x6e, 0x64, 0x6f,
-	0x6d, 0x2f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x5c, 0x0a, 0x1b, 0x47,
-	0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x6e,
-	0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41,
-	0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x49, 0x64, 0x65,
-	0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x60, 0x0a, 0x1f, 0x47, 0x65, 0x74,
-	0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x70,
-	0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x22, 0x2e, 0x61,
-	0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49,
-	0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x49,
-	0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x46, 0x0a, 0x0b, 0x61,
-	0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69,
-	0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
-	0x61, 0x70, 0x69, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x61, 0x63, 0x63, 0x6f,
-	0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52,
+	0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69,
+	0x2f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+	0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61,
+	0x74, 0x61, 0x72, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x2f, 0x61, 0x76, 0x61, 0x74, 0x61,
+	0x72, 0x3a, 0x01, 0x2a, 0x12, 0x5c, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74,
+	0x69, 0x74, 0x79, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70,
+	0x70, 0x49, 0x44, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x49, 0x44,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x60, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
+	0x79, 0x42, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64,
+	0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x41, 0x6e, 0x64, 0x41, 0x70, 0x70,
+	0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x62, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c,
+	0x69, 0x73, 0x74, 0x42, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e,
+	0x64, 0x53, 0x65, 0x78, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x65, 0x78, 0x1a, 0x18,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x36, 0x0a, 0x09, 0x46, 0x69, 0x6e, 0x64,
+	0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x73, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79,
+	0x42, 0x46, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50,
+	0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x3b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -845,18 +857,21 @@ func file_account_proto_rawDescGZIP() []byte {
 
 var file_account_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
 var file_account_proto_goTypes = []interface{}{
-	(*RandomNicknameRequest)(nil), // 0: api.account.RandomNicknameRequest
-	(*RandomNicknameReply)(nil),   // 1: api.account.RandomNicknameReply
-	(*RandomAvatarRequest)(nil),   // 2: api.account.RandomAvatarRequest
-	(*RandomAvatarReply)(nil),     // 3: api.account.RandomAvatarReply
-	(*OpenIDAndAppIDRequest)(nil), // 4: api.account.OpenIDAndAppIDRequest
-	(*IdentityInfo)(nil),          // 5: api.account.IdentityInfo
-	(*UserInfoDB)(nil),            // 6: api.account.UserInfoDB
-	(*PartnerInfoDB)(nil),         // 7: api.account.PartnerInfoDB
-	(*AuthorizationRequest)(nil),  // 8: api.account.AuthorizationRequest
-	(*TokenReply)(nil),            // 9: api.account.TokenReply
-	(*DebugLoginRequest)(nil),     // 10: api.account.DebugLoginRequest
-	(*LoginToken)(nil),            // 11: api.account.LoginToken
+	(*RandomNicknameRequest)(nil),               // 0: api.account.RandomNicknameRequest
+	(*RandomNicknameReply)(nil),                 // 1: api.account.RandomNicknameReply
+	(*RandomAvatarRequest)(nil),                 // 2: api.account.RandomAvatarRequest
+	(*RandomAvatarReply)(nil),                   // 3: api.account.RandomAvatarReply
+	(*OpenIDAndAppIDRequest)(nil),               // 4: api.account.OpenIDAndAppIDRequest
+	(*IdentityInfo)(nil),                        // 5: api.account.IdentityInfo
+	(*UserInfoDB)(nil),                          // 6: api.account.UserInfoDB
+	(*PartnerInfoDB)(nil),                       // 7: api.account.PartnerInfoDB
+	(*AuthorizationRequest)(nil),                // 8: api.account.AuthorizationRequest
+	(*TokenReply)(nil),                          // 9: api.account.TokenReply
+	(*DebugLoginRequest)(nil),                   // 10: api.account.DebugLoginRequest
+	(*LoginToken)(nil),                          // 11: api.account.LoginToken
+	(*common.FindTagListByGroupNameAndSex)(nil), // 12: api.common.FindTagListByGroupNameAndSex
+	(*common.Ids)(nil),                          // 13: api.common.Ids
+	(*common.TagListReply)(nil),                 // 14: api.common.TagListReply
 }
 var file_account_proto_depIdxs = []int32{
 	10, // 0: api.account.Account.DebugLogin:input_type -> api.account.DebugLoginRequest
@@ -865,14 +880,18 @@ var file_account_proto_depIdxs = []int32{
 	2,  // 3: api.account.Account.RandomAvatar:input_type -> api.account.RandomAvatarRequest
 	4,  // 4: api.account.Account.GetIdentityByOpenIDAndAppID:input_type -> api.account.OpenIDAndAppIDRequest
 	4,  // 5: api.account.Account.GetIdentityByFromOpenIDAndAppID:input_type -> api.account.OpenIDAndAppIDRequest
-	9,  // 6: api.account.Account.DebugLogin:output_type -> api.account.TokenReply
-	9,  // 7: api.account.Account.Authorization:output_type -> api.account.TokenReply
-	1,  // 8: api.account.Account.RandomNickname:output_type -> api.account.RandomNicknameReply
-	3,  // 9: api.account.Account.RandomAvatar:output_type -> api.account.RandomAvatarReply
-	5,  // 10: api.account.Account.GetIdentityByOpenIDAndAppID:output_type -> api.account.IdentityInfo
-	5,  // 11: api.account.Account.GetIdentityByFromOpenIDAndAppID:output_type -> api.account.IdentityInfo
-	6,  // [6:12] is the sub-list for method output_type
-	0,  // [0:6] is the sub-list for method input_type
+	12, // 6: api.account.Account.FindTagListByGroupNameAndSex:input_type -> api.common.FindTagListByGroupNameAndSex
+	13, // 7: api.account.Account.FindByIDs:input_type -> api.common.Ids
+	9,  // 8: api.account.Account.DebugLogin:output_type -> api.account.TokenReply
+	9,  // 9: api.account.Account.Authorization:output_type -> api.account.TokenReply
+	1,  // 10: api.account.Account.RandomNickname:output_type -> api.account.RandomNicknameReply
+	3,  // 11: api.account.Account.RandomAvatar:output_type -> api.account.RandomAvatarReply
+	5,  // 12: api.account.Account.GetIdentityByOpenIDAndAppID:output_type -> api.account.IdentityInfo
+	5,  // 13: api.account.Account.GetIdentityByFromOpenIDAndAppID:output_type -> api.account.IdentityInfo
+	14, // 14: api.account.Account.FindTagListByGroupNameAndSex:output_type -> api.common.TagListReply
+	14, // 15: api.account.Account.FindByIDs:output_type -> api.common.TagListReply
+	8,  // [8:16] is the sub-list for method output_type
+	0,  // [0:8] is the sub-list for method input_type
 	0,  // [0:0] is the sub-list for extension type_name
 	0,  // [0:0] is the sub-list for extension extendee
 	0,  // [0:0] is the sub-list for field type_name

+ 5 - 0
api/account/account.proto

@@ -3,6 +3,7 @@ syntax = "proto3";
 package api.account;
 
 import "google/api/annotations.proto";
+import "api/common/common.proto";
 //import "api/base/base.proto";
 //import "google/protobuf/struct.proto";
 //import "google/protobuf/empty.proto";
@@ -40,6 +41,10 @@ service Account {
   rpc GetIdentityByOpenIDAndAppID (OpenIDAndAppIDRequest) returns (IdentityInfo);
   // 通过原公众号openID和appID查询
   rpc GetIdentityByFromOpenIDAndAppID (OpenIDAndAppIDRequest) returns (IdentityInfo);
+  // 通过分组名和性别查询标签
+  rpc FindTagListByGroupNameAndSex (common.FindTagListByGroupNameAndSex) returns (common.TagListReply);
+  // 通过标签IDs查询标签
+  rpc FindByIDs (common.Ids) returns (common.TagListReply);
 }
 
 message RandomNicknameRequest{

+ 77 - 0
api/account/account_grpc.pb.go

@@ -4,6 +4,7 @@ package account
 
 import (
 	context "context"
+	common "git.ikuban.com/server/pw-protobuf/api/common"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
@@ -26,6 +27,10 @@ type AccountClient interface {
 	GetIdentityByOpenIDAndAppID(ctx context.Context, in *OpenIDAndAppIDRequest, opts ...grpc.CallOption) (*IdentityInfo, error)
 	// 通过原公众号openID和appID查询
 	GetIdentityByFromOpenIDAndAppID(ctx context.Context, in *OpenIDAndAppIDRequest, opts ...grpc.CallOption) (*IdentityInfo, error)
+	// 通过分组名和性别查询标签
+	FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error)
+	// 通过标签IDs查询标签
+	FindByIDs(ctx context.Context, in *common.Ids, opts ...grpc.CallOption) (*common.TagListReply, error)
 }
 
 type accountClient struct {
@@ -90,6 +95,24 @@ func (c *accountClient) GetIdentityByFromOpenIDAndAppID(ctx context.Context, in
 	return out, nil
 }
 
+func (c *accountClient) FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error) {
+	out := new(common.TagListReply)
+	err := c.cc.Invoke(ctx, "/api.account.Account/FindTagListByGroupNameAndSex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountClient) FindByIDs(ctx context.Context, in *common.Ids, opts ...grpc.CallOption) (*common.TagListReply, error) {
+	out := new(common.TagListReply)
+	err := c.cc.Invoke(ctx, "/api.account.Account/FindByIDs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // AccountServer is the server API for Account service.
 // All implementations must embed UnimplementedAccountServer
 // for forward compatibility
@@ -102,6 +125,10 @@ type AccountServer interface {
 	GetIdentityByOpenIDAndAppID(context.Context, *OpenIDAndAppIDRequest) (*IdentityInfo, error)
 	// 通过原公众号openID和appID查询
 	GetIdentityByFromOpenIDAndAppID(context.Context, *OpenIDAndAppIDRequest) (*IdentityInfo, error)
+	// 通过分组名和性别查询标签
+	FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error)
+	// 通过标签IDs查询标签
+	FindByIDs(context.Context, *common.Ids) (*common.TagListReply, error)
 	mustEmbedUnimplementedAccountServer()
 }
 
@@ -127,6 +154,12 @@ func (UnimplementedAccountServer) GetIdentityByOpenIDAndAppID(context.Context, *
 func (UnimplementedAccountServer) GetIdentityByFromOpenIDAndAppID(context.Context, *OpenIDAndAppIDRequest) (*IdentityInfo, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetIdentityByFromOpenIDAndAppID not implemented")
 }
+func (UnimplementedAccountServer) FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindTagListByGroupNameAndSex not implemented")
+}
+func (UnimplementedAccountServer) FindByIDs(context.Context, *common.Ids) (*common.TagListReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindByIDs not implemented")
+}
 func (UnimplementedAccountServer) mustEmbedUnimplementedAccountServer() {}
 
 // UnsafeAccountServer may be embedded to opt out of forward compatibility for this service.
@@ -248,6 +281,42 @@ func _Account_GetIdentityByFromOpenIDAndAppID_Handler(srv interface{}, ctx conte
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Account_FindTagListByGroupNameAndSex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.FindTagListByGroupNameAndSex)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountServer).FindTagListByGroupNameAndSex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.account.Account/FindTagListByGroupNameAndSex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountServer).FindTagListByGroupNameAndSex(ctx, req.(*common.FindTagListByGroupNameAndSex))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Account_FindByIDs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.Ids)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountServer).FindByIDs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.account.Account/FindByIDs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountServer).FindByIDs(ctx, req.(*common.Ids))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Account_ServiceDesc is the grpc.ServiceDesc for Account service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -279,6 +348,14 @@ var Account_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetIdentityByFromOpenIDAndAppID",
 			Handler:    _Account_GetIdentityByFromOpenIDAndAppID_Handler,
 		},
+		{
+			MethodName: "FindTagListByGroupNameAndSex",
+			Handler:    _Account_FindTagListByGroupNameAndSex_Handler,
+		},
+		{
+			MethodName: "FindByIDs",
+			Handler:    _Account_FindByIDs_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "account.proto",

+ 387 - 105
api/common/common.pb.go

@@ -403,17 +403,17 @@ type HomeInfo struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id             string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id"`                          // id
-	Nickname       string   `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname"`              // 昵称
-	AvatarUrl      string   `protobuf:"bytes,3,opt,name=avatarUrl,proto3" json:"avatarUrl"`            // 头像链接
-	Sex            int64    `protobuf:"varint,4,opt,name=sex,proto3" json:"sex"`                       // 性别
-	Pictures       []string `protobuf:"bytes,5,rep,name=pictures,proto3" json:"pictures"`              // 图片
-	Age            int64    `protobuf:"varint,6,opt,name=age,proto3" json:"age"`                       // 年龄
-	Constellation  string   `protobuf:"bytes,7,opt,name=constellation,proto3" json:"constellation"`    // 星座
-	Area           string   `protobuf:"bytes,8,opt,name=area,proto3" json:"area"`                      // 地区
-	Tag            []string `protobuf:"bytes,9,rep,name=tag,proto3" json:"tag"`                        // 标签
-	Signature      string   `protobuf:"bytes,10,opt,name=signature,proto3" json:"signature"`           // 签名
-	IntroduceVoice string   `protobuf:"bytes,11,opt,name=introduceVoice,proto3" json:"introduceVoice"` // 介绍语音
+	Id             string     `protobuf:"bytes,1,opt,name=id,proto3" json:"id"`                          // id
+	Nickname       string     `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname"`              // 昵称
+	AvatarUrl      string     `protobuf:"bytes,3,opt,name=avatarUrl,proto3" json:"avatarUrl"`            // 头像链接
+	Sex            int64      `protobuf:"varint,4,opt,name=sex,proto3" json:"sex"`                       // 性别
+	Pictures       []string   `protobuf:"bytes,5,rep,name=pictures,proto3" json:"pictures"`              // 图片
+	Age            int64      `protobuf:"varint,6,opt,name=age,proto3" json:"age"`                       // 年龄
+	Constellation  string     `protobuf:"bytes,7,opt,name=constellation,proto3" json:"constellation"`    // 星座
+	Area           string     `protobuf:"bytes,8,opt,name=area,proto3" json:"area"`                      // 地区
+	TagList        []*TagList `protobuf:"bytes,9,rep,name=tagList,proto3" json:"tagList"`                // 标签
+	Signature      string     `protobuf:"bytes,10,opt,name=signature,proto3" json:"signature"`           // 签名
+	IntroduceVoice string     `protobuf:"bytes,11,opt,name=introduceVoice,proto3" json:"introduceVoice"` // 介绍语音
 }
 
 func (x *HomeInfo) Reset() {
@@ -504,9 +504,9 @@ func (x *HomeInfo) GetArea() string {
 	return ""
 }
 
-func (x *HomeInfo) GetTag() []string {
+func (x *HomeInfo) GetTagList() []*TagList {
 	if x != nil {
-		return x.Tag
+		return x.TagList
 	}
 	return nil
 }
@@ -1062,6 +1062,218 @@ func (x *UploadMaterialResponse) GetLink() string {
 	return ""
 }
 
+type Ids struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ids []int64 `protobuf:"varint,1,rep,packed,name=ids,proto3" json:"ids"` // 标签ID
+}
+
+func (x *Ids) Reset() {
+	*x = Ids{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Ids) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Ids) ProtoMessage() {}
+
+func (x *Ids) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Ids.ProtoReflect.Descriptor instead.
+func (*Ids) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *Ids) GetIds() []int64 {
+	if x != nil {
+		return x.Ids
+	}
+	return nil
+}
+
+type FindTagListByGroupNameAndSex struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	GroupName string `protobuf:"bytes,1,opt,name=groupName,proto3" json:"groupName"` // 分组名
+	Sex       int64  `protobuf:"varint,2,opt,name=sex,proto3" json:"sex"`            // 性别
+}
+
+func (x *FindTagListByGroupNameAndSex) Reset() {
+	*x = FindTagListByGroupNameAndSex{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FindTagListByGroupNameAndSex) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindTagListByGroupNameAndSex) ProtoMessage() {}
+
+func (x *FindTagListByGroupNameAndSex) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindTagListByGroupNameAndSex.ProtoReflect.Descriptor instead.
+func (*FindTagListByGroupNameAndSex) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *FindTagListByGroupNameAndSex) GetGroupName() string {
+	if x != nil {
+		return x.GroupName
+	}
+	return ""
+}
+
+func (x *FindTagListByGroupNameAndSex) GetSex() int64 {
+	if x != nil {
+		return x.Sex
+	}
+	return 0
+}
+
+type TagListReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name string     `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` // 分组名
+	List []*TagList `protobuf:"bytes,2,rep,name=list,proto3" json:"list"` // 标签列表
+}
+
+func (x *TagListReply) Reset() {
+	*x = TagListReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TagListReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TagListReply) ProtoMessage() {}
+
+func (x *TagListReply) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TagListReply.ProtoReflect.Descriptor instead.
+func (*TagListReply) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *TagListReply) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *TagListReply) GetList() []*TagList {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+type TagList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id   int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id"`    // 标签ID
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name"` // 分组名
+}
+
+func (x *TagList) Reset() {
+	*x = TagList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TagList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TagList) ProtoMessage() {}
+
+func (x *TagList) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TagList.ProtoReflect.Descriptor instead.
+func (*TagList) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *TagList) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *TagList) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
 var File_common_proto protoreflect.FileDescriptor
 
 var file_common_proto_rawDesc = []byte{
@@ -1095,7 +1307,7 @@ var file_common_proto_rawDesc = []byte{
 	0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x72,
 	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x72,
 	0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa6,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc3,
 	0x02, 0x0a, 0x08, 0x48, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69,
 	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e,
 	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e,
@@ -1109,73 +1321,89 @@ var file_common_proto_rawDesc = []byte{
 	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f,
 	0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61,
 	0x72, 0x65, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12,
-	0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61,
-	0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0a,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12,
-	0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63,
-	0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75,
-	0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0xbc, 0x02, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x46,
-	0x72, 0x69, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
-	0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65,
-	0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08,
-	0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
-	0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d,
-	0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72,
-	0x6f, 0x6d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x43, 0x68,
-	0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x43, 0x68, 0x61, 0x74,
-	0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x18, 0x09, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x12, 0x1c, 0x0a, 0x09,
-	0x66, 0x72, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x72,
-	0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x72,
-	0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x0c, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, 0x72, 0x73, 0x6f,
-	0x6e, 0x49, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x0d, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42,
-	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x28, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22,
-	0xf6, 0x01, 0x0a, 0x08, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x12, 0x0e, 0x0a, 0x02,
-	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08,
-	0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
-	0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74,
-	0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61,
-	0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x74,
-	0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x69, 0x63, 0x74,
-	0x75, 0x72, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65,
-	0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
-	0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
-	0x61, 0x72, 0x65, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61,
-	0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69,
-	0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64,
-	0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0x41, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74,
-	0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e,
-	0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x65, 0x78,
-	0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x14, 0x53,
-	0x65, 0x6e, 0x64, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x41, 0x0a, 0x15, 0x43, 0x68, 0x65,
-	0x63, 0x6b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x0a, 0x16,
-	0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x43, 0x0a, 0x0a, 0x61, 0x70,
-	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x2e,
-	0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65,
-	0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70,
-	0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2d, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61,
+	0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c,
+	0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e,
+	0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56,
+	0x6f, 0x69, 0x63, 0x65, 0x22, 0xbc, 0x02, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65,
+	0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a,
+	0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61,
+	0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76,
+	0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63,
+	0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x69, 0x63,
+	0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x70, 0x65,
+	0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f,
+	0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x43, 0x68, 0x61, 0x74, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1a, 0x0a,
+	0x08, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x08, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f,
+	0x6d, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72,
+	0x6f, 0x6d, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e,
+	0x61, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x0c, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c,
+	0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64,
+	0x73, 0x22, 0x39, 0x0a, 0x0d, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x12, 0x28, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xf6, 0x01, 0x0a,
+	0x08, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63,
+	0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63,
+	0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55,
+	0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
+	0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65,
+	0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65,
+	0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03,
+	0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73,
+	0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65,
+	0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x26, 0x0a,
+	0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65,
+	0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0x41, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x67,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x65, 0x78, 0x74,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x64,
+	0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64,
+	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x41, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50,
+	0x68, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x0a, 0x16, 0x55, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x17, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x12, 0x10,
+	0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x69, 0x64, 0x73,
+	0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x42,
+	0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x65, 0x78,
+	0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10,
+	0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78,
+	0x22, 0x4b, 0x0a, 0x0c, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79,
+	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+	0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x2d, 0x0a,
+	0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x43, 0x0a, 0x0a,
+	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69,
+	0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72,
+	0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1190,32 +1418,38 @@ func file_common_proto_rawDescGZIP() []byte {
 	return file_common_proto_rawDescData
 }
 
-var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
+var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
 var file_common_proto_goTypes = []interface{}{
-	(*UserAndPartnerIdParam)(nil),  // 0: api.common.UserAndPartnerIdParam
-	(*User1AndUser2IdParam)(nil),   // 1: api.common.User1AndUser2IdParam
-	(*PartnerIDParam)(nil),         // 2: api.common.PartnerIDParam
-	(*PersonParam)(nil),            // 3: api.common.PersonParam
-	(*UserIDParam)(nil),            // 4: api.common.UserIDParam
-	(*WxConfReq)(nil),              // 5: api.common.WxConfReq
-	(*WxConfResponse)(nil),         // 6: api.common.WxConfResponse
-	(*HomeInfo)(nil),               // 7: api.common.HomeInfo
-	(*AddFriendMessageInfo)(nil),   // 8: api.common.AddFriendMessageInfo
-	(*PersonIDList)(nil),           // 9: api.common.PersonIDList
-	(*PersonDBReply)(nil),          // 10: api.common.PersonDBReply
-	(*PersonDB)(nil),               // 11: api.common.PersonDB
-	(*ListPageRequest)(nil),        // 12: api.common.ListPageRequest
-	(*SendPhoneCodeRequest)(nil),   // 13: api.common.SendPhoneCodeRequest
-	(*CheckPhoneCodeRequest)(nil),  // 14: api.common.CheckPhoneCodeRequest
-	(*UploadMaterialResponse)(nil), // 15: api.common.UploadMaterialResponse
+	(*UserAndPartnerIdParam)(nil),        // 0: api.common.UserAndPartnerIdParam
+	(*User1AndUser2IdParam)(nil),         // 1: api.common.User1AndUser2IdParam
+	(*PartnerIDParam)(nil),               // 2: api.common.PartnerIDParam
+	(*PersonParam)(nil),                  // 3: api.common.PersonParam
+	(*UserIDParam)(nil),                  // 4: api.common.UserIDParam
+	(*WxConfReq)(nil),                    // 5: api.common.WxConfReq
+	(*WxConfResponse)(nil),               // 6: api.common.WxConfResponse
+	(*HomeInfo)(nil),                     // 7: api.common.HomeInfo
+	(*AddFriendMessageInfo)(nil),         // 8: api.common.AddFriendMessageInfo
+	(*PersonIDList)(nil),                 // 9: api.common.PersonIDList
+	(*PersonDBReply)(nil),                // 10: api.common.PersonDBReply
+	(*PersonDB)(nil),                     // 11: api.common.PersonDB
+	(*ListPageRequest)(nil),              // 12: api.common.ListPageRequest
+	(*SendPhoneCodeRequest)(nil),         // 13: api.common.SendPhoneCodeRequest
+	(*CheckPhoneCodeRequest)(nil),        // 14: api.common.CheckPhoneCodeRequest
+	(*UploadMaterialResponse)(nil),       // 15: api.common.UploadMaterialResponse
+	(*Ids)(nil),                          // 16: api.common.Ids
+	(*FindTagListByGroupNameAndSex)(nil), // 17: api.common.FindTagListByGroupNameAndSex
+	(*TagListReply)(nil),                 // 18: api.common.TagListReply
+	(*TagList)(nil),                      // 19: api.common.TagList
 }
 var file_common_proto_depIdxs = []int32{
-	11, // 0: api.common.PersonDBReply.list:type_name -> api.common.PersonDB
-	1,  // [1:1] is the sub-list for method output_type
-	1,  // [1:1] is the sub-list for method input_type
-	1,  // [1:1] is the sub-list for extension type_name
-	1,  // [1:1] is the sub-list for extension extendee
-	0,  // [0:1] is the sub-list for field type_name
+	19, // 0: api.common.HomeInfo.tagList:type_name -> api.common.TagList
+	11, // 1: api.common.PersonDBReply.list:type_name -> api.common.PersonDB
+	19, // 2: api.common.TagListReply.list:type_name -> api.common.TagList
+	3,  // [3:3] is the sub-list for method output_type
+	3,  // [3:3] is the sub-list for method input_type
+	3,  // [3:3] is the sub-list for extension type_name
+	3,  // [3:3] is the sub-list for extension extendee
+	0,  // [0:3] is the sub-list for field type_name
 }
 
 func init() { file_common_proto_init() }
@@ -1416,6 +1650,54 @@ func file_common_proto_init() {
 				return nil
 			}
 		}
+		file_common_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Ids); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindTagListByGroupNameAndSex); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TagListReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TagList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -1423,7 +1705,7 @@ func file_common_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_common_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   16,
+			NumMessages:   20,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 20 - 1
api/common/common.proto

@@ -54,7 +54,7 @@ message HomeInfo{
   int64 age = 6; // 年龄
   string constellation = 7; // 星座
   string area = 8; // 地区
-  repeated string tag = 9; // 标签
+  repeated TagList tagList  = 9; // 标签
   string signature = 10; // 签名
   string introduceVoice = 11; // 介绍语音
 }
@@ -110,4 +110,23 @@ message CheckPhoneCodeRequest {
 
 message UploadMaterialResponse{
   string link = 1;
+}
+
+message Ids {
+  repeated int64  ids = 1;// 标签ID
+}
+
+message FindTagListByGroupNameAndSex {
+  string groupName = 1;// 分组名
+  int64 sex = 2;// 性别
+}
+
+message TagListReply{
+  string name = 1;// 分组名
+  repeated TagList list = 2;// 标签列表
+}
+
+message TagList{
+  int64 id = 1; // 标签ID
+  string name = 2;// 分组名
 }

+ 50 - 38
api/partner/partner.pb.go

@@ -391,7 +391,7 @@ var file_partner_proto_rawDesc = []byte{
 	0x52, 0x03, 0x73, 0x65, 0x78, 0x22, 0x2b, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64,
 	0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 	0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73,
-	0x65, 0x78, 0x32, 0xff, 0x08, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x12, 0x60,
+	0x65, 0x78, 0x32, 0x86, 0x0a, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x12, 0x60,
 	0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
 	0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
 	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70,
@@ -463,12 +463,20 @@ var file_partner_proto_rawDesc = []byte{
 	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x57, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f,
 	0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70,
 	0x69, 0x2f, 0x77, 0x78, 0x2f, 0x6a, 0x73, 0x73, 0x64, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x3a, 0x01, 0x2a, 0x42, 0x46, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x61, 0x72, 0x74,
-	0x6e, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61,
-	0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, 0x72,
-	0x74, 0x6e, 0x65, 0x72, 0x3b, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
+	0x67, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67,
+	0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41,
+	0x6e, 0x64, 0x53, 0x65, 0x78, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79,
+	0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x65, 0x78, 0x1a,
+	0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x2f,
+	0x6c, 0x69, 0x73, 0x74, 0x2f, 0x74, 0x61, 0x67, 0x3a, 0x01, 0x2a, 0x42, 0x46, 0x0a, 0x0b, 0x61,
+	0x70, 0x69, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69,
+	0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72,
+	0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x3b, 0x70, 0x61, 0x72, 0x74,
+	0x6e, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -485,24 +493,26 @@ func file_partner_proto_rawDescGZIP() []byte {
 
 var file_partner_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
 var file_partner_proto_goTypes = []interface{}{
-	(*UpdatePartnerInformationRequest)(nil), // 0: api.partner.UpdatePartnerInformationRequest
-	(*PartnerInfo)(nil),                     // 1: api.partner.PartnerInfo
-	(*RandomPartnerInfo)(nil),               // 2: api.partner.RandomPartnerInfo
-	(*GetRandomPartnerRequest)(nil),         // 3: api.partner.GetRandomPartnerRequest
-	(*emptypb.Empty)(nil),                   // 4: google.protobuf.Empty
-	(*common.SendPhoneCodeRequest)(nil),     // 5: api.common.SendPhoneCodeRequest
-	(*common.CheckPhoneCodeRequest)(nil),    // 6: api.common.CheckPhoneCodeRequest
-	(*common.PartnerIDParam)(nil),           // 7: api.common.PartnerIDParam
-	(*common.PersonParam)(nil),              // 8: api.common.PersonParam
-	(*common.ListPageRequest)(nil),          // 9: api.common.ListPageRequest
-	(*common.PersonIDList)(nil),             // 10: api.common.PersonIDList
-	(*common.WxConfReq)(nil),                // 11: api.common.WxConfReq
-	(*statistics.LookMessageReply)(nil),     // 12: api.statistics.LookMessageReply
-	(*common.AddFriendMessageInfo)(nil),     // 13: api.common.AddFriendMessageInfo
-	(*common.HomeInfo)(nil),                 // 14: api.common.HomeInfo
-	(*statistics.LookAndLikeListReply)(nil), // 15: api.statistics.LookAndLikeListReply
-	(*common.PersonDBReply)(nil),            // 16: api.common.PersonDBReply
-	(*common.WxConfResponse)(nil),           // 17: api.common.WxConfResponse
+	(*UpdatePartnerInformationRequest)(nil),     // 0: api.partner.UpdatePartnerInformationRequest
+	(*PartnerInfo)(nil),                         // 1: api.partner.PartnerInfo
+	(*RandomPartnerInfo)(nil),                   // 2: api.partner.RandomPartnerInfo
+	(*GetRandomPartnerRequest)(nil),             // 3: api.partner.GetRandomPartnerRequest
+	(*emptypb.Empty)(nil),                       // 4: google.protobuf.Empty
+	(*common.SendPhoneCodeRequest)(nil),         // 5: api.common.SendPhoneCodeRequest
+	(*common.CheckPhoneCodeRequest)(nil),        // 6: api.common.CheckPhoneCodeRequest
+	(*common.PartnerIDParam)(nil),               // 7: api.common.PartnerIDParam
+	(*common.PersonParam)(nil),                  // 8: api.common.PersonParam
+	(*common.ListPageRequest)(nil),              // 9: api.common.ListPageRequest
+	(*common.PersonIDList)(nil),                 // 10: api.common.PersonIDList
+	(*common.WxConfReq)(nil),                    // 11: api.common.WxConfReq
+	(*common.FindTagListByGroupNameAndSex)(nil), // 12: api.common.FindTagListByGroupNameAndSex
+	(*statistics.LookMessageReply)(nil),         // 13: api.statistics.LookMessageReply
+	(*common.AddFriendMessageInfo)(nil),         // 14: api.common.AddFriendMessageInfo
+	(*common.HomeInfo)(nil),                     // 15: api.common.HomeInfo
+	(*statistics.LookAndLikeListReply)(nil),     // 16: api.statistics.LookAndLikeListReply
+	(*common.PersonDBReply)(nil),                // 17: api.common.PersonDBReply
+	(*common.WxConfResponse)(nil),               // 18: api.common.WxConfResponse
+	(*common.TagListReply)(nil),                 // 19: api.common.TagListReply
 }
 var file_partner_proto_depIdxs = []int32{
 	4,  // 0: api.partner.Partner.GetPartnerInfo:input_type -> google.protobuf.Empty
@@ -516,19 +526,21 @@ var file_partner_proto_depIdxs = []int32{
 	9,  // 8: api.partner.Partner.FindLookList:input_type -> api.common.ListPageRequest
 	10, // 9: api.partner.Partner.FindPartnerDBList:input_type -> api.common.PersonIDList
 	11, // 10: api.partner.Partner.WxConf:input_type -> api.common.WxConfReq
-	1,  // 11: api.partner.Partner.GetPartnerInfo:output_type -> api.partner.PartnerInfo
-	12, // 12: api.partner.Partner.GetPartnerLookNum:output_type -> api.statistics.LookMessageReply
-	4,  // 13: api.partner.Partner.SendPhoneCode:output_type -> google.protobuf.Empty
-	4,  // 14: api.partner.Partner.CheckPhoneCode:output_type -> google.protobuf.Empty
-	13, // 15: api.partner.Partner.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
-	4,  // 16: api.partner.Partner.UpdatePartnerInformation:output_type -> google.protobuf.Empty
-	2,  // 17: api.partner.Partner.GetRandomPartnerInfo:output_type -> api.partner.RandomPartnerInfo
-	14, // 18: api.partner.Partner.PartnerGetHomeInfo:output_type -> api.common.HomeInfo
-	15, // 19: api.partner.Partner.FindLookList:output_type -> api.statistics.LookAndLikeListReply
-	16, // 20: api.partner.Partner.FindPartnerDBList:output_type -> api.common.PersonDBReply
-	17, // 21: api.partner.Partner.WxConf:output_type -> api.common.WxConfResponse
-	11, // [11:22] is the sub-list for method output_type
-	0,  // [0:11] is the sub-list for method input_type
+	12, // 11: api.partner.Partner.FindTagListByGroupNameAndSex:input_type -> api.common.FindTagListByGroupNameAndSex
+	1,  // 12: api.partner.Partner.GetPartnerInfo:output_type -> api.partner.PartnerInfo
+	13, // 13: api.partner.Partner.GetPartnerLookNum:output_type -> api.statistics.LookMessageReply
+	4,  // 14: api.partner.Partner.SendPhoneCode:output_type -> google.protobuf.Empty
+	4,  // 15: api.partner.Partner.CheckPhoneCode:output_type -> google.protobuf.Empty
+	14, // 16: api.partner.Partner.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
+	4,  // 17: api.partner.Partner.UpdatePartnerInformation:output_type -> google.protobuf.Empty
+	2,  // 18: api.partner.Partner.GetRandomPartnerInfo:output_type -> api.partner.RandomPartnerInfo
+	15, // 19: api.partner.Partner.PartnerGetHomeInfo:output_type -> api.common.HomeInfo
+	16, // 20: api.partner.Partner.FindLookList:output_type -> api.statistics.LookAndLikeListReply
+	17, // 21: api.partner.Partner.FindPartnerDBList:output_type -> api.common.PersonDBReply
+	18, // 22: api.partner.Partner.WxConf:output_type -> api.common.WxConfResponse
+	19, // 23: api.partner.Partner.FindTagListByGroupNameAndSex:output_type -> api.common.TagListReply
+	12, // [12:24] is the sub-list for method output_type
+	0,  // [0:12] is the sub-list for method input_type
 	0,  // [0:0] is the sub-list for extension type_name
 	0,  // [0:0] is the sub-list for extension extendee
 	0,  // [0:0] is the sub-list for field type_name

+ 7 - 0
api/partner/partner.proto

@@ -74,6 +74,13 @@ service Partner {
       body:"*"
     };
   };
+  // 获取标签列表
+  rpc FindTagListByGroupNameAndSex (common.FindTagListByGroupNameAndSex) returns (common.TagListReply){
+    option (google.api.http) = {
+      post: "/api/partner/list/tag",
+      body:"*"
+    };
+  };
 }
 
 message UpdatePartnerInformationRequest {

+ 38 - 0
api/partner/partner_grpc.pb.go

@@ -42,6 +42,8 @@ type PartnerClient interface {
 	FindPartnerDBList(ctx context.Context, in *common.PersonIDList, opts ...grpc.CallOption) (*common.PersonDBReply, error)
 	// 微信SDK初始化
 	WxConf(ctx context.Context, in *common.WxConfReq, opts ...grpc.CallOption) (*common.WxConfResponse, error)
+	// 获取标签列表
+	FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error)
 }
 
 type partnerClient struct {
@@ -151,6 +153,15 @@ func (c *partnerClient) WxConf(ctx context.Context, in *common.WxConfReq, opts .
 	return out, nil
 }
 
+func (c *partnerClient) FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error) {
+	out := new(common.TagListReply)
+	err := c.cc.Invoke(ctx, "/api.partner.Partner/FindTagListByGroupNameAndSex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // PartnerServer is the server API for Partner service.
 // All implementations must embed UnimplementedPartnerServer
 // for forward compatibility
@@ -176,6 +187,8 @@ type PartnerServer interface {
 	FindPartnerDBList(context.Context, *common.PersonIDList) (*common.PersonDBReply, error)
 	// 微信SDK初始化
 	WxConf(context.Context, *common.WxConfReq) (*common.WxConfResponse, error)
+	// 获取标签列表
+	FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error)
 	mustEmbedUnimplementedPartnerServer()
 }
 
@@ -216,6 +229,9 @@ func (UnimplementedPartnerServer) FindPartnerDBList(context.Context, *common.Per
 func (UnimplementedPartnerServer) WxConf(context.Context, *common.WxConfReq) (*common.WxConfResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method WxConf not implemented")
 }
+func (UnimplementedPartnerServer) FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindTagListByGroupNameAndSex not implemented")
+}
 func (UnimplementedPartnerServer) mustEmbedUnimplementedPartnerServer() {}
 
 // UnsafePartnerServer may be embedded to opt out of forward compatibility for this service.
@@ -427,6 +443,24 @@ func _Partner_WxConf_Handler(srv interface{}, ctx context.Context, dec func(inte
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Partner_FindTagListByGroupNameAndSex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.FindTagListByGroupNameAndSex)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PartnerServer).FindTagListByGroupNameAndSex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.partner.Partner/FindTagListByGroupNameAndSex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PartnerServer).FindTagListByGroupNameAndSex(ctx, req.(*common.FindTagListByGroupNameAndSex))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Partner_ServiceDesc is the grpc.ServiceDesc for Partner service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -478,6 +512,10 @@ var Partner_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "WxConf",
 			Handler:    _Partner_WxConf_Handler,
 		},
+		{
+			MethodName: "FindTagListByGroupNameAndSex",
+			Handler:    _Partner_FindTagListByGroupNameAndSex_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "partner.proto",

+ 43 - 0
api/partner/partner_http.pb.go

@@ -31,6 +31,7 @@ const _ = http.SupportPackageIsVersion1
 type PartnerHTTPServer interface {
 	CheckPhoneCode(context.Context, *common.CheckPhoneCodeRequest) (*emptypb.Empty, error)
 	FindLookList(context.Context, *common.ListPageRequest) (*statistics.LookAndLikeListReply, error)
+	FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error)
 	GetPartnerInfo(context.Context, *emptypb.Empty) (*PartnerInfo, error)
 	GetPartnerLookNum(context.Context, *emptypb.Empty) (*statistics.LookMessageReply, error)
 	PartnerGetHomeInfo(context.Context, *common.PersonParam) (*common.HomeInfo, error)
@@ -49,6 +50,7 @@ func RegisterPartnerHTTPServer(s *http.Server, srv PartnerHTTPServer) {
 	r.POST("/api/partner/home", _Partner_PartnerGetHomeInfo0_HTTP_Handler(srv))
 	r.POST("/api/partner/list/look", _Partner_FindLookList0_HTTP_Handler(srv))
 	r.POST("/api/wx/jssdk/config", _Partner_WxConf0_HTTP_Handler(srv))
+	r.POST("/api/partner/list/tag", _Partner_FindTagListByGroupNameAndSex0_HTTP_Handler(srv))
 }
 
 func _Partner_GetPartnerInfo0_HTTP_Handler(srv PartnerHTTPServer) func(ctx http.Context) error {
@@ -267,9 +269,37 @@ func _Partner_WxConf0_HTTP_Handler(srv PartnerHTTPServer) func(ctx http.Context)
 	}
 }
 
+func _Partner_FindTagListByGroupNameAndSex0_HTTP_Handler(srv PartnerHTTPServer) func(ctx http.Context) error {
+	return func(ctx http.Context) error {
+		var in common.FindTagListByGroupNameAndSex
+		if err := ctx.Bind(&in); err != nil {
+			return err
+		}
+		if err := ctx.BindQuery(&in); err != nil {
+			return err
+		}
+		http.SetOperation(ctx, "/api.partner.Partner/FindTagListByGroupNameAndSex")
+		h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
+			return srv.FindTagListByGroupNameAndSex(ctx, req.(*common.FindTagListByGroupNameAndSex))
+		})
+		out, err := h(ctx, &in)
+		if err != nil {
+			return err
+		}
+		success := &reply.SuccessReply{
+			Code: 0,
+		}
+		if out != nil {
+			success.Data = out
+		}
+		return ctx.Result(200, success)
+	}
+}
+
 type PartnerHTTPClient interface {
 	CheckPhoneCode(ctx context.Context, req *common.CheckPhoneCodeRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	FindLookList(ctx context.Context, req *common.ListPageRequest, opts ...http.CallOption) (rsp *statistics.LookAndLikeListReply, err error)
+	FindTagListByGroupNameAndSex(ctx context.Context, req *common.FindTagListByGroupNameAndSex, opts ...http.CallOption) (rsp *common.TagListReply, err error)
 	GetPartnerInfo(ctx context.Context, req *emptypb.Empty, opts ...http.CallOption) (rsp *PartnerInfo, err error)
 	GetPartnerLookNum(ctx context.Context, req *emptypb.Empty, opts ...http.CallOption) (rsp *statistics.LookMessageReply, err error)
 	PartnerGetHomeInfo(ctx context.Context, req *common.PersonParam, opts ...http.CallOption) (rsp *common.HomeInfo, err error)
@@ -312,6 +342,19 @@ func (c *PartnerHTTPClientImpl) FindLookList(ctx context.Context, in *common.Lis
 	return &out, err
 }
 
+func (c *PartnerHTTPClientImpl) FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...http.CallOption) (*common.TagListReply, error) {
+	var out common.TagListReply
+	pattern := "/api/partner/list/tag"
+	path := binding.EncodeURL(pattern, in, false)
+	opts = append(opts, http.Operation("/api.partner.Partner/FindTagListByGroupNameAndSex"))
+	opts = append(opts, http.PathTemplate(pattern))
+	err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return &out, err
+}
+
 func (c *PartnerHTTPClientImpl) GetPartnerInfo(ctx context.Context, in *emptypb.Empty, opts ...http.CallOption) (*PartnerInfo, error) {
 	var out PartnerInfo
 	pattern := "/api/partner/info"

+ 45 - 33
api/user/user.pb.go

@@ -253,7 +253,7 @@ var file_user_proto_rawDesc = []byte{
 	0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x22,
 	0x1e, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a,
 	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x32,
-	0xad, 0x0d, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64,
+	0xb1, 0x0e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64,
 	0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
 	0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70,
 	0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
@@ -359,12 +359,20 @@ var file_user_proto_rawDesc = []byte{
 	0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
 	0x57, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f,
 	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x77, 0x78, 0x2f,
-	0x6a, 0x73, 0x73, 0x64, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x42,
-	0x3d, 0x0a, 0x08, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x2f, 0x67,
-	0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65,
-	0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6a, 0x73, 0x73, 0x64, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x12,
+	0x81, 0x01, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x42,
+	0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x65, 0x78,
+	0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69,
+	0x6e, 0x64, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x4e, 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x65, 0x78, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x74, 0x61, 0x67,
+	0x3a, 0x01, 0x2a, 0x42, 0x3d, 0x0a, 0x08, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x50,
+	0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3b, 0x75, 0x73,
+	0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -392,15 +400,17 @@ var file_user_proto_goTypes = []interface{}{
 	(*common.PersonIDList)(nil),                       // 8: api.common.PersonIDList
 	(*common.ListPageRequest)(nil),                    // 9: api.common.ListPageRequest
 	(*common.WxConfReq)(nil),                          // 10: api.common.WxConfReq
-	(*statistics.LookMessageReply)(nil),               // 11: api.statistics.LookMessageReply
-	(*chat.CheckUserPartnerIsRelationshipReply)(nil),  // 12: api.chat.CheckUserPartnerIsRelationshipReply
-	(*chat.CreateUserPartnerIsRelationshipReply)(nil), // 13: api.chat.CreateUserPartnerIsRelationshipReply
-	(*common.AddFriendMessageInfo)(nil),               // 14: api.common.AddFriendMessageInfo
-	(*common.HomeInfo)(nil),                           // 15: api.common.HomeInfo
-	(*common.PersonDBReply)(nil),                      // 16: api.common.PersonDBReply
-	(*statistics.LookAndLikeListReply)(nil),           // 17: api.statistics.LookAndLikeListReply
-	(*statistics.LookAndLikeMessageReply)(nil),        // 18: api.statistics.LookAndLikeMessageReply
-	(*common.WxConfResponse)(nil),                     // 19: api.common.WxConfResponse
+	(*common.FindTagListByGroupNameAndSex)(nil),       // 11: api.common.FindTagListByGroupNameAndSex
+	(*statistics.LookMessageReply)(nil),               // 12: api.statistics.LookMessageReply
+	(*chat.CheckUserPartnerIsRelationshipReply)(nil),  // 13: api.chat.CheckUserPartnerIsRelationshipReply
+	(*chat.CreateUserPartnerIsRelationshipReply)(nil), // 14: api.chat.CreateUserPartnerIsRelationshipReply
+	(*common.AddFriendMessageInfo)(nil),               // 15: api.common.AddFriendMessageInfo
+	(*common.HomeInfo)(nil),                           // 16: api.common.HomeInfo
+	(*common.PersonDBReply)(nil),                      // 17: api.common.PersonDBReply
+	(*statistics.LookAndLikeListReply)(nil),           // 18: api.statistics.LookAndLikeListReply
+	(*statistics.LookAndLikeMessageReply)(nil),        // 19: api.statistics.LookAndLikeMessageReply
+	(*common.WxConfResponse)(nil),                     // 20: api.common.WxConfResponse
+	(*common.TagListReply)(nil),                       // 21: api.common.TagListReply
 }
 var file_user_proto_depIdxs = []int32{
 	1,  // 0: api.user.User.UpdateUserInformation:input_type -> api.user.UpdateUserInformationRequest
@@ -418,23 +428,25 @@ var file_user_proto_depIdxs = []int32{
 	9,  // 12: api.user.User.FindLikedList:input_type -> api.common.ListPageRequest
 	7,  // 13: api.user.User.GetLookAndLikeStatisticsMessage:input_type -> api.common.PersonParam
 	10, // 14: api.user.User.WxConf:input_type -> api.common.WxConfReq
-	3,  // 15: api.user.User.UpdateUserInformation:output_type -> google.protobuf.Empty
-	0,  // 16: api.user.User.GetUserInfo:output_type -> api.user.UserInfo
-	11, // 17: api.user.User.GetUserLookNum:output_type -> api.statistics.LookMessageReply
-	3,  // 18: api.user.User.SendPhoneCode:output_type -> google.protobuf.Empty
-	3,  // 19: api.user.User.CheckPhoneCode:output_type -> google.protobuf.Empty
-	12, // 20: api.user.User.CheckUserPartnerIsRelationship:output_type -> api.chat.CheckUserPartnerIsRelationshipReply
-	13, // 21: api.user.User.CreateUserPartnerIsRelationship:output_type -> api.chat.CreateUserPartnerIsRelationshipReply
-	14, // 22: api.user.User.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
-	15, // 23: api.user.User.UserGetHomeInfo:output_type -> api.common.HomeInfo
-	16, // 24: api.user.User.FindUserDBList:output_type -> api.common.PersonDBReply
-	17, // 25: api.user.User.FindLookList:output_type -> api.statistics.LookAndLikeListReply
-	17, // 26: api.user.User.FindLikeList:output_type -> api.statistics.LookAndLikeListReply
-	17, // 27: api.user.User.FindLikedList:output_type -> api.statistics.LookAndLikeListReply
-	18, // 28: api.user.User.GetLookAndLikeStatisticsMessage:output_type -> api.statistics.LookAndLikeMessageReply
-	19, // 29: api.user.User.WxConf:output_type -> api.common.WxConfResponse
-	15, // [15:30] is the sub-list for method output_type
-	0,  // [0:15] is the sub-list for method input_type
+	11, // 15: api.user.User.FindTagListByGroupNameAndSex:input_type -> api.common.FindTagListByGroupNameAndSex
+	3,  // 16: api.user.User.UpdateUserInformation:output_type -> google.protobuf.Empty
+	0,  // 17: api.user.User.GetUserInfo:output_type -> api.user.UserInfo
+	12, // 18: api.user.User.GetUserLookNum:output_type -> api.statistics.LookMessageReply
+	3,  // 19: api.user.User.SendPhoneCode:output_type -> google.protobuf.Empty
+	3,  // 20: api.user.User.CheckPhoneCode:output_type -> google.protobuf.Empty
+	13, // 21: api.user.User.CheckUserPartnerIsRelationship:output_type -> api.chat.CheckUserPartnerIsRelationshipReply
+	14, // 22: api.user.User.CreateUserPartnerIsRelationship:output_type -> api.chat.CreateUserPartnerIsRelationshipReply
+	15, // 23: api.user.User.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
+	16, // 24: api.user.User.UserGetHomeInfo:output_type -> api.common.HomeInfo
+	17, // 25: api.user.User.FindUserDBList:output_type -> api.common.PersonDBReply
+	18, // 26: api.user.User.FindLookList:output_type -> api.statistics.LookAndLikeListReply
+	18, // 27: api.user.User.FindLikeList:output_type -> api.statistics.LookAndLikeListReply
+	18, // 28: api.user.User.FindLikedList:output_type -> api.statistics.LookAndLikeListReply
+	19, // 29: api.user.User.GetLookAndLikeStatisticsMessage:output_type -> api.statistics.LookAndLikeMessageReply
+	20, // 30: api.user.User.WxConf:output_type -> api.common.WxConfResponse
+	21, // 31: api.user.User.FindTagListByGroupNameAndSex:output_type -> api.common.TagListReply
+	16, // [16:32] is the sub-list for method output_type
+	0,  // [0:16] is the sub-list for method input_type
 	0,  // [0:0] is the sub-list for extension type_name
 	0,  // [0:0] is the sub-list for extension extendee
 	0,  // [0:0] is the sub-list for field type_name

+ 7 - 0
api/user/user.proto

@@ -114,6 +114,13 @@ service User {
       body:"*"
     };
   };
+  // 获取标签列表
+  rpc FindTagListByGroupNameAndSex (common.FindTagListByGroupNameAndSex) returns (common.TagListReply){
+    option (google.api.http) = {
+      post: "/api/user/list/tag",
+      body:"*"
+    };
+  };
 }
 
 message UserInfo{

+ 38 - 0
api/user/user_grpc.pb.go

@@ -52,6 +52,8 @@ type UserClient interface {
 	GetLookAndLikeStatisticsMessage(ctx context.Context, in *common.PersonParam, opts ...grpc.CallOption) (*statistics.LookAndLikeMessageReply, error)
 	// 微信SDK初始化
 	WxConf(ctx context.Context, in *common.WxConfReq, opts ...grpc.CallOption) (*common.WxConfResponse, error)
+	// 获取标签列表
+	FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error)
 }
 
 type userClient struct {
@@ -197,6 +199,15 @@ func (c *userClient) WxConf(ctx context.Context, in *common.WxConfReq, opts ...g
 	return out, nil
 }
 
+func (c *userClient) FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...grpc.CallOption) (*common.TagListReply, error) {
+	out := new(common.TagListReply)
+	err := c.cc.Invoke(ctx, "/api.user.User/FindTagListByGroupNameAndSex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // UserServer is the server API for User service.
 // All implementations must embed UnimplementedUserServer
 // for forward compatibility
@@ -231,6 +242,8 @@ type UserServer interface {
 	GetLookAndLikeStatisticsMessage(context.Context, *common.PersonParam) (*statistics.LookAndLikeMessageReply, error)
 	// 微信SDK初始化
 	WxConf(context.Context, *common.WxConfReq) (*common.WxConfResponse, error)
+	// 获取标签列表
+	FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error)
 	mustEmbedUnimplementedUserServer()
 }
 
@@ -283,6 +296,9 @@ func (UnimplementedUserServer) GetLookAndLikeStatisticsMessage(context.Context,
 func (UnimplementedUserServer) WxConf(context.Context, *common.WxConfReq) (*common.WxConfResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method WxConf not implemented")
 }
+func (UnimplementedUserServer) FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindTagListByGroupNameAndSex not implemented")
+}
 func (UnimplementedUserServer) mustEmbedUnimplementedUserServer() {}
 
 // UnsafeUserServer may be embedded to opt out of forward compatibility for this service.
@@ -566,6 +582,24 @@ func _User_WxConf_Handler(srv interface{}, ctx context.Context, dec func(interfa
 	return interceptor(ctx, in, info, handler)
 }
 
+func _User_FindTagListByGroupNameAndSex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.FindTagListByGroupNameAndSex)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserServer).FindTagListByGroupNameAndSex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.user.User/FindTagListByGroupNameAndSex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserServer).FindTagListByGroupNameAndSex(ctx, req.(*common.FindTagListByGroupNameAndSex))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // User_ServiceDesc is the grpc.ServiceDesc for User service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -633,6 +667,10 @@ var User_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "WxConf",
 			Handler:    _User_WxConf_Handler,
 		},
+		{
+			MethodName: "FindTagListByGroupNameAndSex",
+			Handler:    _User_FindTagListByGroupNameAndSex_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "user.proto",

+ 43 - 0
api/user/user_http.pb.go

@@ -36,6 +36,7 @@ type UserHTTPServer interface {
 	FindLikeList(context.Context, *common.ListPageRequest) (*statistics.LookAndLikeListReply, error)
 	FindLikedList(context.Context, *common.ListPageRequest) (*statistics.LookAndLikeListReply, error)
 	FindLookList(context.Context, *common.ListPageRequest) (*statistics.LookAndLikeListReply, error)
+	FindTagListByGroupNameAndSex(context.Context, *common.FindTagListByGroupNameAndSex) (*common.TagListReply, error)
 	GetLookAndLikeStatisticsMessage(context.Context, *common.PersonParam) (*statistics.LookAndLikeMessageReply, error)
 	GetPartnerCircleInfo(context.Context, *KeyRequest) (*common.AddFriendMessageInfo, error)
 	GetUserInfo(context.Context, *emptypb.Empty) (*UserInfo, error)
@@ -62,6 +63,7 @@ func RegisterUserHTTPServer(s *http.Server, srv UserHTTPServer) {
 	r.POST("/api/user/list/liked", _User_FindLikedList0_HTTP_Handler(srv))
 	r.POST("/api/user/num/like_look", _User_GetLookAndLikeStatisticsMessage0_HTTP_Handler(srv))
 	r.POST("/api/wx/jssdk/config", _User_WxConf0_HTTP_Handler(srv))
+	r.POST("/api/user/list/tag", _User_FindTagListByGroupNameAndSex0_HTTP_Handler(srv))
 }
 
 func _User_UpdateUserInformation0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error {
@@ -442,6 +444,33 @@ func _User_WxConf0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error
 	}
 }
 
+func _User_FindTagListByGroupNameAndSex0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error {
+	return func(ctx http.Context) error {
+		var in common.FindTagListByGroupNameAndSex
+		if err := ctx.Bind(&in); err != nil {
+			return err
+		}
+		if err := ctx.BindQuery(&in); err != nil {
+			return err
+		}
+		http.SetOperation(ctx, "/api.user.User/FindTagListByGroupNameAndSex")
+		h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
+			return srv.FindTagListByGroupNameAndSex(ctx, req.(*common.FindTagListByGroupNameAndSex))
+		})
+		out, err := h(ctx, &in)
+		if err != nil {
+			return err
+		}
+		success := &reply.SuccessReply{
+			Code: 0,
+		}
+		if out != nil {
+			success.Data = out
+		}
+		return ctx.Result(200, success)
+	}
+}
+
 type UserHTTPClient interface {
 	CheckPhoneCode(ctx context.Context, req *common.CheckPhoneCodeRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	CheckUserPartnerIsRelationship(ctx context.Context, req *common.PartnerIDParam, opts ...http.CallOption) (rsp *chat.CheckUserPartnerIsRelationshipReply, err error)
@@ -449,6 +478,7 @@ type UserHTTPClient interface {
 	FindLikeList(ctx context.Context, req *common.ListPageRequest, opts ...http.CallOption) (rsp *statistics.LookAndLikeListReply, err error)
 	FindLikedList(ctx context.Context, req *common.ListPageRequest, opts ...http.CallOption) (rsp *statistics.LookAndLikeListReply, err error)
 	FindLookList(ctx context.Context, req *common.ListPageRequest, opts ...http.CallOption) (rsp *statistics.LookAndLikeListReply, err error)
+	FindTagListByGroupNameAndSex(ctx context.Context, req *common.FindTagListByGroupNameAndSex, opts ...http.CallOption) (rsp *common.TagListReply, err error)
 	GetLookAndLikeStatisticsMessage(ctx context.Context, req *common.PersonParam, opts ...http.CallOption) (rsp *statistics.LookAndLikeMessageReply, err error)
 	GetPartnerCircleInfo(ctx context.Context, req *KeyRequest, opts ...http.CallOption) (rsp *common.AddFriendMessageInfo, err error)
 	GetUserInfo(ctx context.Context, req *emptypb.Empty, opts ...http.CallOption) (rsp *UserInfo, err error)
@@ -545,6 +575,19 @@ func (c *UserHTTPClientImpl) FindLookList(ctx context.Context, in *common.ListPa
 	return &out, err
 }
 
+func (c *UserHTTPClientImpl) FindTagListByGroupNameAndSex(ctx context.Context, in *common.FindTagListByGroupNameAndSex, opts ...http.CallOption) (*common.TagListReply, error) {
+	var out common.TagListReply
+	pattern := "/api/user/list/tag"
+	path := binding.EncodeURL(pattern, in, false)
+	opts = append(opts, http.Operation("/api.user.User/FindTagListByGroupNameAndSex"))
+	opts = append(opts, http.PathTemplate(pattern))
+	err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return &out, err
+}
+
 func (c *UserHTTPClientImpl) GetLookAndLikeStatisticsMessage(ctx context.Context, in *common.PersonParam, opts ...http.CallOption) (*statistics.LookAndLikeMessageReply, error) {
 	var out statistics.LookAndLikeMessageReply
 	pattern := "/api/user/num/like_look"

+ 1 - 0
js/api/account/account_http_pb.ts

@@ -1,6 +1,7 @@
 // @ts-ignore
 import request from '@/libs/request';
 import {DebugLoginRequest,TokenReply,AuthorizationRequest,RandomNicknameRequest,RandomNicknameReply,RandomAvatarRequest,RandomAvatarReply,OpenIDAndAppIDRequest,IdentityInfo} from "./account_pb";
+import {FindTagListByGroupNameAndSex,TagListReply,Ids} from "../common/common_pb";
 
 const AccountService = {
   DebugLogin: async (req?: DebugLoginRequest) => {

+ 23 - 1
js/api/common/common_pb.ts

@@ -49,7 +49,7 @@ export interface HomeInfo{
     /**  地区 */
     area?:string;
     /**  标签 */
-    tag?:Array<string>;
+    tagList?:Array<TagList>;
     /**  签名 */
     signature?:string;
     /**  介绍语音 */
@@ -119,4 +119,26 @@ export interface CheckPhoneCodeRequest{
 export interface UploadMaterialResponse{
     link?:string;
 }
+export interface Ids{
+    /**  标签ID */
+    ids?:Array<number>;
+}
+export interface FindTagListByGroupNameAndSex{
+    /**  分组名 */
+    groupName?:string;
+    /**  性别 */
+    sex?:number;
+}
+export interface TagListReply{
+    /**  分组名 */
+    name?:string;
+    /**  标签列表 */
+    list?:Array<TagList>;
+}
+export interface TagList{
+    /**  标签ID */
+    id?:number;
+    /**  分组名 */
+    name?:string;
+}
 

+ 6 - 1
js/api/partner/partner_http_pb.ts

@@ -2,7 +2,7 @@
 import request from '@/libs/request';
 import {PartnerInfo,UpdatePartnerInformationRequest,GetRandomPartnerRequest,RandomPartnerInfo} from "./partner_pb";
 import {LookMessageReply,LookAndLikeListReply} from "../statistics/statistics_pb";
-import {SendPhoneCodeRequest,CheckPhoneCodeRequest,PartnerIDParam,AddFriendMessageInfo,PersonParam,HomeInfo,ListPageRequest,PersonIDList,PersonDBReply,WxConfReq,WxConfResponse} from "../common/common_pb";
+import {SendPhoneCodeRequest,CheckPhoneCodeRequest,PartnerIDParam,AddFriendMessageInfo,PersonParam,HomeInfo,ListPageRequest,PersonIDList,PersonDBReply,WxConfReq,WxConfResponse,FindTagListByGroupNameAndSex,TagListReply} from "../common/common_pb";
 
 const PartnerService = {
   /**  获取接待员的个人信息 */
@@ -45,6 +45,11 @@ const PartnerService = {
 	const res = await request.post<{ data: WxConfResponse, code: string, message: string }>('/api/wx/jssdk/config', req);
     return res.data.data;
   },
+  /**  获取标签列表 */
+  FindTagListByGroupNameAndSex: async (req?: FindTagListByGroupNameAndSex) => {
+	const res = await request.post<{ data: TagListReply, code: string, message: string }>('/api/partner/list/tag', req);
+    return res.data.data;
+  },
 
 };
 

+ 6 - 1
js/api/user/user_http_pb.ts

@@ -2,7 +2,7 @@
 import request from '@/libs/request';
 import {UpdateUserInformationRequest,UserInfo,KeyRequest} from "./user_pb";
 import {LookMessageReply,LookAndLikeListReply,LookAndLikeMessageReply} from "../statistics/statistics_pb";
-import {SendPhoneCodeRequest,CheckPhoneCodeRequest,PartnerIDParam,AddFriendMessageInfo,PersonParam,HomeInfo,PersonIDList,PersonDBReply,ListPageRequest,WxConfReq,WxConfResponse} from "../common/common_pb";
+import {SendPhoneCodeRequest,CheckPhoneCodeRequest,PartnerIDParam,AddFriendMessageInfo,PersonParam,HomeInfo,PersonIDList,PersonDBReply,ListPageRequest,WxConfReq,WxConfResponse,FindTagListByGroupNameAndSex,TagListReply} from "../common/common_pb";
 import {CheckUserPartnerIsRelationshipReply,CreateUserPartnerIsRelationshipReply} from "../chat/chat_pb";
 
 const UserService = {
@@ -76,6 +76,11 @@ const UserService = {
 	const res = await request.post<{ data: WxConfResponse, code: string, message: string }>('/api/wx/jssdk/config', req);
     return res.data.data;
   },
+  /**  获取标签列表 */
+  FindTagListByGroupNameAndSex: async (req?: FindTagListByGroupNameAndSex) => {
+	const res = await request.post<{ data: TagListReply, code: string, message: string }>('/api/user/list/tag', req);
+    return res.data.data;
+  },
 
 };