From 130a73bf70f7d468215209486f148320ceb6c865 Mon Sep 17 00:00:00 2001 From: gy <997485446@qq.com> Date: Tue, 16 Aug 2022 18:45:28 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=A4=9A=E7=BA=A7=E5=AE=A1=E6=89=B9=20f?= =?UTF-8?q?eat=20=E5=AE=A1=E6=89=B9=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/approval/approval.pb.go | 1751 ++++++++++++----- api/approval/approval.proto | 123 +- api/approval/approval.validator.pb.go | 52 + api/approval/approval_triple.pb.go | 290 ++- pkg/m/msg.go | 4 + pkg/model/approval.go | 199 +- pkg/model/approval_setting.go | 118 ++ pkg/model/approval_type.go | 22 + pkg/model/approval_workflow.go | 86 + pkg/model/department_approval_setting.go | 102 - pkg/model/show.go | 2 +- pkg/model/work.go | 17 - pkg/serializer/approval.go | 24 +- pkg/serializer/approval_type.go | 28 + pkg/serializer/department_approval_setting.go | 23 +- pkg/service/approval.go | 155 +- 16 files changed, 2238 insertions(+), 758 deletions(-) create mode 100644 pkg/model/approval_setting.go create mode 100644 pkg/model/approval_type.go create mode 100644 pkg/model/approval_workflow.go delete mode 100644 pkg/model/department_approval_setting.go create mode 100644 pkg/serializer/approval_type.go diff --git a/api/approval/approval.pb.go b/api/approval/approval.pb.go index 4d55e4b..f4b4155 100644 --- a/api/approval/approval.pb.go +++ b/api/approval/approval.pb.go @@ -70,21 +70,377 @@ func (StatusType) EnumDescriptor() ([]byte, []int) { return file_api_approval_approval_proto_rawDescGZIP(), []int{0} } +type NowLevelByInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ApprovalID uint64 `protobuf:"varint,2,opt,name=ApprovalID,proto3" json:"ApprovalID,omitempty"` +} + +func (x *NowLevelByInfoRequest) Reset() { + *x = NowLevelByInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NowLevelByInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NowLevelByInfoRequest) ProtoMessage() {} + +func (x *NowLevelByInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[0] + 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 NowLevelByInfoRequest.ProtoReflect.Descriptor instead. +func (*NowLevelByInfoRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{0} +} + +func (x *NowLevelByInfoRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *NowLevelByInfoRequest) GetApprovalID() uint64 { + if x != nil { + return x.ApprovalID + } + return 0 +} + +type WorkFlowResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + Reply string `protobuf:"bytes,3,opt,name=Reply,proto3" json:"Reply,omitempty"` + Status uint64 `protobuf:"varint,5,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + UserID uint64 `protobuf:"varint,7,opt,name=UserID,json=userID,proto3" json:"UserID,omitempty"` +} + +func (x *WorkFlowResponse) Reset() { + *x = WorkFlowResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkFlowResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkFlowResponse) ProtoMessage() {} + +func (x *WorkFlowResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[1] + 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 WorkFlowResponse.ProtoReflect.Descriptor instead. +func (*WorkFlowResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{1} +} + +func (x *WorkFlowResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *WorkFlowResponse) GetReply() string { + if x != nil { + return x.Reply + } + return "" +} + +func (x *WorkFlowResponse) GetStatus() uint64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *WorkFlowResponse) GetUserID() uint64 { + if x != nil { + return x.UserID + } + return 0 +} + +type CommonRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` +} + +func (x *CommonRequest) Reset() { + *x = CommonRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommonRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommonRequest) ProtoMessage() {} + +func (x *CommonRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[2] + 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 CommonRequest.ProtoReflect.Descriptor instead. +func (*CommonRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{2} +} + +func (x *CommonRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type CreateTypeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + Title string `protobuf:"bytes,3,opt,name=Title,json=title,proto3" json:"Title,omitempty"` + KeyWord string `protobuf:"bytes,4,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` +} + +func (x *CreateTypeRequest) Reset() { + *x = CreateTypeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTypeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTypeRequest) ProtoMessage() {} + +func (x *CreateTypeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[3] + 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 CreateTypeRequest.ProtoReflect.Descriptor instead. +func (*CreateTypeRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateTypeRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *CreateTypeRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *CreateTypeRequest) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *CreateTypeRequest) GetKeyWord() string { + if x != nil { + return x.KeyWord + } + return "" +} + +type TypeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,proto3" json:"Domain,omitempty"` +} + +func (x *TypeResponse) Reset() { + *x = TypeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TypeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypeResponse) ProtoMessage() {} + +func (x *TypeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[4] + 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 TypeResponse.ProtoReflect.Descriptor instead. +func (*TypeResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{4} +} + +func (x *TypeResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *TypeResponse) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type AllTypeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*CreateTypeRequest `protobuf:"bytes,1,rep,name=Data,proto3" json:"Data,omitempty"` + Count uint64 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` +} + +func (x *AllTypeResponse) Reset() { + *x = AllTypeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AllTypeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AllTypeResponse) ProtoMessage() {} + +func (x *AllTypeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[5] + 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 AllTypeResponse.ProtoReflect.Descriptor instead. +func (*AllTypeResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{5} +} + +func (x *AllTypeResponse) GetData() []*CreateTypeRequest { + if x != nil { + return x.Data + } + return nil +} + +func (x *AllTypeResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + type StatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` - ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` - Replay string `protobuf:"bytes,3,opt,name=Replay,json=replay,proto3" json:"Replay,omitempty"` - Status StatusType `protobuf:"varint,4,opt,name=Status,json=status,proto3,enum=approval.StatusType" json:"Status,omitempty"` + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + Reply string `protobuf:"bytes,3,opt,name=Reply,proto3" json:"Reply,omitempty"` + WorkFlowId uint64 `protobuf:"varint,4,opt,name=WorkFlowId,json=workFlowId,proto3" json:"WorkFlowId,omitempty"` + Status StatusType `protobuf:"varint,5,opt,name=Status,json=status,proto3,enum=approval.StatusType" json:"Status,omitempty"` + Level uint64 `protobuf:"varint,6,opt,name=Level,json=level,proto3" json:"Level,omitempty"` } func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[0] + mi := &file_api_approval_approval_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -97,7 +453,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[0] + mi := &file_api_approval_approval_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -110,7 +466,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{0} + return file_api_approval_approval_proto_rawDescGZIP(), []int{6} } func (x *StatusRequest) GetDomain() string { @@ -127,13 +483,20 @@ func (x *StatusRequest) GetID() uint64 { return 0 } -func (x *StatusRequest) GetReplay() string { +func (x *StatusRequest) GetReply() string { if x != nil { - return x.Replay + return x.Reply } return "" } +func (x *StatusRequest) GetWorkFlowId() uint64 { + if x != nil { + return x.WorkFlowId + } + return 0 +} + func (x *StatusRequest) GetStatus() StatusType { if x != nil { return x.Status @@ -141,6 +504,13 @@ func (x *StatusRequest) GetStatus() StatusType { return StatusType_Doing } +func (x *StatusRequest) GetLevel() uint64 { + if x != nil { + return x.Level + } + return 0 +} + type StatusResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -150,7 +520,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[1] + mi := &file_api_approval_approval_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -163,7 +533,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[1] + mi := &file_api_approval_approval_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -176,7 +546,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{1} + return file_api_approval_approval_proto_rawDescGZIP(), []int{7} } type ListRequest struct { @@ -195,7 +565,7 @@ type ListRequest struct { func (x *ListRequest) Reset() { *x = ListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[2] + mi := &file_api_approval_approval_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -208,7 +578,7 @@ func (x *ListRequest) String() string { func (*ListRequest) ProtoMessage() {} func (x *ListRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[2] + mi := &file_api_approval_approval_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -221,7 +591,7 @@ func (x *ListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRequest.ProtoReflect.Descriptor instead. func (*ListRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{2} + return file_api_approval_approval_proto_rawDescGZIP(), []int{8} } func (x *ListRequest) GetDomain() string { @@ -278,7 +648,7 @@ type ListResponse struct { func (x *ListResponse) Reset() { *x = ListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[3] + mi := &file_api_approval_approval_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +661,7 @@ func (x *ListResponse) String() string { func (*ListResponse) ProtoMessage() {} func (x *ListResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[3] + mi := &file_api_approval_approval_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +674,7 @@ func (x *ListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResponse.ProtoReflect.Descriptor instead. func (*ListResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{3} + return file_api_approval_approval_proto_rawDescGZIP(), []int{9} } func (x *ListResponse) GetCount() uint64 { @@ -334,7 +704,7 @@ type ViewedRequest struct { func (x *ViewedRequest) Reset() { *x = ViewedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[4] + mi := &file_api_approval_approval_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -347,7 +717,7 @@ func (x *ViewedRequest) String() string { func (*ViewedRequest) ProtoMessage() {} func (x *ViewedRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[4] + mi := &file_api_approval_approval_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -360,7 +730,7 @@ func (x *ViewedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewedRequest.ProtoReflect.Descriptor instead. func (*ViewedRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{4} + return file_api_approval_approval_proto_rawDescGZIP(), []int{10} } func (x *ViewedRequest) GetDomain() string { @@ -397,7 +767,7 @@ type InformationRequest struct { func (x *InformationRequest) Reset() { *x = InformationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[5] + mi := &file_api_approval_approval_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -410,7 +780,7 @@ func (x *InformationRequest) String() string { func (*InformationRequest) ProtoMessage() {} func (x *InformationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[5] + mi := &file_api_approval_approval_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -423,7 +793,7 @@ func (x *InformationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InformationRequest.ProtoReflect.Descriptor instead. func (*InformationRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{5} + return file_api_approval_approval_proto_rawDescGZIP(), []int{11} } func (x *InformationRequest) GetDomain() string { @@ -461,7 +831,7 @@ type Information struct { func (x *Information) Reset() { *x = Information{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[6] + mi := &file_api_approval_approval_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -474,7 +844,7 @@ func (x *Information) String() string { func (*Information) ProtoMessage() {} func (x *Information) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[6] + mi := &file_api_approval_approval_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -487,7 +857,7 @@ func (x *Information) ProtoReflect() protoreflect.Message { // Deprecated: Use Information.ProtoReflect.Descriptor instead. func (*Information) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{6} + return file_api_approval_approval_proto_rawDescGZIP(), []int{12} } func (x *Information) GetTotal() uint64 { @@ -531,7 +901,7 @@ type InformationResponse struct { func (x *InformationResponse) Reset() { *x = InformationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[7] + mi := &file_api_approval_approval_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +914,7 @@ func (x *InformationResponse) String() string { func (*InformationResponse) ProtoMessage() {} func (x *InformationResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[7] + mi := &file_api_approval_approval_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -557,7 +927,7 @@ func (x *InformationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InformationResponse.ProtoReflect.Descriptor instead. func (*InformationResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{7} + return file_api_approval_approval_proto_rawDescGZIP(), []int{13} } func (x *InformationResponse) GetMySubmitInfo() *Information { @@ -595,7 +965,7 @@ type Bundle struct { func (x *Bundle) Reset() { *x = Bundle{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[8] + mi := &file_api_approval_approval_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -608,7 +978,7 @@ func (x *Bundle) String() string { func (*Bundle) ProtoMessage() {} func (x *Bundle) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[8] + mi := &file_api_approval_approval_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -621,7 +991,7 @@ func (x *Bundle) ProtoReflect() protoreflect.Message { // Deprecated: Use Bundle.ProtoReflect.Descriptor instead. func (*Bundle) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{8} + return file_api_approval_approval_proto_rawDescGZIP(), []int{14} } func (x *Bundle) GetID() uint64 { @@ -665,7 +1035,7 @@ type Show struct { func (x *Show) Reset() { *x = Show{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[9] + mi := &file_api_approval_approval_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -678,7 +1048,7 @@ func (x *Show) String() string { func (*Show) ProtoMessage() {} func (x *Show) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[9] + mi := &file_api_approval_approval_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -691,7 +1061,7 @@ func (x *Show) ProtoReflect() protoreflect.Message { // Deprecated: Use Show.ProtoReflect.Descriptor instead. func (*Show) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{9} + return file_api_approval_approval_proto_rawDescGZIP(), []int{15} } func (x *Show) GetID() uint64 { @@ -733,7 +1103,7 @@ type ApprovalWork struct { func (x *ApprovalWork) Reset() { *x = ApprovalWork{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[10] + mi := &file_api_approval_approval_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -746,7 +1116,7 @@ func (x *ApprovalWork) String() string { func (*ApprovalWork) ProtoMessage() {} func (x *ApprovalWork) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[10] + mi := &file_api_approval_approval_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -759,7 +1129,7 @@ func (x *ApprovalWork) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalWork.ProtoReflect.Descriptor instead. func (*ApprovalWork) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{10} + return file_api_approval_approval_proto_rawDescGZIP(), []int{16} } func (x *ApprovalWork) GetID() uint64 { @@ -832,7 +1202,7 @@ type Work struct { func (x *Work) Reset() { *x = Work{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[11] + mi := &file_api_approval_approval_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -845,7 +1215,7 @@ func (x *Work) String() string { func (*Work) ProtoMessage() {} func (x *Work) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[11] + mi := &file_api_approval_approval_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -858,7 +1228,7 @@ func (x *Work) ProtoReflect() protoreflect.Message { // Deprecated: Use Work.ProtoReflect.Descriptor instead. func (*Work) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{11} + return file_api_approval_approval_proto_rawDescGZIP(), []int{17} } func (x *Work) GetID() uint64 { @@ -906,7 +1276,7 @@ type ApprovalExhibition struct { func (x *ApprovalExhibition) Reset() { *x = ApprovalExhibition{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[12] + mi := &file_api_approval_approval_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -919,7 +1289,7 @@ func (x *ApprovalExhibition) String() string { func (*ApprovalExhibition) ProtoMessage() {} func (x *ApprovalExhibition) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[12] + mi := &file_api_approval_approval_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -932,7 +1302,7 @@ func (x *ApprovalExhibition) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalExhibition.ProtoReflect.Descriptor instead. func (*ApprovalExhibition) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{12} + return file_api_approval_approval_proto_rawDescGZIP(), []int{18} } func (x *ApprovalExhibition) GetID() uint64 { @@ -998,7 +1368,7 @@ type Exhibition struct { func (x *Exhibition) Reset() { *x = Exhibition{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[13] + mi := &file_api_approval_approval_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1011,7 +1381,7 @@ func (x *Exhibition) String() string { func (*Exhibition) ProtoMessage() {} func (x *Exhibition) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[13] + mi := &file_api_approval_approval_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1024,7 +1394,7 @@ func (x *Exhibition) ProtoReflect() protoreflect.Message { // Deprecated: Use Exhibition.ProtoReflect.Descriptor instead. func (*Exhibition) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{13} + return file_api_approval_approval_proto_rawDescGZIP(), []int{19} } func (x *Exhibition) GetID() uint64 { @@ -1060,28 +1430,31 @@ type CreateRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` - Status StatusType `protobuf:"varint,3,opt,name=Status,json=status,proto3,enum=approval.StatusType" json:"Status,omitempty"` - Type string `protobuf:"bytes,4,opt,name=Type,json=type,proto3" json:"Type,omitempty"` - ApproverID uint64 `protobuf:"varint,5,opt,name=ApproverID,json=approverID,proto3" json:"ApproverID,omitempty"` - ApproverName string `protobuf:"bytes,6,opt,name=ApproverName,json=approverName,proto3" json:"ApproverName,omitempty"` - SubmitterID uint64 `protobuf:"varint,7,opt,name=SubmitterID,json=submitterID,proto3" json:"SubmitterID,omitempty"` //审批人 - SubmitterName string `protobuf:"bytes,8,opt,name=SubmitterName,json=submitterName,proto3" json:"SubmitterName,omitempty"` - CopyUsers []*CopyUser `protobuf:"bytes,9,rep,name=CopyUsers,json=copyName,proto3" json:"CopyUsers,omitempty"` //抄送人 - Content string `protobuf:"bytes,10,opt,name=Content,json=content,proto3" json:"Content,omitempty"` //申请内容 - Reply string `protobuf:"bytes,11,opt,name=Reply,json=reply,proto3" json:"Reply,omitempty"` //回复 - IsViewed bool `protobuf:"varint,12,opt,name=IsViewed,proto3" json:"IsViewed,omitempty"` //抄送人是否查看过 - Work *Work `protobuf:"bytes,13,opt,name=Work,json=work,proto3" json:"Work,omitempty"` - Show *Show `protobuf:"bytes,14,opt,name=Show,json=show,proto3" json:"Show,omitempty"` - Exhibition *Exhibition `protobuf:"bytes,15,opt,name=Exhibition,json=exhibition,proto3" json:"Exhibition,omitempty"` - Bundle *Bundle `protobuf:"bytes,16,opt,name=Bundle,json=bundle,proto3" json:"Bundle,omitempty"` + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + Status StatusType `protobuf:"varint,3,opt,name=Status,json=status,proto3,enum=approval.StatusType" json:"Status,omitempty"` + Type string `protobuf:"bytes,4,opt,name=Type,json=type,proto3" json:"Type,omitempty"` + ApproverID uint64 `protobuf:"varint,5,opt,name=ApproverID,json=approverID,proto3" json:"ApproverID,omitempty"` + ApproverName string `protobuf:"bytes,6,opt,name=ApproverName,json=approverName,proto3" json:"ApproverName,omitempty"` + SubmitterID uint64 `protobuf:"varint,7,opt,name=SubmitterID,json=submitterID,proto3" json:"SubmitterID,omitempty"` //审批人 + SubmitterName string `protobuf:"bytes,8,opt,name=SubmitterName,json=submitterName,proto3" json:"SubmitterName,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,9,rep,name=CopyUsers,json=copyName,proto3" json:"CopyUsers,omitempty"` //抄送人 + Content string `protobuf:"bytes,10,opt,name=Content,json=content,proto3" json:"Content,omitempty"` //申请内容 + Reply string `protobuf:"bytes,11,opt,name=Reply,json=reply,proto3" json:"Reply,omitempty"` //回复 + IsViewed bool `protobuf:"varint,12,opt,name=IsViewed,proto3" json:"IsViewed,omitempty"` //抄送人是否查看过 + Work *Work `protobuf:"bytes,13,opt,name=Work,json=work,proto3" json:"Work,omitempty"` + Show *Show `protobuf:"bytes,14,opt,name=Show,json=show,proto3" json:"Show,omitempty"` + Exhibition *Exhibition `protobuf:"bytes,15,opt,name=Exhibition,json=exhibition,proto3" json:"Exhibition,omitempty"` + Bundle *Bundle `protobuf:"bytes,16,opt,name=Bundle,json=bundle,proto3" json:"Bundle,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,17,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` //审批的人 + CanApproval bool `protobuf:"varint,18,opt,name=CanApproval,json=canApproval,proto3" json:"CanApproval,omitempty"` //审批的人 + WorkFlows []*WorkFlow `protobuf:"bytes,19,rep,name=WorkFlows,json=workFlows,proto3" json:"WorkFlows,omitempty"` //审批的人 } func (x *CreateRequest) Reset() { *x = CreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[14] + mi := &file_api_approval_approval_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1094,7 +1467,7 @@ func (x *CreateRequest) String() string { func (*CreateRequest) ProtoMessage() {} func (x *CreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[14] + mi := &file_api_approval_approval_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1107,7 +1480,7 @@ func (x *CreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRequest.ProtoReflect.Descriptor instead. func (*CreateRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{14} + return file_api_approval_approval_proto_rawDescGZIP(), []int{20} } func (x *CreateRequest) GetID() uint64 { @@ -1184,42 +1557,158 @@ func (x *CreateRequest) GetReply() string { if x != nil { return x.Reply } - return "" + return "" +} + +func (x *CreateRequest) GetIsViewed() bool { + if x != nil { + return x.IsViewed + } + return false +} + +func (x *CreateRequest) GetWork() *Work { + if x != nil { + return x.Work + } + return nil +} + +func (x *CreateRequest) GetShow() *Show { + if x != nil { + return x.Show + } + return nil +} + +func (x *CreateRequest) GetExhibition() *Exhibition { + if x != nil { + return x.Exhibition + } + return nil +} + +func (x *CreateRequest) GetBundle() *Bundle { + if x != nil { + return x.Bundle + } + return nil +} + +func (x *CreateRequest) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +func (x *CreateRequest) GetCanApproval() bool { + if x != nil { + return x.CanApproval + } + return false +} + +func (x *CreateRequest) GetWorkFlows() []*WorkFlow { + if x != nil { + return x.WorkFlows + } + return nil +} + +type WorkFlow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + UserID uint64 `protobuf:"varint,3,opt,name=UserID,json=userID,proto3" json:"UserID,omitempty"` + Name string `protobuf:"bytes,4,opt,name=Name,json=name,proto3" json:"Name,omitempty"` + Level uint64 `protobuf:"varint,5,opt,name=Level,json=level,proto3" json:"Level,omitempty"` + Status uint64 `protobuf:"varint,6,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Reply string `protobuf:"bytes,7,opt,name=Reply,json=reply,proto3" json:"Reply,omitempty"` + OperatedAt string `protobuf:"bytes,8,opt,name=OperatedAt,json=operatedAt,proto3" json:"OperatedAt,omitempty"` +} + +func (x *WorkFlow) Reset() { + *x = WorkFlow{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkFlow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkFlow) ProtoMessage() {} + +func (x *WorkFlow) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[21] + 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 WorkFlow.ProtoReflect.Descriptor instead. +func (*WorkFlow) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{21} +} + +func (x *WorkFlow) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *WorkFlow) GetUserID() uint64 { + if x != nil { + return x.UserID + } + return 0 } -func (x *CreateRequest) GetIsViewed() bool { +func (x *WorkFlow) GetName() string { if x != nil { - return x.IsViewed + return x.Name } - return false + return "" } -func (x *CreateRequest) GetWork() *Work { +func (x *WorkFlow) GetLevel() uint64 { if x != nil { - return x.Work + return x.Level } - return nil + return 0 } -func (x *CreateRequest) GetShow() *Show { +func (x *WorkFlow) GetStatus() uint64 { if x != nil { - return x.Show + return x.Status } - return nil + return 0 } -func (x *CreateRequest) GetExhibition() *Exhibition { +func (x *WorkFlow) GetReply() string { if x != nil { - return x.Exhibition + return x.Reply } - return nil + return "" } -func (x *CreateRequest) GetBundle() *Bundle { +func (x *WorkFlow) GetOperatedAt() string { if x != nil { - return x.Bundle + return x.OperatedAt } - return nil + return "" } type DetailRequest struct { @@ -1234,7 +1723,7 @@ type DetailRequest struct { func (x *DetailRequest) Reset() { *x = DetailRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[15] + mi := &file_api_approval_approval_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1736,7 @@ func (x *DetailRequest) String() string { func (*DetailRequest) ProtoMessage() {} func (x *DetailRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[15] + mi := &file_api_approval_approval_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1749,7 @@ func (x *DetailRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DetailRequest.ProtoReflect.Descriptor instead. func (*DetailRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{15} + return file_api_approval_approval_proto_rawDescGZIP(), []int{22} } func (x *DetailRequest) GetID() uint64 { @@ -1289,7 +1778,7 @@ type ApprovalResponse struct { func (x *ApprovalResponse) Reset() { *x = ApprovalResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[16] + mi := &file_api_approval_approval_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1302,7 +1791,7 @@ func (x *ApprovalResponse) String() string { func (*ApprovalResponse) ProtoMessage() {} func (x *ApprovalResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[16] + mi := &file_api_approval_approval_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1315,7 +1804,7 @@ func (x *ApprovalResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalResponse.ProtoReflect.Descriptor instead. func (*ApprovalResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{16} + return file_api_approval_approval_proto_rawDescGZIP(), []int{23} } func (x *ApprovalResponse) GetID() uint64 { @@ -1343,7 +1832,7 @@ type RemoveResponse struct { func (x *RemoveResponse) Reset() { *x = RemoveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[17] + mi := &file_api_approval_approval_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1356,7 +1845,7 @@ func (x *RemoveResponse) String() string { func (*RemoveResponse) ProtoMessage() {} func (x *RemoveResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[17] + mi := &file_api_approval_approval_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1369,7 +1858,7 @@ func (x *RemoveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveResponse.ProtoReflect.Descriptor instead. func (*RemoveResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{17} + return file_api_approval_approval_proto_rawDescGZIP(), []int{24} } func (x *RemoveResponse) GetSuccess() bool { @@ -1390,7 +1879,7 @@ type ApprovalExhibitionRemove struct { func (x *ApprovalExhibitionRemove) Reset() { *x = ApprovalExhibitionRemove{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[18] + mi := &file_api_approval_approval_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1403,7 +1892,7 @@ func (x *ApprovalExhibitionRemove) String() string { func (*ApprovalExhibitionRemove) ProtoMessage() {} func (x *ApprovalExhibitionRemove) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[18] + mi := &file_api_approval_approval_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1416,7 +1905,7 @@ func (x *ApprovalExhibitionRemove) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalExhibitionRemove.ProtoReflect.Descriptor instead. func (*ApprovalExhibitionRemove) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{18} + return file_api_approval_approval_proto_rawDescGZIP(), []int{25} } func (x *ApprovalExhibitionRemove) GetSuccess() bool { @@ -1446,7 +1935,7 @@ type ApprovalExhibitionRequest struct { func (x *ApprovalExhibitionRequest) Reset() { *x = ApprovalExhibitionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[19] + mi := &file_api_approval_approval_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1459,7 +1948,7 @@ func (x *ApprovalExhibitionRequest) String() string { func (*ApprovalExhibitionRequest) ProtoMessage() {} func (x *ApprovalExhibitionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[19] + mi := &file_api_approval_approval_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1472,7 +1961,7 @@ func (x *ApprovalExhibitionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalExhibitionRequest.ProtoReflect.Descriptor instead. func (*ApprovalExhibitionRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{19} + return file_api_approval_approval_proto_rawDescGZIP(), []int{26} } func (x *ApprovalExhibitionRequest) GetID() uint64 { @@ -1557,7 +2046,7 @@ type ApprovalExhibitionDetail struct { func (x *ApprovalExhibitionDetail) Reset() { *x = ApprovalExhibitionDetail{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[20] + mi := &file_api_approval_approval_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1570,7 +2059,7 @@ func (x *ApprovalExhibitionDetail) String() string { func (*ApprovalExhibitionDetail) ProtoMessage() {} func (x *ApprovalExhibitionDetail) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[20] + mi := &file_api_approval_approval_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1583,7 +2072,7 @@ func (x *ApprovalExhibitionDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalExhibitionDetail.ProtoReflect.Descriptor instead. func (*ApprovalExhibitionDetail) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{20} + return file_api_approval_approval_proto_rawDescGZIP(), []int{27} } func (x *ApprovalExhibitionDetail) GetID() uint64 { @@ -1613,7 +2102,7 @@ type CopyUser struct { func (x *CopyUser) Reset() { *x = CopyUser{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[21] + mi := &file_api_approval_approval_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1626,7 +2115,7 @@ func (x *CopyUser) String() string { func (*CopyUser) ProtoMessage() {} func (x *CopyUser) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[21] + mi := &file_api_approval_approval_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1639,7 +2128,7 @@ func (x *CopyUser) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyUser.ProtoReflect.Descriptor instead. func (*CopyUser) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{21} + return file_api_approval_approval_proto_rawDescGZIP(), []int{28} } func (x *CopyUser) GetID() uint64 { @@ -1663,26 +2152,88 @@ func (x *CopyUser) GetIsViewed() bool { return false } +type ApprovalUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,json=name,proto3" json:"Name,omitempty"` + Level string `protobuf:"bytes,3,opt,name=Level,proto3" json:"Level,omitempty"` +} + +func (x *ApprovalUser) Reset() { + *x = ApprovalUser{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApprovalUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApprovalUser) ProtoMessage() {} + +func (x *ApprovalUser) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[29] + 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 ApprovalUser.ProtoReflect.Descriptor instead. +func (*ApprovalUser) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{29} +} + +func (x *ApprovalUser) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *ApprovalUser) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ApprovalUser) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + type SettingRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - DeletedAt uint64 `protobuf:"varint,2,opt,name=DeletedAt,json=deletedAt,proto3" json:"DeletedAt,omitempty"` - CreatedAt string `protobuf:"bytes,3,opt,name=CreatedAt,json=createdAt,proto3" json:"CreatedAt,omitempty"` - UpdatedAt string `protobuf:"bytes,4,opt,name=UpdatedAt,json=updatedAt,proto3" json:"UpdatedAt,omitempty"` - DepartmentID uint64 `protobuf:"varint,5,opt,name=DepartmentID,json=departmentID,proto3" json:"DepartmentID,omitempty"` - CopyUsers []*CopyUser `protobuf:"bytes,6,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` - ApproverID uint64 `protobuf:"varint,7,opt,name=ApproverID,json=approverID,proto3" json:"ApproverID,omitempty"` - ApproverName string `protobuf:"bytes,8,opt,name=ApproverName,json=approverName,proto3" json:"ApproverName,omitempty"` - Domain string `protobuf:"bytes,9,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + DeletedAt uint64 `protobuf:"varint,2,opt,name=DeletedAt,json=deletedAt,proto3" json:"DeletedAt,omitempty"` + CreatedAt string `protobuf:"bytes,3,opt,name=CreatedAt,json=createdAt,proto3" json:"CreatedAt,omitempty"` + UpdatedAt string `protobuf:"bytes,4,opt,name=UpdatedAt,json=updatedAt,proto3" json:"UpdatedAt,omitempty"` + KeyWord string `protobuf:"bytes,5,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,6,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,9,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` + Domain string `protobuf:"bytes,10,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` } func (x *SettingRequest) Reset() { *x = SettingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[22] + mi := &file_api_approval_approval_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1695,7 +2246,7 @@ func (x *SettingRequest) String() string { func (*SettingRequest) ProtoMessage() {} func (x *SettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[22] + mi := &file_api_approval_approval_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1708,7 +2259,7 @@ func (x *SettingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SettingRequest.ProtoReflect.Descriptor instead. func (*SettingRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{22} + return file_api_approval_approval_proto_rawDescGZIP(), []int{30} } func (x *SettingRequest) GetID() uint64 { @@ -1739,11 +2290,11 @@ func (x *SettingRequest) GetUpdatedAt() string { return "" } -func (x *SettingRequest) GetDepartmentID() uint64 { +func (x *SettingRequest) GetKeyWord() string { if x != nil { - return x.DepartmentID + return x.KeyWord } - return 0 + return "" } func (x *SettingRequest) GetCopyUsers() []*CopyUser { @@ -1753,18 +2304,11 @@ func (x *SettingRequest) GetCopyUsers() []*CopyUser { return nil } -func (x *SettingRequest) GetApproverID() uint64 { - if x != nil { - return x.ApproverID - } - return 0 -} - -func (x *SettingRequest) GetApproverName() string { +func (x *SettingRequest) GetApprovalUsers() []*ApprovalUser { if x != nil { - return x.ApproverName + return x.ApprovalUsers } - return "" + return nil } func (x *SettingRequest) GetDomain() string { @@ -1779,14 +2323,14 @@ type DetailSettingRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DepartmentID uint64 `protobuf:"varint,1,opt,name=DepartmentID,json=departmentID,proto3" json:"DepartmentID,omitempty"` - Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + KeyWord string `protobuf:"bytes,1,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` } func (x *DetailSettingRequest) Reset() { *x = DetailSettingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[23] + mi := &file_api_approval_approval_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1799,7 +2343,7 @@ func (x *DetailSettingRequest) String() string { func (*DetailSettingRequest) ProtoMessage() {} func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[23] + mi := &file_api_approval_approval_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1812,14 +2356,14 @@ func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DetailSettingRequest.ProtoReflect.Descriptor instead. func (*DetailSettingRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{23} + return file_api_approval_approval_proto_rawDescGZIP(), []int{31} } -func (x *DetailSettingRequest) GetDepartmentID() uint64 { +func (x *DetailSettingRequest) GetKeyWord() string { if x != nil { - return x.DepartmentID + return x.KeyWord } - return 0 + return "" } func (x *DetailSettingRequest) GetDomain() string { @@ -1841,7 +2385,7 @@ type SettingResponse struct { func (x *SettingResponse) Reset() { *x = SettingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[24] + mi := &file_api_approval_approval_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1854,7 +2398,7 @@ func (x *SettingResponse) String() string { func (*SettingResponse) ProtoMessage() {} func (x *SettingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[24] + mi := &file_api_approval_approval_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1867,7 +2411,7 @@ func (x *SettingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SettingResponse.ProtoReflect.Descriptor instead. func (*SettingResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{24} + return file_api_approval_approval_proto_rawDescGZIP(), []int{32} } func (x *SettingResponse) GetID() uint64 { @@ -1893,218 +2437,276 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x77, 0x69, 0x74, 0x6b, 0x6f, 0x77, 0x2f, 0x67, 0x6f, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x94, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x4f, 0x0a, 0x15, 0x4e, 0x6f, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, + 0x22, 0x68, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x22, 0x6b, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x57, 0x6f, 0x72, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, + 0x22, 0x36, 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x58, 0x0a, 0x0f, 0x41, 0x6c, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0xc8, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, + 0x49, 0x64, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x15, 0xe2, 0xdf, 0x1f, 0x11, 0x2a, 0x0c, + 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe9, 0x9d, 0x9e, 0xe6, 0xb3, 0x95, 0x88, 0x01, 0x01, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x10, 0x0a, + 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xbb, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x38, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x20, 0xe2, 0xdf, 0x1f, 0x1c, 0x2a, 0x18, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x8f, 0x98, + 0xe9, 0x87, 0x8f, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, 0xbb, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0x58, + 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x50, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x51, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x4f, 0x0a, 0x0d, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x15, 0xe2, 0xdf, 0x1f, 0x11, 0x2a, 0x0c, 0xe7, - 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe9, 0x9d, 0x9e, 0xe6, 0xb3, 0x95, 0x88, 0x01, 0x01, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0xe2, 0xdf, 0x1f, 0x1c, 0x2a, 0x18, - 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0xbf, 0x85, 0xe9, - 0xa1, 0xbb, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x50, 0x61, - 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x51, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4f, 0x0a, 0x0d, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, - 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, - 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x6f, - 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, - 0x0a, 0x09, 0x46, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xc2, 0x01, 0x0a, - 0x13, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x4d, 0x79, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x6d, 0x79, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x39, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x0a, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x22, 0x7e, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x75, - 0x6d, 0x22, 0x4c, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, - 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, - 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x41, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x74, 0x22, - 0x80, 0x02, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x44, 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x0b, + 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x22, 0xc2, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x4d, + 0x79, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x79, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x4d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x35, 0x0a, 0x0a, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x7e, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x28, + 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x75, 0x6d, 0x22, 0x4c, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, - 0x12, 0x16, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, - 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, - 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, - 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, - 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x44, - 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0a, 0x45, 0x78, 0x68, - 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, - 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xb0, 0x05, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x20, 0xe2, 0xdf, 0x1f, 0x1c, 0x2a, 0x18, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, - 0x83, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, 0xbb, 0xe8, 0xa6, 0x81, - 0xe6, 0x9c, 0x89, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x43, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x42, 0x15, 0xe2, 0xdf, 0x1f, 0x11, 0x2a, 0x0c, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, - 0x81, 0xe9, 0x9d, 0x9e, 0xe6, 0xb3, 0x95, 0x88, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x1a, 0xe2, 0xdf, 0x1f, 0x16, 0x2a, 0x12, 0xe7, 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xe5, 0xbf, - 0x85, 0xe9, 0xa1, 0xbb, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0x58, 0x01, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x44, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x16, 0xe2, 0xdf, 0x1f, 0x12, 0x2a, 0x0e, 0xe6, 0x8f, - 0x90, 0xe4, 0xba, 0xa4, 0xe4, 0xba, 0xba, 0xe4, 0xba, 0xba, 0x49, 0x44, 0x58, 0x01, 0x52, 0x0a, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x44, 0x12, 0x3b, 0x0a, 0x0c, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xe2, 0xdf, 0x1f, 0x13, 0x2a, 0x0f, 0xe6, 0x8f, 0x90, 0xe4, 0xba, 0xa4, 0xe4, 0xba, - 0xba, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0x58, 0x01, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2f, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, - 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6f, 0x70, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, - 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x04, - 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x52, 0x04, 0x77, 0x6f, 0x72, 0x6b, - 0x12, 0x22, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x04, - 0x73, 0x68, 0x6f, 0x77, 0x12, 0x34, 0x0a, 0x0a, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x2e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x06, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x37, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x53, 0x68, 0x6f, 0x77, 0x41, 0x74, 0x22, 0x80, 0x02, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, + 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, + 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x20, 0x0a, + 0x0b, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, + 0x76, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x57, 0x6f, + 0x72, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, + 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x52, 0x0d, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0xf0, 0x01, 0x0a, + 0x12, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x68, 0x69, 0x62, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, + 0xa6, 0x01, 0x0a, 0x0a, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, + 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc2, 0x06, 0x0a, 0x0d, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x06, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0xe2, 0xdf, 0x1f, 0x1c, + 0x2a, 0x18, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0xbf, + 0x85, 0xe9, 0xa1, 0xbb, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x15, 0xe2, 0xdf, 0x1f, 0x11, + 0x2a, 0x0c, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe9, 0x9d, 0x9e, 0xe6, 0xb3, 0x95, 0x88, 0x01, + 0x01, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xe2, 0xdf, 0x1f, 0x16, 0x2a, 0x12, 0xe7, + 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, 0xbb, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, + 0x89, 0x58, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x16, 0xe2, + 0xdf, 0x1f, 0x12, 0x2a, 0x0e, 0xe6, 0x8f, 0x90, 0xe4, 0xba, 0xa4, 0xe4, 0xba, 0xba, 0xe4, 0xba, + 0xba, 0x49, 0x44, 0x58, 0x01, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x49, + 0x44, 0x12, 0x3b, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xe2, 0xdf, 0x1f, 0x13, 0x2a, 0x0f, 0xe6, + 0x8f, 0x90, 0xe4, 0xba, 0xa4, 0xe4, 0xba, 0xba, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0x58, 0x01, + 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x08, 0x63, + 0x6f, 0x70, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x04, 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x52, 0x04, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x34, 0x0a, 0x0a, 0x45, + 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x45, 0x78, 0x68, 0x69, 0x62, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x28, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x61, 0x6e, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x63, 0x61, 0x6e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x30, 0x0a, 0x09, 0x57, + 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, + 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0xaa, 0x01, + 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x37, 0x0a, 0x0d, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x22, 0x3c, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x34, 0x0a, + 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, + 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x45, + 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, + 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, + 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, + 0x10, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x42, 0x0a, 0x18, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3c, 0x0a, - 0x10, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, - 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x34, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xe3, 0x02, - 0x0a, 0x19, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x68, - 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, - 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, - 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x45, 0x78, 0x68, 0x69, 0x62, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x22, 0x42, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, - 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, - 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x4a, 0x0a, 0x08, 0x43, 0x6f, 0x70, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x64, 0x22, 0xac, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x4a, 0x0a, + 0x08, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x22, 0x48, 0x0a, 0x0c, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x22, 0x9c, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, @@ -2112,73 +2714,98 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x65, 0x72, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x22, 0x52, 0x0a, 0x14, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x65, - 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x16, - 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x2a, 0x29, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x6b, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, 0x69, 0x6c, 0x10, 0x02, 0x32, 0xa8, - 0x05, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x06, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, + 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x22, 0x48, 0x0a, 0x14, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, + 0x79, 0x57, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, + 0x57, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2a, 0x29, 0x0a, 0x0a, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x6f, 0x69, 0x6e, 0x67, + 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x6b, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, + 0x69, 0x6c, 0x10, 0x02, 0x32, 0xc9, 0x08, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, + 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, + 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x37, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x4e, 0x6f, 0x77, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4e, 0x6f, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, + 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x49, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x56, 0x69, 0x65, 0x77, + 0x65, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0d, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1b, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x3f, 0x0a, 0x07, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x3e, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2194,75 +2821,99 @@ func file_api_approval_approval_proto_rawDescGZIP() []byte { } var file_api_approval_approval_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_api_approval_approval_proto_goTypes = []interface{}{ (StatusType)(0), // 0: approval.StatusType - (*StatusRequest)(nil), // 1: approval.StatusRequest - (*StatusResponse)(nil), // 2: approval.StatusResponse - (*ListRequest)(nil), // 3: approval.ListRequest - (*ListResponse)(nil), // 4: approval.ListResponse - (*ViewedRequest)(nil), // 5: approval.ViewedRequest - (*InformationRequest)(nil), // 6: approval.InformationRequest - (*Information)(nil), // 7: approval.Information - (*InformationResponse)(nil), // 8: approval.InformationResponse - (*Bundle)(nil), // 9: approval.Bundle - (*Show)(nil), // 10: approval.Show - (*ApprovalWork)(nil), // 11: approval.ApprovalWork - (*Work)(nil), // 12: approval.Work - (*ApprovalExhibition)(nil), // 13: approval.ApprovalExhibition - (*Exhibition)(nil), // 14: approval.Exhibition - (*CreateRequest)(nil), // 15: approval.CreateRequest - (*DetailRequest)(nil), // 16: approval.DetailRequest - (*ApprovalResponse)(nil), // 17: approval.ApprovalResponse - (*RemoveResponse)(nil), // 18: approval.RemoveResponse - (*ApprovalExhibitionRemove)(nil), // 19: approval.ApprovalExhibitionRemove - (*ApprovalExhibitionRequest)(nil), // 20: approval.ApprovalExhibitionRequest - (*ApprovalExhibitionDetail)(nil), // 21: approval.ApprovalExhibitionDetail - (*CopyUser)(nil), // 22: approval.CopyUser - (*SettingRequest)(nil), // 23: approval.SettingRequest - (*DetailSettingRequest)(nil), // 24: approval.DetailSettingRequest - (*SettingResponse)(nil), // 25: approval.SettingResponse + (*NowLevelByInfoRequest)(nil), // 1: approval.NowLevelByInfoRequest + (*WorkFlowResponse)(nil), // 2: approval.WorkFlowResponse + (*CommonRequest)(nil), // 3: approval.CommonRequest + (*CreateTypeRequest)(nil), // 4: approval.CreateTypeRequest + (*TypeResponse)(nil), // 5: approval.TypeResponse + (*AllTypeResponse)(nil), // 6: approval.AllTypeResponse + (*StatusRequest)(nil), // 7: approval.StatusRequest + (*StatusResponse)(nil), // 8: approval.StatusResponse + (*ListRequest)(nil), // 9: approval.ListRequest + (*ListResponse)(nil), // 10: approval.ListResponse + (*ViewedRequest)(nil), // 11: approval.ViewedRequest + (*InformationRequest)(nil), // 12: approval.InformationRequest + (*Information)(nil), // 13: approval.Information + (*InformationResponse)(nil), // 14: approval.InformationResponse + (*Bundle)(nil), // 15: approval.Bundle + (*Show)(nil), // 16: approval.Show + (*ApprovalWork)(nil), // 17: approval.ApprovalWork + (*Work)(nil), // 18: approval.Work + (*ApprovalExhibition)(nil), // 19: approval.ApprovalExhibition + (*Exhibition)(nil), // 20: approval.Exhibition + (*CreateRequest)(nil), // 21: approval.CreateRequest + (*WorkFlow)(nil), // 22: approval.WorkFlow + (*DetailRequest)(nil), // 23: approval.DetailRequest + (*ApprovalResponse)(nil), // 24: approval.ApprovalResponse + (*RemoveResponse)(nil), // 25: approval.RemoveResponse + (*ApprovalExhibitionRemove)(nil), // 26: approval.ApprovalExhibitionRemove + (*ApprovalExhibitionRequest)(nil), // 27: approval.ApprovalExhibitionRequest + (*ApprovalExhibitionDetail)(nil), // 28: approval.ApprovalExhibitionDetail + (*CopyUser)(nil), // 29: approval.CopyUser + (*ApprovalUser)(nil), // 30: approval.ApprovalUser + (*SettingRequest)(nil), // 31: approval.SettingRequest + (*DetailSettingRequest)(nil), // 32: approval.DetailSettingRequest + (*SettingResponse)(nil), // 33: approval.SettingResponse } var file_api_approval_approval_proto_depIdxs = []int32{ - 0, // 0: approval.StatusRequest.Status:type_name -> approval.StatusType - 15, // 1: approval.ListResponse.data:type_name -> approval.CreateRequest - 7, // 2: approval.InformationResponse.MySubmitInfo:type_name -> approval.Information - 7, // 3: approval.InformationResponse.SubmitMeInfo:type_name -> approval.Information - 7, // 4: approval.InformationResponse.DomainInfo:type_name -> approval.Information - 11, // 5: approval.Work.ApprovalWorks:type_name -> approval.ApprovalWork - 13, // 6: approval.Exhibition.ApprovalExhibitions:type_name -> approval.ApprovalExhibition - 0, // 7: approval.CreateRequest.Status:type_name -> approval.StatusType - 22, // 8: approval.CreateRequest.CopyUsers:type_name -> approval.CopyUser - 12, // 9: approval.CreateRequest.Work:type_name -> approval.Work - 10, // 10: approval.CreateRequest.Show:type_name -> approval.Show - 14, // 11: approval.CreateRequest.Exhibition:type_name -> approval.Exhibition - 9, // 12: approval.CreateRequest.Bundle:type_name -> approval.Bundle - 22, // 13: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser - 15, // 14: approval.Approval.Create:input_type -> approval.CreateRequest - 16, // 15: approval.Approval.Detail:input_type -> approval.DetailRequest - 15, // 16: approval.Approval.Update:input_type -> approval.CreateRequest - 16, // 17: approval.Approval.Remove:input_type -> approval.DetailRequest - 3, // 18: approval.Approval.List:input_type -> approval.ListRequest - 6, // 19: approval.Approval.Information:input_type -> approval.InformationRequest - 5, // 20: approval.Approval.Viewed:input_type -> approval.ViewedRequest - 1, // 21: approval.Approval.SetStatus:input_type -> approval.StatusRequest - 24, // 22: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest - 23, // 23: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest - 17, // 24: approval.Approval.Create:output_type -> approval.ApprovalResponse - 15, // 25: approval.Approval.Detail:output_type -> approval.CreateRequest - 17, // 26: approval.Approval.Update:output_type -> approval.ApprovalResponse - 18, // 27: approval.Approval.Remove:output_type -> approval.RemoveResponse - 4, // 28: approval.Approval.List:output_type -> approval.ListResponse - 8, // 29: approval.Approval.Information:output_type -> approval.InformationResponse - 17, // 30: approval.Approval.Viewed:output_type -> approval.ApprovalResponse - 2, // 31: approval.Approval.SetStatus:output_type -> approval.StatusResponse - 23, // 32: approval.Approval.DetailSetting:output_type -> approval.SettingRequest - 25, // 33: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse - 24, // [24:34] is the sub-list for method output_type - 14, // [14:24] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 4, // 0: approval.AllTypeResponse.Data:type_name -> approval.CreateTypeRequest + 0, // 1: approval.StatusRequest.Status:type_name -> approval.StatusType + 21, // 2: approval.ListResponse.data:type_name -> approval.CreateRequest + 13, // 3: approval.InformationResponse.MySubmitInfo:type_name -> approval.Information + 13, // 4: approval.InformationResponse.SubmitMeInfo:type_name -> approval.Information + 13, // 5: approval.InformationResponse.DomainInfo:type_name -> approval.Information + 17, // 6: approval.Work.ApprovalWorks:type_name -> approval.ApprovalWork + 19, // 7: approval.Exhibition.ApprovalExhibitions:type_name -> approval.ApprovalExhibition + 0, // 8: approval.CreateRequest.Status:type_name -> approval.StatusType + 29, // 9: approval.CreateRequest.CopyUsers:type_name -> approval.CopyUser + 18, // 10: approval.CreateRequest.Work:type_name -> approval.Work + 16, // 11: approval.CreateRequest.Show:type_name -> approval.Show + 20, // 12: approval.CreateRequest.Exhibition:type_name -> approval.Exhibition + 15, // 13: approval.CreateRequest.Bundle:type_name -> approval.Bundle + 30, // 14: approval.CreateRequest.ApprovalUsers:type_name -> approval.ApprovalUser + 22, // 15: approval.CreateRequest.WorkFlows:type_name -> approval.WorkFlow + 29, // 16: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser + 30, // 17: approval.SettingRequest.ApprovalUsers:type_name -> approval.ApprovalUser + 21, // 18: approval.Approval.Create:input_type -> approval.CreateRequest + 23, // 19: approval.Approval.Detail:input_type -> approval.DetailRequest + 21, // 20: approval.Approval.Update:input_type -> approval.CreateRequest + 23, // 21: approval.Approval.Remove:input_type -> approval.DetailRequest + 9, // 22: approval.Approval.List:input_type -> approval.ListRequest + 1, // 23: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest + 12, // 24: approval.Approval.Information:input_type -> approval.InformationRequest + 11, // 25: approval.Approval.Viewed:input_type -> approval.ViewedRequest + 7, // 26: approval.Approval.SetStatus:input_type -> approval.StatusRequest + 32, // 27: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest + 31, // 28: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest + 4, // 29: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest + 5, // 30: approval.Approval.DetailType:input_type -> approval.TypeResponse + 4, // 31: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest + 3, // 32: approval.Approval.AllType:input_type -> approval.CommonRequest + 5, // 33: approval.Approval.RemoveType:input_type -> approval.TypeResponse + 24, // 34: approval.Approval.Create:output_type -> approval.ApprovalResponse + 21, // 35: approval.Approval.Detail:output_type -> approval.CreateRequest + 24, // 36: approval.Approval.Update:output_type -> approval.ApprovalResponse + 25, // 37: approval.Approval.Remove:output_type -> approval.RemoveResponse + 10, // 38: approval.Approval.List:output_type -> approval.ListResponse + 2, // 39: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse + 14, // 40: approval.Approval.Information:output_type -> approval.InformationResponse + 24, // 41: approval.Approval.Viewed:output_type -> approval.ApprovalResponse + 8, // 42: approval.Approval.SetStatus:output_type -> approval.StatusResponse + 31, // 43: approval.Approval.DetailSetting:output_type -> approval.SettingRequest + 33, // 44: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse + 5, // 45: approval.Approval.CreateType:output_type -> approval.TypeResponse + 4, // 46: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest + 5, // 47: approval.Approval.UpdateType:output_type -> approval.TypeResponse + 6, // 48: approval.Approval.AllType:output_type -> approval.AllTypeResponse + 5, // 49: approval.Approval.RemoveType:output_type -> approval.TypeResponse + 34, // [34:50] is the sub-list for method output_type + 18, // [18:34] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_api_approval_approval_proto_init() } @@ -2272,7 +2923,7 @@ func file_api_approval_approval_proto_init() { } if !protoimpl.UnsafeEnabled { file_api_approval_approval_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusRequest); i { + switch v := v.(*NowLevelByInfoRequest); i { case 0: return &v.state case 1: @@ -2284,7 +2935,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse); i { + switch v := v.(*WorkFlowResponse); i { case 0: return &v.state case 1: @@ -2296,7 +2947,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRequest); i { + switch v := v.(*CommonRequest); i { case 0: return &v.state case 1: @@ -2308,7 +2959,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListResponse); i { + switch v := v.(*CreateTypeRequest); i { case 0: return &v.state case 1: @@ -2320,7 +2971,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ViewedRequest); i { + switch v := v.(*TypeResponse); i { case 0: return &v.state case 1: @@ -2332,7 +2983,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InformationRequest); i { + switch v := v.(*AllTypeResponse); i { case 0: return &v.state case 1: @@ -2344,7 +2995,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Information); i { + switch v := v.(*StatusRequest); i { case 0: return &v.state case 1: @@ -2356,7 +3007,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InformationResponse); i { + switch v := v.(*StatusResponse); i { case 0: return &v.state case 1: @@ -2368,7 +3019,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bundle); i { + switch v := v.(*ListRequest); i { case 0: return &v.state case 1: @@ -2380,7 +3031,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Show); i { + switch v := v.(*ListResponse); i { case 0: return &v.state case 1: @@ -2392,7 +3043,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalWork); i { + switch v := v.(*ViewedRequest); i { case 0: return &v.state case 1: @@ -2404,7 +3055,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Work); i { + switch v := v.(*InformationRequest); i { case 0: return &v.state case 1: @@ -2416,7 +3067,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalExhibition); i { + switch v := v.(*Information); i { case 0: return &v.state case 1: @@ -2428,7 +3079,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Exhibition); i { + switch v := v.(*InformationResponse); i { case 0: return &v.state case 1: @@ -2440,7 +3091,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRequest); i { + switch v := v.(*Bundle); i { case 0: return &v.state case 1: @@ -2452,7 +3103,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetailRequest); i { + switch v := v.(*Show); i { case 0: return &v.state case 1: @@ -2464,7 +3115,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalResponse); i { + switch v := v.(*ApprovalWork); i { case 0: return &v.state case 1: @@ -2476,7 +3127,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveResponse); i { + switch v := v.(*Work); i { case 0: return &v.state case 1: @@ -2488,7 +3139,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalExhibitionRemove); i { + switch v := v.(*ApprovalExhibition); i { case 0: return &v.state case 1: @@ -2500,7 +3151,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalExhibitionRequest); i { + switch v := v.(*Exhibition); i { case 0: return &v.state case 1: @@ -2512,7 +3163,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalExhibitionDetail); i { + switch v := v.(*CreateRequest); i { case 0: return &v.state case 1: @@ -2524,7 +3175,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CopyUser); i { + switch v := v.(*WorkFlow); i { case 0: return &v.state case 1: @@ -2536,7 +3187,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SettingRequest); i { + switch v := v.(*DetailRequest); i { case 0: return &v.state case 1: @@ -2548,7 +3199,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetailSettingRequest); i { + switch v := v.(*ApprovalResponse); i { case 0: return &v.state case 1: @@ -2560,6 +3211,102 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApprovalExhibitionRemove); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApprovalExhibitionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApprovalExhibitionDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CopyUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApprovalUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SettingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DetailSettingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SettingResponse); i { case 0: return &v.state @@ -2578,7 +3325,7 @@ func file_api_approval_approval_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_approval_approval_proto_rawDesc, NumEnums: 1, - NumMessages: 25, + NumMessages: 33, NumExtensions: 0, NumServices: 1, }, diff --git a/api/approval/approval.proto b/api/approval/approval.proto index d595a36..a194704 100644 --- a/api/approval/approval.proto +++ b/api/approval/approval.proto @@ -12,25 +12,68 @@ service Approval { rpc Update(CreateRequest) returns (ApprovalResponse) {}; rpc Remove(DetailRequest) returns (RemoveResponse) {}; rpc List(ListRequest) returns (ListResponse) {}; + rpc NowLevelByInfo(NowLevelByInfoRequest) returns (WorkFlowResponse) {}; rpc Information(InformationRequest) returns (InformationResponse) {}; rpc Viewed(ViewedRequest) returns (ApprovalResponse) {}; rpc SetStatus(StatusRequest) returns (StatusResponse) {}; - rpc DetailSetting(DetailSettingRequest) returns (SettingRequest) {}; rpc UpdateSetting(SettingRequest) returns (SettingResponse) {}; + rpc CreateType(CreateTypeRequest) returns (TypeResponse) {}; + rpc DetailType(TypeResponse) returns (CreateTypeRequest) {}; + rpc UpdateType(CreateTypeRequest) returns (TypeResponse) {}; + rpc AllType(CommonRequest) returns (AllTypeResponse) {}; + rpc RemoveType(TypeResponse) returns (TypeResponse) {}; + +} + +message NowLevelByInfoRequest { + string Domain = 1 [json_name = "domain"]; + uint64 ApprovalID = 2 [json_name = "ApprovalID"]; +} + +message WorkFlowResponse { + uint64 ID = 2 [json_name = "ID"]; + string Reply = 3 [json_name = "Reply"]; + uint64 Status = 5 [json_name = "status"]; + uint64 UserID = 7 [json_name = "userID"]; +} + +message CommonRequest { + string Domain = 1 [json_name = "domain"]; +} + +message CreateTypeRequest { + string Domain = 1 [json_name = "domain"]; + uint64 ID = 2 [json_name = "ID"]; + string Title = 3 [json_name = "title"]; + string KeyWord = 4 [json_name = "keyWord"]; +} + +message TypeResponse { + uint64 ID = 1; + string Domain = 2; } + +message AllTypeResponse { + repeated CreateTypeRequest Data = 1; + uint64 Count = 2; +} + enum StatusType { Doing = 0; Ok = 1; Fail = 2; } + message StatusRequest { - string Domain = 1 [json_name = "domain"]; - uint64 ID = 2 [json_name = "ID"]; - string Replay = 3 [json_name = "replay"]; - StatusType Status = 4 [json_name = "status",(validator.field) = {is_in_enum: true,human_error: "状态非法"}]; + string Domain = 1 [json_name = "domain"]; + uint64 ID = 2 [json_name = "ID"]; + string Reply = 3 [json_name = "Reply"]; + uint64 WorkFlowId = 4 [json_name = "workFlowId"]; + StatusType Status = 5 [json_name = "status",(validator.field) = {is_in_enum: true,human_error: "状态非法"}]; + uint64 Level = 6 [json_name = "level"]; } message StatusResponse { @@ -127,22 +170,35 @@ message Exhibition { } message CreateRequest { - uint64 ID = 1 [json_name = "ID"]; - string Domain = 2 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "环境变量必须要有"} ]; - StatusType Status = 3 [json_name = "status",(validator.field) = {is_in_enum: true,human_error: "状态非法"}]; - string Type = 4 [json_name = "type",(validator.field) = {string_not_empty: true,human_error: "类型必须要有"} ]; - uint64 ApproverID = 5 [json_name = "approverID",(validator.field) = {string_not_empty: true,human_error: "提交人人ID"} ]; - string ApproverName = 6 [json_name = "approverName",(validator.field) = {string_not_empty: true,human_error: "提交人名称"} ]; - uint64 SubmitterID = 7 [json_name = "submitterID"];//审批人 - string SubmitterName = 8 [json_name = "submitterName"]; - repeated CopyUser CopyUsers = 9 [json_name = "copyName"];//抄送人 - string Content = 10 [json_name = "content"];//申请内容 - string Reply = 11 [json_name = "reply"];//回复 - bool IsViewed = 12 [json_name = "IsViewed"];//抄送人是否查看过 - Work Work = 13 [json_name = "work"]; - Show Show = 14 [json_name = "show"]; - Exhibition Exhibition = 15 [json_name = "exhibition"]; - Bundle Bundle = 16 [json_name = "bundle"]; + uint64 ID = 1 [json_name = "ID"]; + string Domain = 2 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "环境变量必须要有"} ]; + StatusType Status = 3 [json_name = "status",(validator.field) = {is_in_enum: true,human_error: "状态非法"}]; + string Type = 4 [json_name = "type",(validator.field) = {string_not_empty: true,human_error: "类型必须要有"} ]; + uint64 ApproverID = 5 [json_name = "approverID",(validator.field) = {string_not_empty: true,human_error: "提交人人ID"} ]; + string ApproverName = 6 [json_name = "approverName",(validator.field) = {string_not_empty: true,human_error: "提交人名称"} ]; + uint64 SubmitterID = 7 [json_name = "submitterID"];//审批人 + string SubmitterName = 8 [json_name = "submitterName"]; + repeated CopyUser CopyUsers = 9 [json_name = "copyName"];//抄送人 + string Content = 10 [json_name = "content"];//申请内容 + string Reply = 11 [json_name = "reply"];//回复 + bool IsViewed = 12 [json_name = "IsViewed"];//抄送人是否查看过 + Work Work = 13 [json_name = "work"]; + Show Show = 14 [json_name = "show"]; + Exhibition Exhibition = 15 [json_name = "exhibition"]; + Bundle Bundle = 16 [json_name = "bundle"]; + repeated ApprovalUser ApprovalUsers= 17 [json_name = "approvalUsers"];//审批的人 + bool CanApproval = 18 [json_name = "canApproval"];//审批的人 + repeated WorkFlow WorkFlows = 19 [json_name = "workFlows"];//审批的人 +} + +message WorkFlow { + uint64 ID = 1 [json_name = "ID"]; + uint64 UserID = 3 [json_name = "userID"]; + string Name = 4 [json_name = "name"]; + uint64 Level = 5 [json_name = "level"]; + uint64 Status = 6 [json_name = "status"]; + string Reply = 7 [json_name = "reply"]; + string OperatedAt = 8 [json_name = "operatedAt"]; } message DetailRequest { @@ -187,20 +243,25 @@ message CopyUser { bool IsViewed =3 [json_name = "isViewed"]; } +message ApprovalUser { + uint64 ID =1 [json_name = "ID"]; + string Name =2 [json_name = "name"]; + string Level =3 [json_name = "Level"]; +} + message SettingRequest { - uint64 ID=1 [json_name = "ID"]; - uint64 DeletedAt=2 [json_name = "deletedAt"]; - string CreatedAt=3 [json_name = "createdAt"]; - string UpdatedAt=4 [json_name = "updatedAt"]; - uint64 DepartmentID=5 [json_name = "departmentID"]; - repeated CopyUser CopyUsers=6 [json_name = "copyUsers"]; - uint64 ApproverID=7 [json_name = "approverID"]; - string ApproverName=8 [json_name = "approverName"]; - string Domain=9 [json_name = "domain"]; + uint64 ID = 1 [json_name = "ID"]; + uint64 DeletedAt = 2 [json_name = "deletedAt"]; + string CreatedAt = 3 [json_name = "createdAt"]; + string UpdatedAt = 4 [json_name = "updatedAt"]; + string KeyWord = 5 [json_name = "keyWord"]; + repeated CopyUser CopyUsers = 6 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 9 [json_name = "approvalUsers"]; + string Domain = 10 [json_name = "domain"]; } message DetailSettingRequest { - uint64 DepartmentID=1 [json_name = "departmentID"]; + string KeyWord=1 [json_name = "keyWord"]; string Domain=2 [json_name = "domain"]; } diff --git a/api/approval/approval.validator.pb.go b/api/approval/approval.validator.pb.go index 43bca68..d8bc946 100644 --- a/api/approval/approval.validator.pb.go +++ b/api/approval/approval.validator.pb.go @@ -16,6 +16,31 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +func (this *NowLevelByInfoRequest) Validate() error { + return nil +} +func (this *WorkFlowResponse) Validate() error { + return nil +} +func (this *CommonRequest) Validate() error { + return nil +} +func (this *CreateTypeRequest) Validate() error { + return nil +} +func (this *TypeResponse) Validate() error { + return nil +} +func (this *AllTypeResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} func (this *StatusRequest) Validate() error { if _, ok := StatusType_name[int32(this.Status)]; !ok { return github_com_mwitkow_go_proto_validators.FieldError("Status", fmt.Errorf(`状态非法`)) @@ -140,6 +165,23 @@ func (this *CreateRequest) Validate() error { return github_com_mwitkow_go_proto_validators.FieldError("Bundle", err) } } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + for _, item := range this.WorkFlows { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("WorkFlows", err) + } + } + } + return nil +} +func (this *WorkFlow) Validate() error { return nil } func (this *DetailRequest) Validate() error { @@ -163,6 +205,9 @@ func (this *ApprovalExhibitionDetail) Validate() error { func (this *CopyUser) Validate() error { return nil } +func (this *ApprovalUser) Validate() error { + return nil +} func (this *SettingRequest) Validate() error { for _, item := range this.CopyUsers { if item != nil { @@ -171,6 +216,13 @@ func (this *SettingRequest) Validate() error { } } } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } return nil } func (this *DetailSettingRequest) Validate() error { diff --git a/api/approval/approval_triple.pb.go b/api/approval/approval_triple.pb.go index 498bbb0..041d1b6 100644 --- a/api/approval/approval_triple.pb.go +++ b/api/approval/approval_triple.pb.go @@ -33,11 +33,17 @@ type ApprovalClient interface { Update(ctx context.Context, in *CreateRequest, opts ...grpc_go.CallOption) (*ApprovalResponse, common.ErrorWithAttachment) Remove(ctx context.Context, in *DetailRequest, opts ...grpc_go.CallOption) (*RemoveResponse, common.ErrorWithAttachment) List(ctx context.Context, in *ListRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + NowLevelByInfo(ctx context.Context, in *NowLevelByInfoRequest, opts ...grpc_go.CallOption) (*WorkFlowResponse, common.ErrorWithAttachment) Information(ctx context.Context, in *InformationRequest, opts ...grpc_go.CallOption) (*InformationResponse, common.ErrorWithAttachment) Viewed(ctx context.Context, in *ViewedRequest, opts ...grpc_go.CallOption) (*ApprovalResponse, common.ErrorWithAttachment) SetStatus(ctx context.Context, in *StatusRequest, opts ...grpc_go.CallOption) (*StatusResponse, common.ErrorWithAttachment) DetailSetting(ctx context.Context, in *DetailSettingRequest, opts ...grpc_go.CallOption) (*SettingRequest, common.ErrorWithAttachment) UpdateSetting(ctx context.Context, in *SettingRequest, opts ...grpc_go.CallOption) (*SettingResponse, common.ErrorWithAttachment) + CreateType(ctx context.Context, in *CreateTypeRequest, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) + DetailType(ctx context.Context, in *TypeResponse, opts ...grpc_go.CallOption) (*CreateTypeRequest, common.ErrorWithAttachment) + UpdateType(ctx context.Context, in *CreateTypeRequest, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) + AllType(ctx context.Context, in *CommonRequest, opts ...grpc_go.CallOption) (*AllTypeResponse, common.ErrorWithAttachment) + RemoveType(ctx context.Context, in *TypeResponse, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) } type approvalClient struct { @@ -45,16 +51,22 @@ type approvalClient struct { } type ApprovalClientImpl struct { - Create func(ctx context.Context, in *CreateRequest) (*ApprovalResponse, error) - Detail func(ctx context.Context, in *DetailRequest) (*CreateRequest, error) - Update func(ctx context.Context, in *CreateRequest) (*ApprovalResponse, error) - Remove func(ctx context.Context, in *DetailRequest) (*RemoveResponse, error) - List func(ctx context.Context, in *ListRequest) (*ListResponse, error) - Information func(ctx context.Context, in *InformationRequest) (*InformationResponse, error) - Viewed func(ctx context.Context, in *ViewedRequest) (*ApprovalResponse, error) - SetStatus func(ctx context.Context, in *StatusRequest) (*StatusResponse, error) - DetailSetting func(ctx context.Context, in *DetailSettingRequest) (*SettingRequest, error) - UpdateSetting func(ctx context.Context, in *SettingRequest) (*SettingResponse, error) + Create func(ctx context.Context, in *CreateRequest) (*ApprovalResponse, error) + Detail func(ctx context.Context, in *DetailRequest) (*CreateRequest, error) + Update func(ctx context.Context, in *CreateRequest) (*ApprovalResponse, error) + Remove func(ctx context.Context, in *DetailRequest) (*RemoveResponse, error) + List func(ctx context.Context, in *ListRequest) (*ListResponse, error) + NowLevelByInfo func(ctx context.Context, in *NowLevelByInfoRequest) (*WorkFlowResponse, error) + Information func(ctx context.Context, in *InformationRequest) (*InformationResponse, error) + Viewed func(ctx context.Context, in *ViewedRequest) (*ApprovalResponse, error) + SetStatus func(ctx context.Context, in *StatusRequest) (*StatusResponse, error) + DetailSetting func(ctx context.Context, in *DetailSettingRequest) (*SettingRequest, error) + UpdateSetting func(ctx context.Context, in *SettingRequest) (*SettingResponse, error) + CreateType func(ctx context.Context, in *CreateTypeRequest) (*TypeResponse, error) + DetailType func(ctx context.Context, in *TypeResponse) (*CreateTypeRequest, error) + UpdateType func(ctx context.Context, in *CreateTypeRequest) (*TypeResponse, error) + AllType func(ctx context.Context, in *CommonRequest) (*AllTypeResponse, error) + RemoveType func(ctx context.Context, in *TypeResponse) (*TypeResponse, error) } func (c *ApprovalClientImpl) GetDubboStub(cc *triple.TripleConn) ApprovalClient { @@ -99,6 +111,12 @@ func (c *approvalClient) List(ctx context.Context, in *ListRequest, opts ...grpc return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/List", in, out) } +func (c *approvalClient) NowLevelByInfo(ctx context.Context, in *NowLevelByInfoRequest, opts ...grpc_go.CallOption) (*WorkFlowResponse, common.ErrorWithAttachment) { + out := new(WorkFlowResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/NowLevelByInfo", in, out) +} + func (c *approvalClient) Information(ctx context.Context, in *InformationRequest, opts ...grpc_go.CallOption) (*InformationResponse, common.ErrorWithAttachment) { out := new(InformationResponse) interfaceKey := ctx.Value(constant.InterfaceKey).(string) @@ -129,6 +147,36 @@ func (c *approvalClient) UpdateSetting(ctx context.Context, in *SettingRequest, return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateSetting", in, out) } +func (c *approvalClient) CreateType(ctx context.Context, in *CreateTypeRequest, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) { + out := new(TypeResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateType", in, out) +} + +func (c *approvalClient) DetailType(ctx context.Context, in *TypeResponse, opts ...grpc_go.CallOption) (*CreateTypeRequest, common.ErrorWithAttachment) { + out := new(CreateTypeRequest) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/DetailType", in, out) +} + +func (c *approvalClient) UpdateType(ctx context.Context, in *CreateTypeRequest, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) { + out := new(TypeResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateType", in, out) +} + +func (c *approvalClient) AllType(ctx context.Context, in *CommonRequest, opts ...grpc_go.CallOption) (*AllTypeResponse, common.ErrorWithAttachment) { + out := new(AllTypeResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/AllType", in, out) +} + +func (c *approvalClient) RemoveType(ctx context.Context, in *TypeResponse, opts ...grpc_go.CallOption) (*TypeResponse, common.ErrorWithAttachment) { + out := new(TypeResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/RemoveType", in, out) +} + // ApprovalServer is the server API for Approval service. // All implementations must embed UnimplementedApprovalServer // for forward compatibility @@ -138,11 +186,17 @@ type ApprovalServer interface { Update(context.Context, *CreateRequest) (*ApprovalResponse, error) Remove(context.Context, *DetailRequest) (*RemoveResponse, error) List(context.Context, *ListRequest) (*ListResponse, error) + NowLevelByInfo(context.Context, *NowLevelByInfoRequest) (*WorkFlowResponse, error) Information(context.Context, *InformationRequest) (*InformationResponse, error) Viewed(context.Context, *ViewedRequest) (*ApprovalResponse, error) SetStatus(context.Context, *StatusRequest) (*StatusResponse, error) DetailSetting(context.Context, *DetailSettingRequest) (*SettingRequest, error) UpdateSetting(context.Context, *SettingRequest) (*SettingResponse, error) + CreateType(context.Context, *CreateTypeRequest) (*TypeResponse, error) + DetailType(context.Context, *TypeResponse) (*CreateTypeRequest, error) + UpdateType(context.Context, *CreateTypeRequest) (*TypeResponse, error) + AllType(context.Context, *CommonRequest) (*AllTypeResponse, error) + RemoveType(context.Context, *TypeResponse) (*TypeResponse, error) mustEmbedUnimplementedApprovalServer() } @@ -166,6 +220,9 @@ func (UnimplementedApprovalServer) Remove(context.Context, *DetailRequest) (*Rem func (UnimplementedApprovalServer) List(context.Context, *ListRequest) (*ListResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method List not implemented") } +func (UnimplementedApprovalServer) NowLevelByInfo(context.Context, *NowLevelByInfoRequest) (*WorkFlowResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NowLevelByInfo not implemented") +} func (UnimplementedApprovalServer) Information(context.Context, *InformationRequest) (*InformationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Information not implemented") } @@ -181,6 +238,21 @@ func (UnimplementedApprovalServer) DetailSetting(context.Context, *DetailSetting func (UnimplementedApprovalServer) UpdateSetting(context.Context, *SettingRequest) (*SettingResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateSetting not implemented") } +func (UnimplementedApprovalServer) CreateType(context.Context, *CreateTypeRequest) (*TypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateType not implemented") +} +func (UnimplementedApprovalServer) DetailType(context.Context, *TypeResponse) (*CreateTypeRequest, error) { + return nil, status.Errorf(codes.Unimplemented, "method DetailType not implemented") +} +func (UnimplementedApprovalServer) UpdateType(context.Context, *CreateTypeRequest) (*TypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateType not implemented") +} +func (UnimplementedApprovalServer) AllType(context.Context, *CommonRequest) (*AllTypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllType not implemented") +} +func (UnimplementedApprovalServer) RemoveType(context.Context, *TypeResponse) (*TypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveType not implemented") +} func (s *UnimplementedApprovalServer) XXX_SetProxyImpl(impl protocol.Invoker) { s.proxyImpl = impl } @@ -354,6 +426,35 @@ func _Approval_List_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } +func _Approval_NowLevelByInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(NowLevelByInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("NowLevelByInfo", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + func _Approval_Information_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { in := new(InformationRequest) if err := dec(in); err != nil { @@ -499,6 +600,151 @@ func _Approval_UpdateSetting_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Approval_CreateType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("CreateType", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Approval_DetailType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(TypeResponse) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("DetailType", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Approval_UpdateType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UpdateType", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Approval_AllType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CommonRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("AllType", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Approval_RemoveType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(TypeResponse) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("RemoveType", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + // Approval_ServiceDesc is the grpc_go.ServiceDesc for Approval service. // It's only intended for direct use with grpc_go.RegisterService, // and not to be introspected or modified (even as a copy) @@ -526,6 +772,10 @@ var Approval_ServiceDesc = grpc_go.ServiceDesc{ MethodName: "List", Handler: _Approval_List_Handler, }, + { + MethodName: "NowLevelByInfo", + Handler: _Approval_NowLevelByInfo_Handler, + }, { MethodName: "Information", Handler: _Approval_Information_Handler, @@ -546,6 +796,26 @@ var Approval_ServiceDesc = grpc_go.ServiceDesc{ MethodName: "UpdateSetting", Handler: _Approval_UpdateSetting_Handler, }, + { + MethodName: "CreateType", + Handler: _Approval_CreateType_Handler, + }, + { + MethodName: "DetailType", + Handler: _Approval_DetailType_Handler, + }, + { + MethodName: "UpdateType", + Handler: _Approval_UpdateType_Handler, + }, + { + MethodName: "AllType", + Handler: _Approval_AllType_Handler, + }, + { + MethodName: "RemoveType", + Handler: _Approval_RemoveType_Handler, + }, }, Streams: []grpc_go.StreamDesc{}, Metadata: "api/approval/approval.proto", diff --git a/pkg/m/msg.go b/pkg/m/msg.go index 2c0774a..d458ebb 100644 --- a/pkg/m/msg.go +++ b/pkg/m/msg.go @@ -19,3 +19,7 @@ const ( ErrorWrongStatus = "当前状态无法修改" ErrorChangeType = "无法修改其类型" ) + +const ( + ErrorOperate = "操作顺序错误" +) diff --git a/pkg/model/approval.go b/pkg/model/approval.go index fb4fa8a..3c90bd7 100644 --- a/pkg/model/approval.go +++ b/pkg/model/approval.go @@ -4,7 +4,7 @@ import ( "errors" "github.com/fonchain_enterprise/fonchain-approval/api/approval" "github.com/fonchain_enterprise/fonchain-approval/pkg/common/page" - "github.com/fonchain_enterprise/fonchain-approval/pkg/m" + msg "github.com/fonchain_enterprise/fonchain-approval/pkg/m" "gorm.io/gorm" "gorm.io/plugin/soft_delete" "time" @@ -12,24 +12,28 @@ import ( // Approval 审批 type Approval struct { - ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID - DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间 - CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 - UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 - SubmitterID uint64 `gorm:"column:submitter_id" json:"submitterId"` // 提交人ID - ApproverID uint64 `gorm:"column:approver_id" json:"approverId"` // 审核人ID - Status int8 `gorm:"column:status" json:"status"` // 状态0-待 1-可 2-否 - SubmitterName string `gorm:"column:submitter_name" json:"submitterName"` // 提交人名称缓存 - ApproverName string `gorm:"column:approver_name" json:"approverName"` // 审核人名称缓存 - CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"` // 抄送人 - Type string `gorm:"column:type" json:"type"` // 类型 - Content string `gorm:"column:content" json:"content"` // 提交审批内容 - Reply string `gorm:"column:reply" json:"reply"` // 回复内容 - Domain *string `gorm:"column:domain" json:"domain"` // 环境变量 - Show *Show `gorm:"foreignKey:ApprovalID" json:"Show"` // 环境变量 - Work *Work `gorm:"foreignKey:ApprovalID" json:"Work"` // 环境变量 - Bundle *Bundle `gorm:"foreignKey:ApprovalID" json:"Bundle"` // 环境变量 - Exhibition *Exhibition `gorm:"foreignKey:ApprovalID" json:"Exhibition"` // 环境变量 + ID uint64 `gorm:"primaryKey;column:id" json:"id"` + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` + CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` + UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` + SubmitterID uint64 `gorm:"column:submitter_id" json:"submitterId"` + Status int8 `gorm:"column:status" json:"status"` + SubmitterName string `gorm:"column:submitter_name" json:"submitterName"` + CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"` + ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"` + Type string `gorm:"column:type" json:"type"` + Level uint8 `gorm:"column:level" json:"level"` + NowLevel uint8 `gorm:"column:now_level" json:"nowLevel"` + NowUserId uint64 `gorm:"column:now_user_id" json:"nowUserId"` + NowUserName string `gorm:"column:now_user_name" json:"nowUserName"` + Content string `gorm:"column:content" json:"content"` + Reply string `gorm:"column:reply" json:"reply"` + Domain *string `gorm:"column:domain" json:"domain"` + Show *Show `gorm:"foreignKey:ApprovalID" json:"Show"` + Work *Work `gorm:"foreignKey:ApprovalID" json:"Work"` + Bundle *Bundle `gorm:"foreignKey:ApprovalID" json:"Bundle"` + Exhibition *Exhibition `gorm:"foreignKey:ApprovalID" json:"Exhibition"` + ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"` } const ( @@ -62,16 +66,24 @@ func StoreApproval(in *approval.CreateRequest) (*Approval, error) { err := DB.Transaction(func(tx *gorm.DB) error { + setting, terr := GetApprovalSettingFromKeyWord(in.Domain, in.Type) + if terr != nil { + return terr + } + // 保存基本信息 entity = &Approval{ Domain: &in.Domain, SubmitterID: in.SubmitterID, SubmitterName: in.SubmitterName, - ApproverID: in.ApproverID, - ApproverName: in.ApproverName, - CopyUsers: FormatCopyUsers(in.CopyUsers), + CopyUsers: setting.CopyUsers, + ApprovalUsers: setting.ApprovalUsers, Type: in.Type, Content: in.Content, + Level: uint8(len(setting.ApprovalUsers)), + NowLevel: 1, + NowUserId: setting.ApprovalUsers[0].ID, + NowUserName: setting.ApprovalUsers[0].Name, } if err := DB.Create(&entity).Error; err != nil { @@ -81,7 +93,11 @@ func StoreApproval(in *approval.CreateRequest) (*Approval, error) { // 不同类型保存不同的结构体 err := entity.SaveContent(in) - return err + if err != nil { + return err + } + + return BatchSave(setting.ApprovalUsers, entity.ID) }) return entity, err @@ -94,7 +110,7 @@ func Viewed(in *approval.ViewedRequest) error { var err error if err = DB.First(&entity, in.ID).Error; err != nil { - return errors.New(m.ErrorNotFound) + return errors.New(msg.ErrorNotFound) } copyUsers := entity.CopyUsers @@ -116,15 +132,15 @@ func UpdateApproval(in *approval.CreateRequest) (*Approval, error) { err := DB.Transaction(func(tx *gorm.DB) error { if departErr := DB.First(&entity, in.ID).Error; departErr != nil { - return errors.New(m.ErrorNotFound) + return errors.New(msg.ErrorNotFound) } if entity.Type != in.Type { - return errors.New(m.ErrorChangeType) + return errors.New(msg.ErrorChangeType) } if entity.Status != StatusDoing { - return errors.New(m.ErrorWrongStatus) + return errors.New(msg.ErrorWrongStatus) } else if in.Status != StatusDoing { //审批 // 保存基本信息 entity = &Approval{ @@ -190,12 +206,39 @@ func approvalCalc(filter *Approval) *approval.Information { return info } +func approvalCalcJson(domain string, userId uint64) *approval.Information { + + var num int64 + var jsonStr = "JSON_CONTAINS(approve_users,JSON_OBJECT('ID', ?))" + + info := &approval.Information{ + Total: 0, + DoingTotal: 0, + SuccessTotal: 0, + FailTotal: 0, + } + + DB.Model(&Approval{}).Where(jsonStr, userId).Count(&num) + info.Total = uint64(num) + + DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusOk, Domain: &domain}).Count(&num) + info.DoingTotal = uint64(num) + + DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusOk, Domain: &domain}).Count(&num) + info.SuccessTotal = uint64(num) + + DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusFail, Domain: &domain}).Count(&num) + info.FailTotal = uint64(num) + + return info +} + // ApprovalInfo 统计 func ApprovalInfo(in *approval.InformationRequest) (*approval.InformationResponse, error) { response := &approval.InformationResponse{ MySubmitInfo: approvalCalc(&Approval{Domain: &in.Domain, SubmitterID: in.UserID}), - SubmitMeInfo: approvalCalc(&Approval{Domain: &in.Domain, ApproverID: in.UserID}), + SubmitMeInfo: approvalCalcJson(in.Domain, in.UserID), DomainInfo: approvalCalc(&Approval{Domain: &in.Domain}), } @@ -217,7 +260,7 @@ func (m *Approval) DeleteApproval(p *Approval) error { func (m *Approval) DeleteContent() error { - factory, err := GetApprovalContentFactory(m.Type) + factory, err := getApprovalContentFactory(m.Type) if err != nil { return err @@ -232,7 +275,7 @@ func (m *Approval) BuildResContent(a *Approval, request *approval.CreateRequest) func (m *Approval) SetResContent(request *approval.CreateRequest) error { - factory, err := GetApprovalContentFactory(m.Type) + factory, err := getApprovalContentFactory(m.Type) if err != nil { return err @@ -245,7 +288,7 @@ func (m *Approval) SetResContent(request *approval.CreateRequest) error { func (m *Approval) SaveContent(in *approval.CreateRequest) error { - factory, err := GetApprovalContentFactory(in.Type) + factory, err := getApprovalContentFactory(in.Type) if err != nil { return err } @@ -257,7 +300,7 @@ func (m *Approval) SaveContent(in *approval.CreateRequest) error { func (m *Approval) UpdateContent(in *approval.CreateRequest) error { - factory, err := GetApprovalContentFactory(in.Type) + factory, err := getApprovalContentFactory(in.Type) if err != nil { return err } @@ -276,6 +319,7 @@ func ApprovalList(in *approval.ListRequest) ([]*Approval, int64) { Preload("Show"). Preload("Work.ApprovalWorks"). Preload("Bundle"). + Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions") if in.Type != "" { @@ -283,7 +327,7 @@ func ApprovalList(in *approval.ListRequest) ([]*Approval, int64) { } if in.UserID != 0 { - modelObj = modelObj.Where(DB.Where(&Approval{ApproverID: in.UserID}). + modelObj = modelObj.Where(DB.Where("JSON_CONTAINS(approve_users,JSON_OBJECT('ID', ?))", in.UserID). Or("JSON_CONTAINS(copy_users,JSON_OBJECT('ID', ?))", in.UserID)) } @@ -298,7 +342,59 @@ func ApprovalList(in *approval.ListRequest) ([]*Approval, int64) { return list, count } -func GetApprovalContentFactory(typeFiled string) (ApprovalContentInterface, error) { +func (m *Approval) Pass(reply string, workFlowId uint64) error { + return m.operateStatus(StatusOk, reply, workFlowId) +} + +func (m *Approval) Refuse(reply string, workFlowId uint64) error { + return m.operateStatus(StatusFail, reply, workFlowId) +} + +func (m *Approval) operateStatus(status uint8, reply string, workFlowId uint64) error { + + var workFlow ApprovalWorkFlow + + if err := DB.Model(&ApprovalWorkFlow{ApprovalID: m.ID, Status: StatusDoing}).First(&workFlow, workFlowId).Error; err != nil { + return err + } + + if m.NowLevel != workFlow.Level { + return errors.New(msg.ErrorOperate) + } + + if status == StatusFail { //拒绝 + m.Status = StatusFail + m.Reply = reply + + if err := DB.Save(m).Error; err != nil { + return err + } + + return workFlow.Refuse(reply) + } + + //层级审批通过 + if m.Level == m.NowLevel { // 整个审批通过 + m.Status = StatusOk + } else { //审批层级通过 + m.NowLevel = workFlow.Level + 1 + nextFlow, err := GetWorkFlowByLevel(m.ID, m.NowLevel) + if err != nil { + return err + } + m.NowUserId = nextFlow.UserId + m.NowUserName = nextFlow.Name + } + + m.Reply = reply + if err := DB.Save(m).Error; err != nil { + return err + } + + return workFlow.Pass(reply) +} + +func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, error) { switch typeFiled { case TypeContent: return &Approval{}, nil @@ -311,39 +407,6 @@ func GetApprovalContentFactory(typeFiled string) (ApprovalContentInterface, erro case TypeExhibition: return &Exhibition{}, nil default: - return nil, errors.New(m.ErrorApprovalType) + return &Approval{}, nil } } - -// ApprovalColumns get sql column name.获取数据库列名 -var ApprovalColumns = struct { - ID string - DeletedAt string - CreatedAt string - UpdatedAt string - SubmitterID string - ApproverID string - Status string - SubmitterName string - ApproverName string - CopyName string - Type string - Content string - Reply string - Domain string -}{ - ID: "id", - DeletedAt: "deleted_at", - CreatedAt: "created_at", - UpdatedAt: "updated_at", - SubmitterID: "submitter_id", - ApproverID: "approver_id", - Status: "status", - SubmitterName: "submitter_name", - ApproverName: "approver_name", - CopyName: "copy_name", - Type: "type", - Content: "content", - Reply: "reply", - Domain: "domain", -} diff --git a/pkg/model/approval_setting.go b/pkg/model/approval_setting.go new file mode 100644 index 0000000..8640e15 --- /dev/null +++ b/pkg/model/approval_setting.go @@ -0,0 +1,118 @@ +package model + +import ( + "database/sql/driver" + "encoding/json" + "github.com/fonchain_enterprise/fonchain-approval/api/approval" + "gorm.io/plugin/soft_delete" + "time" +) + +type CopyUser struct { + ID uint64 + Name string + IsViewed bool +} + +type CopyUsers []CopyUser + +type ApprovalUser struct { + ID uint64 + Name string +} + +type ApprovalUsers []ApprovalUser + +// ApprovalSetting 部门抄送人设置 +type ApprovalSetting struct { + ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除标记 + CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 + UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 + KeyWord string `gorm:"column:key_word" json:"keyWord"` + ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"` + CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"` + Domain string `gorm:"column:domain" json:"domain"` +} + +// TableName get sql table name.获取数据库表名 +func (m *ApprovalSetting) TableName() string { + return "approval_setting" +} + +type JSON json.RawMessage + +func (j *CopyUsers) Scan(src interface{}) error { + return json.Unmarshal(src.([]byte), j) +} + +func (j CopyUsers) Value() (driver.Value, error) { + + v, err := json.Marshal(j) + + return string(v), err +} + +func (j *ApprovalUsers) Scan(src interface{}) error { + return json.Unmarshal(src.([]byte), j) +} + +func (j ApprovalUsers) Value() (driver.Value, error) { + + v, err := json.Marshal(j) + + return string(v), err +} + +func GetApprovalSettingFromKeyWord(Domain, keyWord string) (setting *ApprovalSetting, err error) { + + err = DB.Model(&ApprovalSetting{}).Where(&ApprovalSetting{KeyWord: keyWord, Domain: Domain}).First(&setting).Error + + return setting, nil +} + +func FormatCopyUsers(copyUsers []*approval.CopyUser) CopyUsers { + var res CopyUsers + + // copyer + for _, copyUser := range copyUsers { + temp := CopyUser{ + ID: copyUser.ID, + Name: copyUser.Name, + } + res = append(res, temp) + } + + return res +} + +func FormatApproveUsers(copyUsers []*approval.ApprovalUser) ApprovalUsers { + var res ApprovalUsers + + // copyer + for _, copyUser := range copyUsers { + temp := ApprovalUser{ + ID: copyUser.ID, + Name: copyUser.Name, + } + res = append(res, temp) + } + + return res +} + +func FormatToResponse(copyUsers CopyUsers) []*approval.CopyUser { + var res []*approval.CopyUser + + for _, copyUser := range copyUsers { + temp := &approval.CopyUser{ + ID: copyUser.ID, + Name: copyUser.Name, + IsViewed: copyUser.IsViewed, + } + + res = append(res, temp) + } + + return res +} diff --git a/pkg/model/approval_type.go b/pkg/model/approval_type.go new file mode 100644 index 0000000..2bd11d1 --- /dev/null +++ b/pkg/model/approval_type.go @@ -0,0 +1,22 @@ +package model + +import ( + "gorm.io/plugin/soft_delete" + "time" +) + +// ApprovalType 审批类型 +type ApprovalType struct { + ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间 + CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 + UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 + KeyWord string `gorm:"column:key_word" json:"keyWord"` // 回复内容 + Domain string `gorm:"column:domain" json:"domain"` // 回复内容 + Title string `gorm:"column:title" json:"title"` // 回复内容 +} + +// TableName get sql table name.获取数据库表名 +func (m *ApprovalType) TableName() string { + return "approval_type" +} diff --git a/pkg/model/approval_workflow.go b/pkg/model/approval_workflow.go new file mode 100644 index 0000000..cb6b6e9 --- /dev/null +++ b/pkg/model/approval_workflow.go @@ -0,0 +1,86 @@ +package model + +import ( + "errors" + "github.com/fonchain_enterprise/fonchain-approval/pkg/m" + "gorm.io/plugin/soft_delete" + "time" +) + +// ApprovalWorkFlow 审批流 +type ApprovalWorkFlow struct { + ID uint64 `gorm:"primaryKey;column:id" json:"id"` + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` + CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` + UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` + ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` + UserId uint64 `gorm:"column:user_id" json:"userId"` + Name string `gorm:"column:name" json:"name"` + Level uint8 `gorm:"column:level" json:"Level"` + Status uint8 `gorm:"column:status" json:"Status"` + Reply string `gorm:"column:reply" json:"Reply"` + OperatedAt time.Time `gorm:"column:operated_at" json:"operatedAt"` +} + +func GetNowWorkFlowByApprovalId(approvalId uint64) (*ApprovalWorkFlow, error) { + var workFlow *ApprovalWorkFlow + + if err := DB.Model(&ApprovalWorkFlow{ApprovalID: approvalId, Status: StatusDoing}).Order("level asc").First(&workFlow).Error; err != nil { + return nil, err + } + + return workFlow, nil + +} + +func GetWorkFlowByLevel(approvalId uint64, level uint8) (*ApprovalWorkFlow, error) { + var workFlow *ApprovalWorkFlow + + if err := DB.Model(&ApprovalWorkFlow{ApprovalID: approvalId, Level: level}).First(&workFlow).Error; err != nil { + return nil, err + } + + return workFlow, nil + +} + +func BatchSave(users ApprovalUsers, approvalId uint64) error { + var insertRaws []*ApprovalWorkFlow + + if users == nil && len(users) == 0 { + return errors.New(m.ErrorNotFound) + } + + for index, user := range users { + temp := &ApprovalWorkFlow{ + UserId: user.ID, + Name: user.Name, + ApprovalID: approvalId, + Level: uint8(index + 1), + } + + insertRaws = append(insertRaws, temp) + + } + + return DB.Create(&insertRaws).Error +} + +func (m *ApprovalWorkFlow) TableName() string { + return "approval_workflow" +} + +func (m *ApprovalWorkFlow) Pass(replay string) error { + return m.SetStatus(StatusOk, replay) +} + +func (m *ApprovalWorkFlow) Refuse(replay string) error { + return m.SetStatus(StatusFail, replay) +} + +func (m *ApprovalWorkFlow) SetStatus(status uint8, reply string) error { + m.Status = status + m.Reply = reply + DB.Save(m) + return DB.Save(m).Error +} diff --git a/pkg/model/department_approval_setting.go b/pkg/model/department_approval_setting.go deleted file mode 100644 index 5c35a94..0000000 --- a/pkg/model/department_approval_setting.go +++ /dev/null @@ -1,102 +0,0 @@ -package model - -import ( - "database/sql/driver" - "encoding/json" - "github.com/fonchain_enterprise/fonchain-approval/api/approval" - "gorm.io/plugin/soft_delete" - "time" -) - -type CopyUser struct { - ID uint64 - Name string - IsViewed bool -} - -type CopyUsers []CopyUser - -// DepartmentApprovalSetting 部门抄送人设置 -type DepartmentApprovalSetting struct { - ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID - DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除标记 - CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 - UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 - DepartmentID uint64 `gorm:"column:department_id" json:"departmentId"` // 绑定的部门ID - CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"` // 抄送人 - ApproverID uint64 `gorm:"column:approver_id" json:"approverId"` // 审批人ID - ApproverName string `gorm:"column:approver_name" json:"approverName"` // 审批人名称 - Domain string `gorm:"column:domain" json:"domain"` // 环境env -} - -// TableName get sql table name.获取数据库表名 -func (m *DepartmentApprovalSetting) TableName() string { - return "department_approval_setting" -} - -type JSON json.RawMessage - -func (j *CopyUsers) Scan(src interface{}) error { - return json.Unmarshal(src.([]byte), j) -} - -func (j CopyUsers) Value() (driver.Value, error) { - - v, err := json.Marshal(j) - - return string(v), err -} - -func FormatCopyUsers(copyUsers []*approval.CopyUser) CopyUsers { - var res CopyUsers - - // copyer - for _, copyUser := range copyUsers { - temp := CopyUser{ - ID: copyUser.ID, - Name: copyUser.Name, - } - res = append(res, temp) - } - - return res -} - -func FormatToResponse(copyUsers CopyUsers) []*approval.CopyUser { - var res []*approval.CopyUser - - for _, copyUser := range copyUsers { - temp := &approval.CopyUser{ - ID: copyUser.ID, - Name: copyUser.Name, - IsViewed: copyUser.IsViewed, - } - - res = append(res, temp) - } - - return res -} - -// DepartmentApprovalSettingColumns get sql column name.获取数据库列名 -var DepartmentApprovalSettingColumns = struct { - ID string - DeletedAt string - CreatedAt string - UpdatedAt string - DepartmentID string - CopyUsers string - ApproverID string - ApproverName string - Domain string -}{ - ID: "id", - DeletedAt: "deleted_at", - CreatedAt: "created_at", - UpdatedAt: "updated_at", - DepartmentID: "department_id", - CopyUsers: "copy_users", - ApproverID: "approver_id", - ApproverName: "approver_name", - Domain: "domain", -} diff --git a/pkg/model/show.go b/pkg/model/show.go index 1af5654..985aff7 100644 --- a/pkg/model/show.go +++ b/pkg/model/show.go @@ -35,7 +35,7 @@ func (m *Show) UpdateApprovalContent(in *approval.CreateRequest, a *Approval) er var entity *Show - if err := DB.Where(&Show{ApprovalID: a.ApproverID}).First(&entity).Error; err != nil { + if err := DB.Where(&Show{ApprovalID: a.ID}).First(&entity).Error; err != nil { return errors.New(m2.ErrorNotFound) } diff --git a/pkg/model/work.go b/pkg/model/work.go index f901b17..4921b48 100644 --- a/pkg/model/work.go +++ b/pkg/model/work.go @@ -207,20 +207,3 @@ func (m *Work) DeleteApproval(p *Approval) error { return DB.Where(&Work{ApprovalID: p.ID}).Delete(&Work{}).Error } - -// WorkColumns get sql column name.获取数据库列名 -var WorkColumns = struct { - ID string - DeletedAt string - CreatedAt string - UpdatedAt string - ReturnAt string - ReceivedAt string -}{ - ID: "id", - DeletedAt: "deleted_at", - CreatedAt: "created_at", - UpdatedAt: "updated_at", - ReturnAt: "return_at", - ReceivedAt: "received_at", -} diff --git a/pkg/serializer/approval.go b/pkg/serializer/approval.go index 5c64960..0545d63 100644 --- a/pkg/serializer/approval.go +++ b/pkg/serializer/approval.go @@ -11,7 +11,9 @@ func BuildApproval(entity *model.Approval, userId uint64) *approval.CreateReques var show *approval.Show var exhibition *approval.Exhibition var bundle *approval.Bundle + var workFlows []*approval.WorkFlow isViewed := false + canApproval := false copyUsers := model.FormatToResponse(entity.CopyUsers) @@ -21,18 +23,36 @@ func BuildApproval(entity *model.Approval, userId uint64) *approval.CreateReques } } + for _, tt := range entity.ApprovalWorkFlows { + temp := &approval.WorkFlow{ + ID: tt.ID, + UserID: tt.UserId, + Name: tt.Name, + Level: uint64(tt.Level), + Status: uint64(tt.Status), + Reply: tt.Reply, + OperatedAt: entity.CreatedAt.Format("2006-01-02 15:04:05"), + } + workFlows = append(workFlows, temp) + + } + + if entity.Status == model.StatusDoing && entity.NowUserId == userId { + canApproval = true + } + response := &approval.CreateRequest{ ID: entity.ID, Domain: *entity.Domain, Status: approval.StatusType(uint64(entity.Status)), Type: entity.Type, - ApproverID: entity.ApproverID, - ApproverName: entity.ApproverName, CopyUsers: copyUsers, SubmitterID: entity.SubmitterID, SubmitterName: entity.SubmitterName, Content: entity.Content, IsViewed: isViewed, + CanApproval: canApproval, + WorkFlows: workFlows, Reply: entity.Reply, Work: work, Show: show, diff --git a/pkg/serializer/approval_type.go b/pkg/serializer/approval_type.go new file mode 100644 index 0000000..cd3672d --- /dev/null +++ b/pkg/serializer/approval_type.go @@ -0,0 +1,28 @@ +package serializer + +import ( + "github.com/fonchain_enterprise/fonchain-approval/api/approval" + "github.com/fonchain_enterprise/fonchain-approval/pkg/model" +) + +//BuildType 处理单个detail返回 +func BuildType(entity *model.ApprovalType) *approval.CreateTypeRequest { + + response := &approval.CreateTypeRequest{ + ID: entity.ID, + Domain: entity.Domain, + KeyWord: entity.KeyWord, + Title: entity.Title, + } + + return response +} + +func BuildTypes(entity []*model.ApprovalType) (details []*approval.CreateTypeRequest) { + + for _, temp := range entity { + details = append(details, BuildType(temp)) + } + + return details +} diff --git a/pkg/serializer/department_approval_setting.go b/pkg/serializer/department_approval_setting.go index c21ce06..841eb4b 100644 --- a/pkg/serializer/department_approval_setting.go +++ b/pkg/serializer/department_approval_setting.go @@ -6,8 +6,9 @@ import ( ) //BuildSetting 处理单个detail返回 -func BuildSetting(entity *model.DepartmentApprovalSetting) *approval.SettingRequest { +func BuildSetting(entity *model.ApprovalSetting) *approval.SettingRequest { var copyUsers []*approval.CopyUser + var approvalUser []*approval.ApprovalUser for _, copyUser := range entity.CopyUsers { temp := &approval.CopyUser{ @@ -18,13 +19,21 @@ func BuildSetting(entity *model.DepartmentApprovalSetting) *approval.SettingRequ copyUsers = append(copyUsers, temp) } + for _, approvaUser := range entity.ApprovalUsers { + temp := &approval.ApprovalUser{ + ID: approvaUser.ID, + Name: approvaUser.Name, + } + + approvalUser = append(approvalUser, temp) + } + response := &approval.SettingRequest{ - ID: entity.ID, - Domain: entity.Domain, - DepartmentID: entity.DepartmentID, - CopyUsers: copyUsers, - ApproverID: entity.ApproverID, - ApproverName: entity.ApproverName, + ID: entity.ID, + Domain: entity.Domain, + KeyWord: entity.KeyWord, + CopyUsers: copyUsers, + ApprovalUsers: approvalUser, } return response diff --git a/pkg/service/approval.go b/pkg/service/approval.go index 2a23eb6..eb5c753 100644 --- a/pkg/service/approval.go +++ b/pkg/service/approval.go @@ -38,10 +38,36 @@ func (a *ApprovalProvider) Update(ctx context.Context, in *approval.CreateReques return response, err } +func (a *ApprovalProvider) NowLevelByInfo(ctx context.Context, in *approval.NowLevelByInfoRequest) (*approval.WorkFlowResponse, error) { + + response := &approval.WorkFlowResponse{} + var approvalObj *model.Approval + + if err := model.DB.First(&approvalObj, in.ApprovalID).Error; err != nil { + return response, err + } + + workFlow, err1 := model.GetNowWorkFlowByApprovalId(approvalObj.ID) + + if err1 != nil { + return response, err1 + } + response.ID = workFlow.ID + response.Status = uint64(workFlow.Status) + + return response, nil +} + func (a *ApprovalProvider) SetStatus(ctx context.Context, in *approval.StatusRequest) (*approval.StatusResponse, error) { response := &approval.StatusResponse{} + var approvalObj *model.Approval + var err error + + if in.Status == model.StatusDoing { + return response, errors.New("status code wrong") + } if err := model.DB.First(&approvalObj, in.ID).Error; err != nil { return response, err @@ -51,8 +77,12 @@ func (a *ApprovalProvider) SetStatus(ctx context.Context, in *approval.StatusReq return response, errors.New(m.ErrorWrongStatus) } - err := model.DB.Where(&model.Approval{ID: in.ID, Domain: &in.Domain}). - Updates(&model.Approval{Status: int8(in.Status), Reply: in.Replay}).Error + // 审批人审批内容 + if in.Status == model.StatusFail { + err = approvalObj.Refuse(in.Reply, in.WorkFlowId) + } else { + err = approvalObj.Pass(in.Reply, in.WorkFlowId) + } return response, err } @@ -105,6 +135,7 @@ func (a *ApprovalProvider) Detail(ctx context.Context, in *approval.DetailReques Preload("Work.ApprovalWorks"). Preload("Bundle"). Preload("Exhibition.ApprovalExhibitions"). + Preload("ApprovalWorkFlows"). First(&entity, in.ID).Error; err != nil { return response, err } @@ -156,31 +187,35 @@ func (a *ApprovalProvider) UpdateSetting(ctx context.Context, in *approval.Setti var err error response := &approval.SettingResponse{} - var setting model.DepartmentApprovalSetting + var setting model.ApprovalSetting copyUsers := model.FormatCopyUsers(in.CopyUsers) + approvalUsers := model.FormatApproveUsers(in.ApprovalUsers) + if approvalUsers == nil && len(approvalUsers) == 0 { + return response, errors.New("必须要有抄送人") + } //首次 - if err := model.DB.Model(&model.DepartmentApprovalSetting{}). - Where(&model.DepartmentApprovalSetting{Domain: in.Domain, DepartmentID: in.DepartmentID}). + if err := model.DB.Model(&model.ApprovalSetting{}). + Where(&model.ApprovalSetting{Domain: in.Domain, KeyWord: in.KeyWord}). First(&setting).Error; err != nil { - setting = model.DepartmentApprovalSetting{ - DepartmentID: in.DepartmentID, - CopyUsers: copyUsers, - ApproverID: in.ApproverID, - ApproverName: in.ApproverName, - Domain: in.Domain, + setting = model.ApprovalSetting{ + KeyWord: in.KeyWord, + CopyUsers: copyUsers, + ApprovalUsers: approvalUsers, + Domain: in.Domain, } err = model.DB.Save(&setting).Error } else { - setting.DepartmentID = in.DepartmentID + setting.KeyWord = in.KeyWord setting.CopyUsers = copyUsers - setting.ApproverID = in.ApproverID - setting.ApproverName = in.ApproverName + setting.ApprovalUsers = approvalUsers + //setting.ApproverID = in.ApproverID + //setting.ApproverName = in.ApproverName - err = model.DB.Where(&model.DepartmentApprovalSetting{Domain: in.Domain, DepartmentID: in.DepartmentID}).Updates(&setting).Error + err = model.DB.Where(&model.ApprovalSetting{Domain: in.Domain, KeyWord: in.KeyWord}).Updates(&setting).Error } if err == nil { @@ -194,10 +229,10 @@ func (a *ApprovalProvider) UpdateSetting(ctx context.Context, in *approval.Setti func (a *ApprovalProvider) DetailSetting(ctx context.Context, in *approval.DetailSettingRequest) (*approval.SettingRequest, error) { response := &approval.SettingRequest{} - var setting model.DepartmentApprovalSetting + var setting model.ApprovalSetting - if err := model.DB.Model(&model.DepartmentApprovalSetting{}). - Where(&model.DepartmentApprovalSetting{Domain: in.Domain, DepartmentID: in.DepartmentID}). + if err := model.DB.Model(&model.ApprovalSetting{}). + Where(&model.ApprovalSetting{Domain: in.Domain, KeyWord: in.KeyWord}). First(&setting).Error; err != nil { response.Domain = in.Domain } else { @@ -206,3 +241,87 @@ func (a *ApprovalProvider) DetailSetting(ctx context.Context, in *approval.Detai return response, nil } + +func (a *ApprovalProvider) CreateType(ctx context.Context, in *approval.CreateTypeRequest) (*approval.TypeResponse, error) { + response := &approval.TypeResponse{} + + typeObj := model.ApprovalType{ + KeyWord: in.KeyWord, + Title: in.Title, + Domain: in.Domain, + } + + if err := model.DB.Create(&typeObj).Error; err != nil { + return response, err + } + response.ID = typeObj.ID + response.Domain = typeObj.Domain + + return response, nil +} + +func (a *ApprovalProvider) DetailType(ctx context.Context, in *approval.TypeResponse) (*approval.CreateTypeRequest, error) { + response := &approval.CreateTypeRequest{} + var typeObj model.ApprovalType + + if err := model.DB.First(&typeObj, in.ID).Error; err != nil { + return nil, err + } + + response = serializer.BuildType(&typeObj) + + return response, nil +} + +func (a *ApprovalProvider) UpdateType(ctx context.Context, in *approval.CreateTypeRequest) (*approval.TypeResponse, error) { + response := &approval.TypeResponse{} + var typeObj model.ApprovalType + + if err := model.DB.First(&typeObj, in.ID).Error; err != nil { + return nil, err + } + + typeObj.Title = in.Title + typeObj.KeyWord = in.Title + + if err := model.DB.Save(&typeObj).Error; err != nil { + return nil, err + } + response.ID = in.ID + response.Domain = in.Domain + + return response, nil +} + +func (a *ApprovalProvider) AllType(ctx context.Context, in *approval.CommonRequest) (*approval.AllTypeResponse, error) { + + response := &approval.AllTypeResponse{} + var list []*model.ApprovalType + + if err := model.DB.Where(&model.ApprovalType{Domain: in.Domain}).Find(&list).Error; err != nil { + return nil, err + } + + response.Data = serializer.BuildTypes(list) + + response.Count = uint64(len(list)) + + return response, nil +} + +func (a *ApprovalProvider) RemoveType(ctx context.Context, in *approval.TypeResponse) (*approval.TypeResponse, error) { + response := &approval.TypeResponse{} + var typeObj model.ApprovalType + + if err := model.DB.First(&typeObj, in.ID).Error; err != nil { + return nil, err + } + + if err := model.DB.Delete(&typeObj, in.ID).Error; err != nil { + return nil, err + } + response.ID = in.ID + response.Domain = in.Domain + + return response, nil +}