diff --git a/shoppingCart-service/client/client.go b/shoppingCart-service/client/client.go index f72738f..747ae59 100644 --- a/shoppingCart-service/client/client.go +++ b/shoppingCart-service/client/client.go @@ -216,12 +216,12 @@ func main() { c.JSON(http.StatusOK, gin.H{"addCart": "SUCCESS", "Message": "新增购物车成功!"}) }) router.POST("/addCart-compensate", func(c *gin.Context) { - req := &proto.AddCartReq{} + req := &proto.UpdateCartReq{} if err := c.BindJSON(req); err != nil { log.Fatalln(err) } req.Id = CartId - resp, err = UpdateCartClient.UpdateCart(context.TODO(), req) + resp, err := UpdateCartClient.UpdateCart(context.TODO(), req) CartId = resp.ID if err != nil { log.Println("/addCart-compensate err ", err) @@ -264,6 +264,7 @@ func main() { ProductId: int32(productId), ProductSkuId: int32(productSkuId), UserId: int32(sum), + CreateUser: int32(sum), } resp := &proto.AddCartResp{} //商品详情 diff --git a/shoppingCart-service/domain/repository/cart_repository.go b/shoppingCart-service/domain/repository/cart_repository.go index a0e5495..0c44cda 100644 --- a/shoppingCart-service/domain/repository/cart_repository.go +++ b/shoppingCart-service/domain/repository/cart_repository.go @@ -18,7 +18,7 @@ import ( //接口 type ICartRepository interface { AddCart(*proto.AddCartReq) (*model.ShoppingCart, error) - UpdateCart(*proto.AddCartReq) (*model.ShoppingCart, error) + UpdateCart(req *proto.UpdateCartReq) (*model.ShoppingCart, error) } // 创建实例 @@ -39,6 +39,7 @@ func (u *CartRepository) AddCart(req *proto.AddCartReq) (obj *model.ShoppingCart ProductName: req.ProductName, ProductMainPicture: req.ProductMainPicture, UserId: req.UserId, + CreateUser: req.CreateUser, } cart.CreateTime = time.Now() // tb := u.mysqlDB.Create(&cart) @@ -47,7 +48,7 @@ func (u *CartRepository) AddCart(req *proto.AddCartReq) (obj *model.ShoppingCart return &cart, tb.Error //err } -func (u *CartRepository) UpdateCart(req *proto.AddCartReq) (obj *model.ShoppingCart, err error) { +func (u *CartRepository) UpdateCart(req *proto.UpdateCartReq) (obj *model.ShoppingCart, err error) { cart := model.ShoppingCart{ Number: req.Number, ProductId: req.ProductId, @@ -56,9 +57,14 @@ func (u *CartRepository) UpdateCart(req *proto.AddCartReq) (obj *model.ShoppingC ProductMainPicture: req.ProductMainPicture, UserId: req.UserId, ID: req.Id, + IsDeleted: req.IsDeleted, + UpdateUser: req.UpdateUser, } - cart.UpdateTime = time.Now() // - tb := u.mysqlDB.Model(&model.ShoppingCart{}).Where("id = ?", cart.ID).Update("is_deleted", 1) + cart.UpdateTime = time.Now() // &cart + tb := u.mysqlDB.Model(&model.ShoppingCart{}). + Where("id = ?", cart.ID). + Updates(&cart) + //Update("is_deleted", 1) //err = errors.New("400", "测试异常", 400) fmt.Println("repository UpdateCart >>>> ", cart) return &cart, tb.Error //err diff --git a/shoppingCart-service/domain/service/cart_service.go b/shoppingCart-service/domain/service/cart_service.go index 70a92cb..8645880 100644 --- a/shoppingCart-service/domain/service/cart_service.go +++ b/shoppingCart-service/domain/service/cart_service.go @@ -8,7 +8,7 @@ import ( type ICartService interface { AddCart(*proto.AddCartReq) (obj *model.ShoppingCart, err error) - UpdateCart(*proto.AddCartReq) (obj *model.ShoppingCart, err error) + UpdateCart(*proto.UpdateCartReq) (obj *model.ShoppingCart, err error) } type CartService struct { cartRepository repository.ICartRepository @@ -27,6 +27,6 @@ func NewCartService(cartRepository repository.ICartRepository) ICartService { func (u *CartService) AddCart(req *proto.AddCartReq) (obj *model.ShoppingCart, err error) { return u.cartRepository.AddCart(req) } -func (u *CartService) UpdateCart(req *proto.AddCartReq) (obj *model.ShoppingCart, err error) { +func (u *CartService) UpdateCart(req *proto.UpdateCartReq) (obj *model.ShoppingCart, err error) { return u.cartRepository.UpdateCart(req) } diff --git a/shoppingCart-service/handler/cart_handler.go b/shoppingCart-service/handler/cart_handler.go index d900059..039bc1c 100644 --- a/shoppingCart-service/handler/cart_handler.go +++ b/shoppingCart-service/handler/cart_handler.go @@ -28,7 +28,7 @@ func (u *CartHandler) AddCart(ctx context.Context, req *proto.AddCartReq, resp * //修改购物车 -func (u *CartHandler) UpdateCart(ctx context.Context, req *proto.AddCartReq, resp *proto.AddCartResp) error { +func (u *CartHandler) UpdateCart(ctx context.Context, req *proto.UpdateCartReq, resp *proto.UpdateCartResp) error { obj, err := u.CartService.UpdateCart(req) if err != nil { println(" UpdateCart err :", err) diff --git a/shoppingCart-service/proto/cart.pb.go b/shoppingCart-service/proto/cart.pb.go index 7875812..9eb161d 100644 --- a/shoppingCart-service/proto/cart.pb.go +++ b/shoppingCart-service/proto/cart.pb.go @@ -48,6 +48,12 @@ type ShoppingCart struct { ProductName string `protobuf:"bytes,5,opt,name=productName,proto3" json:"productName,omitempty"` ProductMainPicture string `protobuf:"bytes,6,opt,name=productMainPicture,proto3" json:"productMainPicture,omitempty"` Number int32 `protobuf:"varint,7,opt,name=number,proto3" json:"number,omitempty"` + // 查询修改所需 + UpdateTime string `protobuf:"bytes,8,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + CrateTime string `protobuf:"bytes,9,opt,name=crateTime,proto3" json:"crateTime,omitempty"` + CreateUser int32 `protobuf:"varint,10,opt,name=createUser,proto3" json:"createUser,omitempty"` + UpdateUser int32 `protobuf:"varint,11,opt,name=updateUser,proto3" json:"updateUser,omitempty"` + IsDeleted bool `protobuf:"varint,12,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` } func (x *ShoppingCart) Reset() { @@ -131,6 +137,41 @@ func (x *ShoppingCart) GetNumber() int32 { return 0 } +func (x *ShoppingCart) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *ShoppingCart) GetCrateTime() string { + if x != nil { + return x.CrateTime + } + return "" +} + +func (x *ShoppingCart) GetCreateUser() int32 { + if x != nil { + return x.CreateUser + } + return 0 +} + +func (x *ShoppingCart) GetUpdateUser() int32 { + if x != nil { + return x.UpdateUser + } + return 0 +} + +func (x *ShoppingCart) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + // 请求 request struct type AddCartReq struct { state protoimpl.MessageState @@ -144,6 +185,7 @@ type AddCartReq struct { ProductMainPicture string `protobuf:"bytes,5,opt,name=productMainPicture,proto3" json:"productMainPicture,omitempty"` UserId int32 `protobuf:"varint,6,opt,name=userId,proto3" json:"userId,omitempty"` Id int32 `protobuf:"varint,7,opt,name=id,proto3" json:"id,omitempty"` + CreateUser int32 `protobuf:"varint,8,opt,name=createUser,proto3" json:"createUser,omitempty"` } func (x *AddCartReq) Reset() { @@ -227,6 +269,13 @@ func (x *AddCartReq) GetId() int32 { return 0 } +func (x *AddCartReq) GetCreateUser() int32 { + if x != nil { + return x.CreateUser + } + return 0 +} + // * // "productSimple": { // "id": 15, @@ -335,6 +384,323 @@ func (x *AddCartResp) GetID() int32 { return 0 } +type UpdateCartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId int32 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"` + ProductId int32 `protobuf:"varint,3,opt,name=productId,proto3" json:"productId,omitempty"` + ProductSkuId int32 `protobuf:"varint,4,opt,name=productSkuId,proto3" json:"productSkuId,omitempty"` + ProductName string `protobuf:"bytes,5,opt,name=productName,proto3" json:"productName,omitempty"` + ProductMainPicture string `protobuf:"bytes,6,opt,name=productMainPicture,proto3" json:"productMainPicture,omitempty"` + Number int32 `protobuf:"varint,7,opt,name=number,proto3" json:"number,omitempty"` + // 查询修改所需 + UpdateTime string `protobuf:"bytes,8,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + CrateTime string `protobuf:"bytes,9,opt,name=crateTime,proto3" json:"crateTime,omitempty"` + CreateUser int32 `protobuf:"varint,10,opt,name=createUser,proto3" json:"createUser,omitempty"` + UpdateUser int32 `protobuf:"varint,11,opt,name=updateUser,proto3" json:"updateUser,omitempty"` + IsDeleted bool `protobuf:"varint,12,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` +} + +func (x *UpdateCartReq) Reset() { + *x = UpdateCartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_cart_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCartReq) ProtoMessage() {} + +func (x *UpdateCartReq) ProtoReflect() protoreflect.Message { + mi := &file_cart_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 UpdateCartReq.ProtoReflect.Descriptor instead. +func (*UpdateCartReq) Descriptor() ([]byte, []int) { + return file_cart_proto_rawDescGZIP(), []int{3} +} + +func (x *UpdateCartReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UpdateCartReq) GetUserId() int32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *UpdateCartReq) GetProductId() int32 { + if x != nil { + return x.ProductId + } + return 0 +} + +func (x *UpdateCartReq) GetProductSkuId() int32 { + if x != nil { + return x.ProductSkuId + } + return 0 +} + +func (x *UpdateCartReq) GetProductName() string { + if x != nil { + return x.ProductName + } + return "" +} + +func (x *UpdateCartReq) GetProductMainPicture() string { + if x != nil { + return x.ProductMainPicture + } + return "" +} + +func (x *UpdateCartReq) GetNumber() int32 { + if x != nil { + return x.Number + } + return 0 +} + +func (x *UpdateCartReq) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *UpdateCartReq) GetCrateTime() string { + if x != nil { + return x.CrateTime + } + return "" +} + +func (x *UpdateCartReq) GetCreateUser() int32 { + if x != nil { + return x.CreateUser + } + return 0 +} + +func (x *UpdateCartReq) GetUpdateUser() int32 { + if x != nil { + return x.UpdateUser + } + return 0 +} + +func (x *UpdateCartReq) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + +type UpdateCartResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShoppingCartNumber int64 `protobuf:"varint,3,opt,name=shoppingCartNumber,proto3" json:"shoppingCartNumber,omitempty"` + CanSetShoppingCartNumber int64 `protobuf:"varint,4,opt,name=canSetShoppingCartNumber,proto3" json:"canSetShoppingCartNumber,omitempty"` + IsBeyondMaxLimit bool `protobuf:"varint,5,opt,name=isBeyondMaxLimit,proto3" json:"isBeyondMaxLimit,omitempty"` + ID int32 `protobuf:"varint,6,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *UpdateCartResp) Reset() { + *x = UpdateCartResp{} + if protoimpl.UnsafeEnabled { + mi := &file_cart_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCartResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCartResp) ProtoMessage() {} + +func (x *UpdateCartResp) ProtoReflect() protoreflect.Message { + mi := &file_cart_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 UpdateCartResp.ProtoReflect.Descriptor instead. +func (*UpdateCartResp) Descriptor() ([]byte, []int) { + return file_cart_proto_rawDescGZIP(), []int{4} +} + +func (x *UpdateCartResp) GetShoppingCartNumber() int64 { + if x != nil { + return x.ShoppingCartNumber + } + return 0 +} + +func (x *UpdateCartResp) GetCanSetShoppingCartNumber() int64 { + if x != nil { + return x.CanSetShoppingCartNumber + } + return 0 +} + +func (x *UpdateCartResp) GetIsBeyondMaxLimit() bool { + if x != nil { + return x.IsBeyondMaxLimit + } + return false +} + +func (x *UpdateCartResp) GetID() int32 { + if x != nil { + return x.ID + } + return 0 +} + +type FindCartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId int32 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"` + IsDeleted bool `protobuf:"varint,3,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` +} + +func (x *FindCartReq) Reset() { + *x = FindCartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_cart_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindCartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindCartReq) ProtoMessage() {} + +func (x *FindCartReq) ProtoReflect() protoreflect.Message { + mi := &file_cart_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 FindCartReq.ProtoReflect.Descriptor instead. +func (*FindCartReq) Descriptor() ([]byte, []int) { + return file_cart_proto_rawDescGZIP(), []int{5} +} + +func (x *FindCartReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *FindCartReq) GetUserId() int32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *FindCartReq) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + +type FindCartResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShoppingCarts []*ShoppingCart `protobuf:"bytes,1,rep,name=shoppingCarts,proto3" json:"shoppingCarts,omitempty"` +} + +func (x *FindCartResp) Reset() { + *x = FindCartResp{} + if protoimpl.UnsafeEnabled { + mi := &file_cart_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindCartResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindCartResp) ProtoMessage() {} + +func (x *FindCartResp) ProtoReflect() protoreflect.Message { + mi := &file_cart_proto_msgTypes[6] + 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 FindCartResp.ProtoReflect.Descriptor instead. +func (*FindCartResp) Descriptor() ([]byte, []int) { + return file_cart_proto_rawDescGZIP(), []int{6} +} + +func (x *FindCartResp) GetShoppingCarts() []*ShoppingCart { + if x != nil { + return x.ShoppingCarts + } + return nil +} + type Product struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -354,7 +720,7 @@ type Product struct { func (x *Product) Reset() { *x = Product{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[3] + mi := &file_cart_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -367,7 +733,7 @@ func (x *Product) String() string { func (*Product) ProtoMessage() {} func (x *Product) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[3] + mi := &file_cart_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -380,7 +746,7 @@ func (x *Product) ProtoReflect() protoreflect.Message { // Deprecated: Use Product.ProtoReflect.Descriptor instead. func (*Product) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{3} + return file_cart_proto_rawDescGZIP(), []int{7} } func (x *Product) GetId() int32 { @@ -459,7 +825,7 @@ type PageReq struct { func (x *PageReq) Reset() { *x = PageReq{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[4] + mi := &file_cart_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -472,7 +838,7 @@ func (x *PageReq) String() string { func (*PageReq) ProtoMessage() {} func (x *PageReq) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[4] + mi := &file_cart_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -485,7 +851,7 @@ func (x *PageReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PageReq.ProtoReflect.Descriptor instead. func (*PageReq) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{4} + return file_cart_proto_rawDescGZIP(), []int{8} } func (x *PageReq) GetLength() int32 { @@ -516,7 +882,7 @@ type PageResp struct { func (x *PageResp) Reset() { *x = PageResp{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[5] + mi := &file_cart_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -529,7 +895,7 @@ func (x *PageResp) String() string { func (*PageResp) ProtoMessage() {} func (x *PageResp) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[5] + mi := &file_cart_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -542,7 +908,7 @@ func (x *PageResp) ProtoReflect() protoreflect.Message { // Deprecated: Use PageResp.ProtoReflect.Descriptor instead. func (*PageResp) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{5} + return file_cart_proto_rawDescGZIP(), []int{9} } func (x *PageResp) GetProduct() []*Product { @@ -613,7 +979,7 @@ type ProductDetail struct { func (x *ProductDetail) Reset() { *x = ProductDetail{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[6] + mi := &file_cart_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -626,7 +992,7 @@ func (x *ProductDetail) String() string { func (*ProductDetail) ProtoMessage() {} func (x *ProductDetail) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[6] + mi := &file_cart_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -639,7 +1005,7 @@ func (x *ProductDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetail.ProtoReflect.Descriptor instead. func (*ProductDetail) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{6} + return file_cart_proto_rawDescGZIP(), []int{10} } func (x *ProductDetail) GetId() int32 { @@ -780,7 +1146,7 @@ type ProductDetailReq struct { func (x *ProductDetailReq) Reset() { *x = ProductDetailReq{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[7] + mi := &file_cart_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -793,7 +1159,7 @@ func (x *ProductDetailReq) String() string { func (*ProductDetailReq) ProtoMessage() {} func (x *ProductDetailReq) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[7] + mi := &file_cart_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -806,7 +1172,7 @@ func (x *ProductDetailReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetailReq.ProtoReflect.Descriptor instead. func (*ProductDetailReq) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{7} + return file_cart_proto_rawDescGZIP(), []int{11} } func (x *ProductDetailReq) GetId() int32 { @@ -828,7 +1194,7 @@ type ProductDetailResp struct { func (x *ProductDetailResp) Reset() { *x = ProductDetailResp{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[8] + mi := &file_cart_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -841,7 +1207,7 @@ func (x *ProductDetailResp) String() string { func (*ProductDetailResp) ProtoMessage() {} func (x *ProductDetailResp) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[8] + mi := &file_cart_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -854,7 +1220,7 @@ func (x *ProductDetailResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetailResp.ProtoReflect.Descriptor instead. func (*ProductDetailResp) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{8} + return file_cart_proto_rawDescGZIP(), []int{12} } func (x *ProductDetailResp) GetProductDetail() []*ProductDetail { @@ -884,7 +1250,7 @@ type ProductSku struct { func (x *ProductSku) Reset() { *x = ProductSku{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[9] + mi := &file_cart_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -897,7 +1263,7 @@ func (x *ProductSku) String() string { func (*ProductSku) ProtoMessage() {} func (x *ProductSku) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[9] + mi := &file_cart_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -910,7 +1276,7 @@ func (x *ProductSku) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSku.ProtoReflect.Descriptor instead. func (*ProductSku) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{9} + return file_cart_proto_rawDescGZIP(), []int{13} } func (x *ProductSku) GetSkuId() int32 { @@ -960,7 +1326,7 @@ type ProductSkuReq struct { func (x *ProductSkuReq) Reset() { *x = ProductSkuReq{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[10] + mi := &file_cart_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -973,7 +1339,7 @@ func (x *ProductSkuReq) String() string { func (*ProductSkuReq) ProtoMessage() {} func (x *ProductSkuReq) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[10] + mi := &file_cart_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -986,7 +1352,7 @@ func (x *ProductSkuReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSkuReq.ProtoReflect.Descriptor instead. func (*ProductSkuReq) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{10} + return file_cart_proto_rawDescGZIP(), []int{14} } func (x *ProductSkuReq) GetProductId() int32 { @@ -1008,7 +1374,7 @@ type ProductSkuResp struct { func (x *ProductSkuResp) Reset() { *x = ProductSkuResp{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[11] + mi := &file_cart_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1021,7 +1387,7 @@ func (x *ProductSkuResp) String() string { func (*ProductSkuResp) ProtoMessage() {} func (x *ProductSkuResp) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[11] + mi := &file_cart_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1034,7 +1400,7 @@ func (x *ProductSkuResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSkuResp.ProtoReflect.Descriptor instead. func (*ProductSkuResp) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{11} + return file_cart_proto_rawDescGZIP(), []int{15} } func (x *ProductSkuResp) GetProductSku() []*ProductSku { @@ -1056,7 +1422,7 @@ type TokenReq struct { func (x *TokenReq) Reset() { *x = TokenReq{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[12] + mi := &file_cart_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1069,7 +1435,7 @@ func (x *TokenReq) String() string { func (*TokenReq) ProtoMessage() {} func (x *TokenReq) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[12] + mi := &file_cart_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1082,7 +1448,7 @@ func (x *TokenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenReq.ProtoReflect.Descriptor instead. func (*TokenReq) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{12} + return file_cart_proto_rawDescGZIP(), []int{16} } func (x *TokenReq) GetUuid() string { @@ -1105,7 +1471,7 @@ type TokenResp struct { func (x *TokenResp) Reset() { *x = TokenResp{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[13] + mi := &file_cart_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1118,7 +1484,7 @@ func (x *TokenResp) String() string { func (*TokenResp) ProtoMessage() {} func (x *TokenResp) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[13] + mi := &file_cart_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1131,7 +1497,7 @@ func (x *TokenResp) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenResp.ProtoReflect.Descriptor instead. func (*TokenResp) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{13} + return file_cart_proto_rawDescGZIP(), []int{17} } func (x *TokenResp) GetToken() string { @@ -1160,7 +1526,7 @@ type UpdateSkuReq struct { func (x *UpdateSkuReq) Reset() { *x = UpdateSkuReq{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[14] + mi := &file_cart_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1173,7 +1539,7 @@ func (x *UpdateSkuReq) String() string { func (*UpdateSkuReq) ProtoMessage() {} func (x *UpdateSkuReq) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[14] + mi := &file_cart_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1186,7 +1552,7 @@ func (x *UpdateSkuReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSkuReq.ProtoReflect.Descriptor instead. func (*UpdateSkuReq) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{14} + return file_cart_proto_rawDescGZIP(), []int{18} } func (x *UpdateSkuReq) GetProductSku() *ProductSku { @@ -1207,7 +1573,7 @@ type UpdateSkuResp struct { func (x *UpdateSkuResp) Reset() { *x = UpdateSkuResp{} if protoimpl.UnsafeEnabled { - mi := &file_cart_proto_msgTypes[15] + mi := &file_cart_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1220,7 +1586,7 @@ func (x *UpdateSkuResp) String() string { func (*UpdateSkuResp) ProtoMessage() {} func (x *UpdateSkuResp) ProtoReflect() protoreflect.Message { - mi := &file_cart_proto_msgTypes[15] + mi := &file_cart_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1233,7 +1599,7 @@ func (x *UpdateSkuResp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSkuResp.ProtoReflect.Descriptor instead. func (*UpdateSkuResp) Descriptor() ([]byte, []int) { - return file_cart_proto_rawDescGZIP(), []int{15} + return file_cart_proto_rawDescGZIP(), []int{19} } func (x *UpdateSkuResp) GetIsSuccess() bool { @@ -1247,7 +1613,7 @@ var File_cart_proto protoreflect.FileDescriptor var file_cart_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x63, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xe2, 0x01, 0x0a, 0x0c, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x02, 0x0a, 0x0c, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, @@ -1261,185 +1627,247 @@ var file_cart_proto_rawDesc = []byte{ 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, - 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, - 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb0, 0x02, 0x0a, 0x0b, - 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x53, 0x6b, 0x75, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x53, 0x6b, 0x75, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, - 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, - 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x73, 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, - 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, - 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x44, 0x22, 0xec, - 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, - 0x3c, 0x0a, 0x0e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, - 0x07, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x5e, - 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, - 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0xbf, - 0x04, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, - 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, - 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, + 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x22, 0x80, 0x02, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x22, 0xb0, 0x02, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, + 0x75, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, + 0x52, 0x10, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, + 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, + 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, + 0x0a, 0x10, 0x69, 0x73, 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x42, 0x65, 0x79, 0x6f, + 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x44, 0x22, 0xff, 0x02, 0x0a, 0x0d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, + 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, + 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, + 0x0a, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xb8, 0x01, 0x0a, + 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x2e, 0x0a, 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x68, 0x6f, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x3a, 0x0a, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x69, + 0x73, 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, + 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x44, 0x22, 0x53, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x0c, + 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0d, + 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x6f, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x3b, 0x0a, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, - 0x0a, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x22, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6b, 0x75, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, - 0x0a, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, - 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, - 0x74, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, - 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, - 0x75, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x22, 0x1e, 0x0a, 0x08, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, - 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x41, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x22, 0x2d, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x32, 0x3d, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x61, - 0x72, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x11, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x1a, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x43, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, - 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x31, 0x0a, 0x04, 0x50, - 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x5d, - 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x12, 0x48, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x51, 0x0a, - 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, - 0x3f, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, - 0x75, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x32, 0x52, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x6b, - 0x75, 0x12, 0x41, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, - 0x6b, 0x75, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x32, 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x45, 0x0a, 0x09, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x38, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x6b, 0x75, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x07, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x5e, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0xbf, 0x04, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, + 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, + 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, + 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, + 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, + 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x69, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, + 0x11, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x9c, + 0x01, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6b, + 0x75, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, + 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x73, 0x65, + 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, + 0x0d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0e, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, + 0x75, 0x22, 0x1e, 0x0a, 0x08, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x22, 0x3b, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x41, + 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x31, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, + 0x75, 0x22, 0x2d, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x32, 0x3d, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x41, + 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, + 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, + 0x49, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x12, 0x3b, 0x0a, + 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x12, 0x14, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x41, 0x0a, 0x08, 0x46, 0x69, + 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, + 0x72, 0x74, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, + 0x69, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x31, 0x0a, + 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x32, 0x5d, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x48, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, + 0x51, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, + 0x75, 0x12, 0x3f, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x53, 0x6b, 0x75, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x32, 0x52, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x53, 0x6b, 0x75, 0x12, 0x41, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x53, 0x6b, 0x75, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x45, 0x0a, 0x09, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x38, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1454,55 +1882,62 @@ func file_cart_proto_rawDescGZIP() []byte { return file_cart_proto_rawDescData } -var file_cart_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_cart_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_cart_proto_goTypes = []interface{}{ (*ShoppingCart)(nil), // 0: proto.ShoppingCart (*AddCartReq)(nil), // 1: proto.AddCartReq (*AddCartResp)(nil), // 2: proto.AddCartResp - (*Product)(nil), // 3: proto.Product - (*PageReq)(nil), // 4: proto.PageReq - (*PageResp)(nil), // 5: proto.PageResp - (*ProductDetail)(nil), // 6: proto.ProductDetail - (*ProductDetailReq)(nil), // 7: proto.ProductDetailReq - (*ProductDetailResp)(nil), // 8: proto.ProductDetailResp - (*ProductSku)(nil), // 9: proto.ProductSku - (*ProductSkuReq)(nil), // 10: proto.ProductSkuReq - (*ProductSkuResp)(nil), // 11: proto.ProductSkuResp - (*TokenReq)(nil), // 12: proto.TokenReq - (*TokenResp)(nil), // 13: proto.TokenResp - (*UpdateSkuReq)(nil), // 14: proto.UpdateSkuReq - (*UpdateSkuResp)(nil), // 15: proto.UpdateSkuResp - nil, // 16: proto.Product.LabelListEntry + (*UpdateCartReq)(nil), // 3: proto.UpdateCartReq + (*UpdateCartResp)(nil), // 4: proto.UpdateCartResp + (*FindCartReq)(nil), // 5: proto.FindCartReq + (*FindCartResp)(nil), // 6: proto.FindCartResp + (*Product)(nil), // 7: proto.Product + (*PageReq)(nil), // 8: proto.PageReq + (*PageResp)(nil), // 9: proto.PageResp + (*ProductDetail)(nil), // 10: proto.ProductDetail + (*ProductDetailReq)(nil), // 11: proto.ProductDetailReq + (*ProductDetailResp)(nil), // 12: proto.ProductDetailResp + (*ProductSku)(nil), // 13: proto.ProductSku + (*ProductSkuReq)(nil), // 14: proto.ProductSkuReq + (*ProductSkuResp)(nil), // 15: proto.ProductSkuResp + (*TokenReq)(nil), // 16: proto.TokenReq + (*TokenResp)(nil), // 17: proto.TokenResp + (*UpdateSkuReq)(nil), // 18: proto.UpdateSkuReq + (*UpdateSkuResp)(nil), // 19: proto.UpdateSkuResp + nil, // 20: proto.Product.LabelListEntry } var file_cart_proto_depIdxs = []int32{ - 6, // 0: proto.AddCartResp.productSimple:type_name -> proto.ProductDetail - 9, // 1: proto.AddCartResp.productSkuSimple:type_name -> proto.ProductSku - 16, // 2: proto.Product.labelList:type_name -> proto.Product.LabelListEntry - 3, // 3: proto.PageResp.product:type_name -> proto.Product - 6, // 4: proto.ProductDetailResp.productDetail:type_name -> proto.ProductDetail - 9, // 5: proto.ProductSkuResp.productSku:type_name -> proto.ProductSku - 9, // 6: proto.UpdateSkuReq.productSku:type_name -> proto.ProductSku - 1, // 7: proto.AddCart.AddCart:input_type -> proto.AddCartReq - 1, // 8: proto.UpdateCart.UpdateCart:input_type -> proto.AddCartReq - 4, // 9: proto.Page.Page:input_type -> proto.PageReq - 7, // 10: proto.ShowProductDetail.ShowProductDetail:input_type -> proto.ProductDetailReq - 10, // 11: proto.ShowProductSku.ShowProductSku:input_type -> proto.ProductSkuReq - 7, // 12: proto.ShowDetailSku.ShowDetailSku:input_type -> proto.ProductDetailReq - 12, // 13: proto.GetUserToken.GetUserToken:input_type -> proto.TokenReq - 14, // 14: proto.UpdateSku.UpdateSku:input_type -> proto.UpdateSkuReq - 2, // 15: proto.AddCart.AddCart:output_type -> proto.AddCartResp - 2, // 16: proto.UpdateCart.UpdateCart:output_type -> proto.AddCartResp - 5, // 17: proto.Page.Page:output_type -> proto.PageResp - 8, // 18: proto.ShowProductDetail.ShowProductDetail:output_type -> proto.ProductDetailResp - 11, // 19: proto.ShowProductSku.ShowProductSku:output_type -> proto.ProductSkuResp - 11, // 20: proto.ShowDetailSku.ShowDetailSku:output_type -> proto.ProductSkuResp - 13, // 21: proto.GetUserToken.GetUserToken:output_type -> proto.TokenResp - 15, // 22: proto.UpdateSku.UpdateSku:output_type -> proto.UpdateSkuResp - 15, // [15:23] is the sub-list for method output_type - 7, // [7:15] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 10, // 0: proto.AddCartResp.productSimple:type_name -> proto.ProductDetail + 13, // 1: proto.AddCartResp.productSkuSimple:type_name -> proto.ProductSku + 0, // 2: proto.FindCartResp.shoppingCarts:type_name -> proto.ShoppingCart + 20, // 3: proto.Product.labelList:type_name -> proto.Product.LabelListEntry + 7, // 4: proto.PageResp.product:type_name -> proto.Product + 10, // 5: proto.ProductDetailResp.productDetail:type_name -> proto.ProductDetail + 13, // 6: proto.ProductSkuResp.productSku:type_name -> proto.ProductSku + 13, // 7: proto.UpdateSkuReq.productSku:type_name -> proto.ProductSku + 1, // 8: proto.AddCart.AddCart:input_type -> proto.AddCartReq + 3, // 9: proto.UpdateCart.UpdateCart:input_type -> proto.UpdateCartReq + 5, // 10: proto.FindCart.FindCart:input_type -> proto.FindCartReq + 8, // 11: proto.Page.Page:input_type -> proto.PageReq + 11, // 12: proto.ShowProductDetail.ShowProductDetail:input_type -> proto.ProductDetailReq + 14, // 13: proto.ShowProductSku.ShowProductSku:input_type -> proto.ProductSkuReq + 11, // 14: proto.ShowDetailSku.ShowDetailSku:input_type -> proto.ProductDetailReq + 16, // 15: proto.GetUserToken.GetUserToken:input_type -> proto.TokenReq + 18, // 16: proto.UpdateSku.UpdateSku:input_type -> proto.UpdateSkuReq + 2, // 17: proto.AddCart.AddCart:output_type -> proto.AddCartResp + 4, // 18: proto.UpdateCart.UpdateCart:output_type -> proto.UpdateCartResp + 6, // 19: proto.FindCart.FindCart:output_type -> proto.FindCartResp + 9, // 20: proto.Page.Page:output_type -> proto.PageResp + 12, // 21: proto.ShowProductDetail.ShowProductDetail:output_type -> proto.ProductDetailResp + 15, // 22: proto.ShowProductSku.ShowProductSku:output_type -> proto.ProductSkuResp + 15, // 23: proto.ShowDetailSku.ShowDetailSku:output_type -> proto.ProductSkuResp + 17, // 24: proto.GetUserToken.GetUserToken:output_type -> proto.TokenResp + 19, // 25: proto.UpdateSku.UpdateSku:output_type -> proto.UpdateSkuResp + 17, // [17:26] is the sub-list for method output_type + 8, // [8:17] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_cart_proto_init() } @@ -1548,7 +1983,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Product); i { + switch v := v.(*UpdateCartReq); i { case 0: return &v.state case 1: @@ -1560,7 +1995,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageReq); i { + switch v := v.(*UpdateCartResp); i { case 0: return &v.state case 1: @@ -1572,7 +2007,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageResp); i { + switch v := v.(*FindCartReq); i { case 0: return &v.state case 1: @@ -1584,7 +2019,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetail); i { + switch v := v.(*FindCartResp); i { case 0: return &v.state case 1: @@ -1596,7 +2031,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetailReq); i { + switch v := v.(*Product); i { case 0: return &v.state case 1: @@ -1608,7 +2043,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetailResp); i { + switch v := v.(*PageReq); i { case 0: return &v.state case 1: @@ -1620,7 +2055,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSku); i { + switch v := v.(*PageResp); i { case 0: return &v.state case 1: @@ -1632,7 +2067,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSkuReq); i { + switch v := v.(*ProductDetail); i { case 0: return &v.state case 1: @@ -1644,7 +2079,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSkuResp); i { + switch v := v.(*ProductDetailReq); i { case 0: return &v.state case 1: @@ -1656,7 +2091,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenReq); i { + switch v := v.(*ProductDetailResp); i { case 0: return &v.state case 1: @@ -1668,7 +2103,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenResp); i { + switch v := v.(*ProductSku); i { case 0: return &v.state case 1: @@ -1680,7 +2115,7 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateSkuReq); i { + switch v := v.(*ProductSkuReq); i { case 0: return &v.state case 1: @@ -1692,6 +2127,54 @@ func file_cart_proto_init() { } } file_cart_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProductSkuResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cart_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cart_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cart_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateSkuReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cart_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSkuResp); i { case 0: return &v.state @@ -1710,9 +2193,9 @@ func file_cart_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cart_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 21, NumExtensions: 0, - NumServices: 8, + NumServices: 9, }, GoTypes: file_cart_proto_goTypes, DependencyIndexes: file_cart_proto_depIdxs, diff --git a/shoppingCart-service/proto/cart.pb.micro.go b/shoppingCart-service/proto/cart.pb.micro.go index 62f47f3..4726911 100644 --- a/shoppingCart-service/proto/cart.pb.micro.go +++ b/shoppingCart-service/proto/cart.pb.micro.go @@ -98,7 +98,7 @@ func NewUpdateCartEndpoints() []*api.Endpoint { type UpdateCartService interface { // rpc 服务 - UpdateCart(ctx context.Context, in *AddCartReq, opts ...client.CallOption) (*AddCartResp, error) + UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...client.CallOption) (*UpdateCartResp, error) } type updateCartService struct { @@ -113,9 +113,9 @@ func NewUpdateCartService(name string, c client.Client) UpdateCartService { } } -func (c *updateCartService) UpdateCart(ctx context.Context, in *AddCartReq, opts ...client.CallOption) (*AddCartResp, error) { +func (c *updateCartService) UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...client.CallOption) (*UpdateCartResp, error) { req := c.c.NewRequest(c.name, "UpdateCart.UpdateCart", in) - out := new(AddCartResp) + out := new(UpdateCartResp) err := c.c.Call(ctx, req, out, opts...) if err != nil { return nil, err @@ -127,12 +127,12 @@ func (c *updateCartService) UpdateCart(ctx context.Context, in *AddCartReq, opts type UpdateCartHandler interface { // rpc 服务 - UpdateCart(context.Context, *AddCartReq, *AddCartResp) error + UpdateCart(context.Context, *UpdateCartReq, *UpdateCartResp) error } func RegisterUpdateCartHandler(s server.Server, hdlr UpdateCartHandler, opts ...server.HandlerOption) error { type updateCart interface { - UpdateCart(ctx context.Context, in *AddCartReq, out *AddCartResp) error + UpdateCart(ctx context.Context, in *UpdateCartReq, out *UpdateCartResp) error } type UpdateCart struct { updateCart @@ -145,10 +145,69 @@ type updateCartHandler struct { UpdateCartHandler } -func (h *updateCartHandler) UpdateCart(ctx context.Context, in *AddCartReq, out *AddCartResp) error { +func (h *updateCartHandler) UpdateCart(ctx context.Context, in *UpdateCartReq, out *UpdateCartResp) error { return h.UpdateCartHandler.UpdateCart(ctx, in, out) } +// Api Endpoints for FindCart service + +func NewFindCartEndpoints() []*api.Endpoint { + return []*api.Endpoint{} +} + +// Client API for FindCart service + +type FindCartService interface { + FindCart(ctx context.Context, in *FindCartReq, opts ...client.CallOption) (*FindCartResp, error) +} + +type findCartService struct { + c client.Client + name string +} + +func NewFindCartService(name string, c client.Client) FindCartService { + return &findCartService{ + c: c, + name: name, + } +} + +func (c *findCartService) FindCart(ctx context.Context, in *FindCartReq, opts ...client.CallOption) (*FindCartResp, error) { + req := c.c.NewRequest(c.name, "FindCart.FindCart", in) + out := new(FindCartResp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for FindCart service + +type FindCartHandler interface { + FindCart(context.Context, *FindCartReq, *FindCartResp) error +} + +func RegisterFindCartHandler(s server.Server, hdlr FindCartHandler, opts ...server.HandlerOption) error { + type findCart interface { + FindCart(ctx context.Context, in *FindCartReq, out *FindCartResp) error + } + type FindCart struct { + findCart + } + h := &findCartHandler{hdlr} + return s.Handle(s.NewHandler(&FindCart{h}, opts...)) +} + +type findCartHandler struct { + FindCartHandler +} + +func (h *findCartHandler) FindCart(ctx context.Context, in *FindCartReq, out *FindCartResp) error { + return h.FindCartHandler.FindCart(ctx, in, out) +} + // Api Endpoints for Page service func NewPageEndpoints() []*api.Endpoint { diff --git a/shoppingCart-service/proto/cart.proto b/shoppingCart-service/proto/cart.proto index 04f7acb..31505d2 100644 --- a/shoppingCart-service/proto/cart.proto +++ b/shoppingCart-service/proto/cart.proto @@ -30,6 +30,12 @@ message ShoppingCart { string productName = 5; string productMainPicture = 6; int32 number = 7; + //查询修改所需 + string updateTime =8; + string crateTime = 9; + int32 createUser = 10; + int32 updateUser = 11; + bool isDeleted = 12; } /** 前端请求信息 新增购物车 @@ -48,6 +54,7 @@ message AddCartReq { string productMainPicture = 5; int32 userId =6; int32 id = 7; + int32 createUser = 8; } //响应 resp struct /** @@ -85,12 +92,44 @@ service AddCart { //rpc 服务 rpc AddCart (AddCartReq) returns (AddCartResp){} } - +message UpdateCartReq { + int32 id = 1; + int32 userId = 2; + int32 productId =3; + int32 productSkuId = 4; + string productName = 5; + string productMainPicture = 6; + int32 number = 7; + //查询修改所需 + string updateTime =8; + string crateTime = 9; + int32 createUser = 10; + int32 updateUser = 11; + bool isDeleted = 12; +} +message UpdateCartResp { + int64 shoppingCartNumber = 3; + int64 canSetShoppingCartNumber = 4; + bool isBeyondMaxLimit = 5; + int32 ID = 6; +} service UpdateCart { //rpc 服务 - rpc UpdateCart (AddCartReq) returns (AddCartResp){} + rpc UpdateCart (UpdateCartReq) returns (UpdateCartResp){} } +message FindCartReq { + int32 id = 1; + int32 userId = 2; + bool isDeleted = 3; +} +message FindCartResp { + repeated ShoppingCart shoppingCarts = 1; +} +//查询购物车 +service FindCart { + rpc FindCart (FindCartReq) returns (FindCartResp){} +} message Product { int32 id = 1; diff --git a/trade-order/client/client.go b/trade-order/client/client.go index 10c79ab..9cecd71 100644 --- a/trade-order/client/client.go +++ b/trade-order/client/client.go @@ -5,8 +5,10 @@ import ( "fmt" "github.com/afex/hystrix-go/hystrix" consul "github.com/asim/go-micro/plugins/registry/consul/v4" + "github.com/dtm-labs/dtm/client/dtmcli" "github.com/go-micro/plugins/v4/wrapper/select/roundrobin" opentracing2 "github.com/go-micro/plugins/v4/wrapper/trace/opentracing" + "github.com/lithammer/shortuuid/v3" "github.com/opentracing/opentracing-go" "go-micro.dev/v4/client" "go-micro.dev/v4/web" @@ -70,43 +72,74 @@ func main() { micro.WrapClient(roundrobin.NewClientWrapper()), ) //AddCartClient := proto.NewAddCartService("shop-cart", rpcServer.Client()) - //UpdateCartClient := proto.NewUpdateCartService("shop-cart", rpcServer.Client()) + UpdateCartClient := proto.NewUpdateCartService("shop-cart", rpcServer.Client()) //ShowProductDetailClient := proto.NewShowProductDetailService("shop-product", rpcServer.Client()) //ShowDetailSkuClient := proto.NewShowDetailSkuService("shop-product", rpcServer.Client()) GetUserTokenClient := proto.NewGetUserTokenService("shop-user", rpcServer.Client()) //UpdateSkuClient := proto.NewUpdateSkuService("shop-product", rpcServer.Client()) AddTraderClient := proto.NewAddTradeOrderService("trade-order", rpcServer.Client()) - //UpdateTraderClient := proto.NewUpdateTradeOrderService("trade-order", rpcServer.Client()) + UpdateTraderClient := proto.NewUpdateTradeOrderService("trade-order", rpcServer.Client()) //开始拆分 DTM服务 - // - //router.POST("/updateSku", func(c *gin.Context) { - // req := &proto.UpdateSkuReq{} - // if err := c.BindJSON(req); err != nil { - // log.Fatalln(err) - // } - // _, err := UpdateSkuClient.UpdateSku(context.TODO(), req) - // if err != nil { - // log.Println("/updateSku err ", err) - // c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "修改库存失败!"}) - // return - // } - // c.JSON(http.StatusOK, gin.H{"updateSku": "SUCCESS", "Message": "修改库存成功!"}) - //}) - //router.POST("/updateSku-compensate", func(c *gin.Context) { - // req := &proto.UpdateSkuReq{} - // if err := c.BindJSON(req); err != nil { - // log.Fatalln(err) - // } - // req.ProductSku.Stock += Number - // _, err := UpdateSkuClient.UpdateSku(context.TODO(), req) - // if err != nil { - // log.Println("/updateSku err ", err) - // c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "回滚库存失败!"}) - // return - // } - // c.JSON(http.StatusOK, gin.H{"updateSku-compensate": "SUCCESS", "Message": "回滚库存成功!"}) - //}) + + router.POST("/updateCart", func(c *gin.Context) { + req := &proto.UpdateCartReq{} + if err := c.BindJSON(req); err != nil { + log.Fatalln(err) + } + req.IsDeleted = true + _, err := UpdateCartClient.UpdateCart(context.TODO(), req) + if err != nil { + log.Println("/updateCart err ", err) + c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "删除购物车失败!"}) + return + } + c.JSON(http.StatusOK, gin.H{"updateCart": "SUCCESS", "Message": "删除购物车成功!"}) + }) + router.POST("/updateCart-compensate", func(c *gin.Context) { + req := &proto.UpdateCartReq{} + if err := c.BindJSON(req); err != nil { + log.Fatalln(err) + } + req.IsDeleted = false + _, err := UpdateCartClient.UpdateCart(context.TODO(), req) + if err != nil { + log.Println("/updateCart err ", err) + c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "回滚购物车失败!"}) + return + } + c.JSON(http.StatusOK, gin.H{"updateCart-compensate": "SUCCESS", "Message": "回滚购物车成功!"}) + }) + + router.POST("/addTrade", func(c *gin.Context) { + req := &proto.AddTradeOrderReq{} + if err := c.BindJSON(req); err != nil { + log.Fatalln(err) + } + _, err := AddTraderClient.AddTradeOrder(context.TODO(), req) + if err != nil { + log.Println("/addTrade err ", err) + c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "新增订单失败!"}) + return + } + c.JSON(http.StatusOK, gin.H{"addTrade": "SUCCESS", "Message": "新增订单成功!"}) + }) + router.POST("/addTrade-compensate", func(c *gin.Context) { + req := &proto.AddTradeOrderReq{} + if err := c.BindJSON(req); err != nil { + log.Fatalln(err) + } + req.TradeOrder.IsDeleted = true + _, err := UpdateTraderClient.UpdateTradeOrder(context.TODO(), req) + if err != nil { + log.Println("/addTrade err ", err) + c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "回滚订单失败!"}) + return + } + c.JSON(http.StatusOK, gin.H{"addTrade-compensate": "SUCCESS", "Message": "回滚订单成功!"}) + }) + + //新增订单API router.GET("/cartAdvanceOrder", func(c *gin.Context) { //开始检验登录 uuid := c.Request.Header["Uuid"][0] @@ -149,18 +182,24 @@ func main() { RecipientAddressId: int32(recipientAddressId), TradeOrder: tradeOrder, } - resp, err = AddTraderClient.AddTradeOrder(context.TODO(), req) - fmt.Println(resp) - //CartId = resp.ID - //测试异常 - //err = errors.New("400", "测试异常", 400) + updateCartReq := &proto.UpdateCartReq{ + Id: cartIds[0], + } + + //全局事务 + gid := shortuuid.New() + saga := dtmcli.NewSaga(DtmServer, gid). + Add(QSBusi+"/updateCart", QSBusi+"/updateCart-compensate", updateCartReq). + Add(QSBusi+"/addTrade", QSBusi+"/addTrade-compensate", req) + err = saga.Submit() if err != nil { - log.Println("/addCart err ", err) - c.JSON(http.StatusOK, gin.H{"dtm_reslut": "FAILURE", "Message": "新增购物车失败!"}) - return + log.Println("saga submit err :", err) + common.RespFail(c.Writer, resp, "添加失败") } + log.Println(" /saga submit submit :", gid) + ////writer data message row total field + common.RespOK(c.Writer, resp, "请求成功") - c.JSON(http.StatusOK, gin.H{"addCart": "SUCCESS", "Message": "新增购物车成功!"}) }) //router.POST("/addCart-compensate", func(c *gin.Context) { // req := &proto.AddCartReq{} diff --git a/trade-order/domain/repository/trade_repository.go b/trade-order/domain/repository/trade_repository.go index 7794dcc..1c5dc94 100644 --- a/trade-order/domain/repository/trade_repository.go +++ b/trade-order/domain/repository/trade_repository.go @@ -68,7 +68,10 @@ func (u *TradeRepository) AddTradeOrder(req *proto.AddTradeOrderReq) (obj *model func (u *TradeRepository) UpdateTradeOrder(req *proto.AddTradeOrderReq) (obj *model.TraderOrder, err error) { trade := model.TraderOrder{} trade.UpdateTime = time.Now() // - tb := u.mysqlDB.Model(&model.TraderOrder{}).Where("id = ?", trade.ID).Update("order_status", trade.OrderStatus) + tb := u.mysqlDB.Model(&model.TraderOrder{}). + Where("id = ?", trade.ID). + Updates(&trade) + //Update("order_status", trade.OrderStatus) //err = errors.New("400", "测试异常", 400) fmt.Println("repository UpdateTradeOrder >>>> ", trade) return &trade, tb.Error //err diff --git a/trade-order/proto/trade.pb.go b/trade-order/proto/trade.pb.go index 4764011..cdc7a1f 100644 --- a/trade-order/proto/trade.pb.go +++ b/trade-order/proto/trade.pb.go @@ -459,6 +459,458 @@ func (x *ProductOrder) GetRealAmount() float32 { return 0 } +type ShoppingCart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId int32 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"` + ProductId int32 `protobuf:"varint,3,opt,name=productId,proto3" json:"productId,omitempty"` + ProductSkuId int32 `protobuf:"varint,4,opt,name=productSkuId,proto3" json:"productSkuId,omitempty"` + ProductName string `protobuf:"bytes,5,opt,name=productName,proto3" json:"productName,omitempty"` + ProductMainPicture string `protobuf:"bytes,6,opt,name=productMainPicture,proto3" json:"productMainPicture,omitempty"` + Number int32 `protobuf:"varint,7,opt,name=number,proto3" json:"number,omitempty"` + // 查询修改所需 + UpdateTime string `protobuf:"bytes,8,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + CrateTime string `protobuf:"bytes,9,opt,name=crateTime,proto3" json:"crateTime,omitempty"` + CreateUser int32 `protobuf:"varint,10,opt,name=createUser,proto3" json:"createUser,omitempty"` + UpdateUser int32 `protobuf:"varint,11,opt,name=updateUser,proto3" json:"updateUser,omitempty"` + IsDeleted bool `protobuf:"varint,12,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` +} + +func (x *ShoppingCart) Reset() { + *x = ShoppingCart{} + if protoimpl.UnsafeEnabled { + mi := &file_trade_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShoppingCart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShoppingCart) ProtoMessage() {} + +func (x *ShoppingCart) ProtoReflect() protoreflect.Message { + mi := &file_trade_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 ShoppingCart.ProtoReflect.Descriptor instead. +func (*ShoppingCart) Descriptor() ([]byte, []int) { + return file_trade_proto_rawDescGZIP(), []int{4} +} + +func (x *ShoppingCart) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ShoppingCart) GetUserId() int32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ShoppingCart) GetProductId() int32 { + if x != nil { + return x.ProductId + } + return 0 +} + +func (x *ShoppingCart) GetProductSkuId() int32 { + if x != nil { + return x.ProductSkuId + } + return 0 +} + +func (x *ShoppingCart) GetProductName() string { + if x != nil { + return x.ProductName + } + return "" +} + +func (x *ShoppingCart) GetProductMainPicture() string { + if x != nil { + return x.ProductMainPicture + } + return "" +} + +func (x *ShoppingCart) GetNumber() int32 { + if x != nil { + return x.Number + } + return 0 +} + +func (x *ShoppingCart) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *ShoppingCart) GetCrateTime() string { + if x != nil { + return x.CrateTime + } + return "" +} + +func (x *ShoppingCart) GetCreateUser() int32 { + if x != nil { + return x.CreateUser + } + return 0 +} + +func (x *ShoppingCart) GetUpdateUser() int32 { + if x != nil { + return x.UpdateUser + } + return 0 +} + +func (x *ShoppingCart) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + +type UpdateCartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Number int32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` + ProductId int32 `protobuf:"varint,2,opt,name=productId,proto3" json:"productId,omitempty"` + ProductSkuId int32 `protobuf:"varint,3,opt,name=productSkuId,proto3" json:"productSkuId,omitempty"` + ProductName string `protobuf:"bytes,4,opt,name=productName,proto3" json:"productName,omitempty"` + ProductMainPicture string `protobuf:"bytes,5,opt,name=productMainPicture,proto3" json:"productMainPicture,omitempty"` + UserId int32 `protobuf:"varint,6,opt,name=userId,proto3" json:"userId,omitempty"` + Id int32 `protobuf:"varint,7,opt,name=id,proto3" json:"id,omitempty"` + UpdateTime string `protobuf:"bytes,8,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + CrateTime string `protobuf:"bytes,9,opt,name=crateTime,proto3" json:"crateTime,omitempty"` + CreateUser int32 `protobuf:"varint,10,opt,name=createUser,proto3" json:"createUser,omitempty"` + UpdateUser int32 `protobuf:"varint,11,opt,name=updateUser,proto3" json:"updateUser,omitempty"` + IsDeleted bool `protobuf:"varint,12,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` +} + +func (x *UpdateCartReq) Reset() { + *x = UpdateCartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_trade_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCartReq) ProtoMessage() {} + +func (x *UpdateCartReq) ProtoReflect() protoreflect.Message { + mi := &file_trade_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 UpdateCartReq.ProtoReflect.Descriptor instead. +func (*UpdateCartReq) Descriptor() ([]byte, []int) { + return file_trade_proto_rawDescGZIP(), []int{5} +} + +func (x *UpdateCartReq) GetNumber() int32 { + if x != nil { + return x.Number + } + return 0 +} + +func (x *UpdateCartReq) GetProductId() int32 { + if x != nil { + return x.ProductId + } + return 0 +} + +func (x *UpdateCartReq) GetProductSkuId() int32 { + if x != nil { + return x.ProductSkuId + } + return 0 +} + +func (x *UpdateCartReq) GetProductName() string { + if x != nil { + return x.ProductName + } + return "" +} + +func (x *UpdateCartReq) GetProductMainPicture() string { + if x != nil { + return x.ProductMainPicture + } + return "" +} + +func (x *UpdateCartReq) GetUserId() int32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *UpdateCartReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UpdateCartReq) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *UpdateCartReq) GetCrateTime() string { + if x != nil { + return x.CrateTime + } + return "" +} + +func (x *UpdateCartReq) GetCreateUser() int32 { + if x != nil { + return x.CreateUser + } + return 0 +} + +func (x *UpdateCartReq) GetUpdateUser() int32 { + if x != nil { + return x.UpdateUser + } + return 0 +} + +func (x *UpdateCartReq) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + +type UpdateCartResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShoppingCartNumber int64 `protobuf:"varint,3,opt,name=shoppingCartNumber,proto3" json:"shoppingCartNumber,omitempty"` + CanSetShoppingCartNumber int64 `protobuf:"varint,4,opt,name=canSetShoppingCartNumber,proto3" json:"canSetShoppingCartNumber,omitempty"` + IsBeyondMaxLimit bool `protobuf:"varint,5,opt,name=isBeyondMaxLimit,proto3" json:"isBeyondMaxLimit,omitempty"` + ID int32 `protobuf:"varint,6,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *UpdateCartResp) Reset() { + *x = UpdateCartResp{} + if protoimpl.UnsafeEnabled { + mi := &file_trade_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCartResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCartResp) ProtoMessage() {} + +func (x *UpdateCartResp) ProtoReflect() protoreflect.Message { + mi := &file_trade_proto_msgTypes[6] + 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 UpdateCartResp.ProtoReflect.Descriptor instead. +func (*UpdateCartResp) Descriptor() ([]byte, []int) { + return file_trade_proto_rawDescGZIP(), []int{6} +} + +func (x *UpdateCartResp) GetShoppingCartNumber() int64 { + if x != nil { + return x.ShoppingCartNumber + } + return 0 +} + +func (x *UpdateCartResp) GetCanSetShoppingCartNumber() int64 { + if x != nil { + return x.CanSetShoppingCartNumber + } + return 0 +} + +func (x *UpdateCartResp) GetIsBeyondMaxLimit() bool { + if x != nil { + return x.IsBeyondMaxLimit + } + return false +} + +func (x *UpdateCartResp) GetID() int32 { + if x != nil { + return x.ID + } + return 0 +} + +type FindCartReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId int32 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"` + IsDeleted bool `protobuf:"varint,3,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` +} + +func (x *FindCartReq) Reset() { + *x = FindCartReq{} + if protoimpl.UnsafeEnabled { + mi := &file_trade_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindCartReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindCartReq) ProtoMessage() {} + +func (x *FindCartReq) ProtoReflect() protoreflect.Message { + mi := &file_trade_proto_msgTypes[7] + 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 FindCartReq.ProtoReflect.Descriptor instead. +func (*FindCartReq) Descriptor() ([]byte, []int) { + return file_trade_proto_rawDescGZIP(), []int{7} +} + +func (x *FindCartReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *FindCartReq) GetUserId() int32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *FindCartReq) GetIsDeleted() bool { + if x != nil { + return x.IsDeleted + } + return false +} + +type FindCartResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShoppingCarts []*ShoppingCart `protobuf:"bytes,1,rep,name=shoppingCarts,proto3" json:"shoppingCarts,omitempty"` +} + +func (x *FindCartResp) Reset() { + *x = FindCartResp{} + if protoimpl.UnsafeEnabled { + mi := &file_trade_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindCartResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindCartResp) ProtoMessage() {} + +func (x *FindCartResp) ProtoReflect() protoreflect.Message { + mi := &file_trade_proto_msgTypes[8] + 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 FindCartResp.ProtoReflect.Descriptor instead. +func (*FindCartResp) Descriptor() ([]byte, []int) { + return file_trade_proto_rawDescGZIP(), []int{8} +} + +func (x *FindCartResp) GetShoppingCarts() []*ShoppingCart { + if x != nil { + return x.ShoppingCarts + } + return nil +} + type Product struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -478,7 +930,7 @@ type Product struct { func (x *Product) Reset() { *x = Product{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[4] + mi := &file_trade_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -491,7 +943,7 @@ func (x *Product) String() string { func (*Product) ProtoMessage() {} func (x *Product) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[4] + mi := &file_trade_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -504,7 +956,7 @@ func (x *Product) ProtoReflect() protoreflect.Message { // Deprecated: Use Product.ProtoReflect.Descriptor instead. func (*Product) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{4} + return file_trade_proto_rawDescGZIP(), []int{9} } func (x *Product) GetId() int32 { @@ -583,7 +1035,7 @@ type PageReq struct { func (x *PageReq) Reset() { *x = PageReq{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[5] + mi := &file_trade_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -596,7 +1048,7 @@ func (x *PageReq) String() string { func (*PageReq) ProtoMessage() {} func (x *PageReq) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[5] + mi := &file_trade_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -609,7 +1061,7 @@ func (x *PageReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PageReq.ProtoReflect.Descriptor instead. func (*PageReq) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{5} + return file_trade_proto_rawDescGZIP(), []int{10} } func (x *PageReq) GetLength() int32 { @@ -640,7 +1092,7 @@ type PageResp struct { func (x *PageResp) Reset() { *x = PageResp{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[6] + mi := &file_trade_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -653,7 +1105,7 @@ func (x *PageResp) String() string { func (*PageResp) ProtoMessage() {} func (x *PageResp) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[6] + mi := &file_trade_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -666,7 +1118,7 @@ func (x *PageResp) ProtoReflect() protoreflect.Message { // Deprecated: Use PageResp.ProtoReflect.Descriptor instead. func (*PageResp) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{6} + return file_trade_proto_rawDescGZIP(), []int{11} } func (x *PageResp) GetProduct() []*Product { @@ -737,7 +1189,7 @@ type ProductDetail struct { func (x *ProductDetail) Reset() { *x = ProductDetail{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[7] + mi := &file_trade_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -750,7 +1202,7 @@ func (x *ProductDetail) String() string { func (*ProductDetail) ProtoMessage() {} func (x *ProductDetail) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[7] + mi := &file_trade_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -763,7 +1215,7 @@ func (x *ProductDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetail.ProtoReflect.Descriptor instead. func (*ProductDetail) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{7} + return file_trade_proto_rawDescGZIP(), []int{12} } func (x *ProductDetail) GetId() int32 { @@ -904,7 +1356,7 @@ type ProductDetailReq struct { func (x *ProductDetailReq) Reset() { *x = ProductDetailReq{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[8] + mi := &file_trade_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -917,7 +1369,7 @@ func (x *ProductDetailReq) String() string { func (*ProductDetailReq) ProtoMessage() {} func (x *ProductDetailReq) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[8] + mi := &file_trade_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -930,7 +1382,7 @@ func (x *ProductDetailReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetailReq.ProtoReflect.Descriptor instead. func (*ProductDetailReq) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{8} + return file_trade_proto_rawDescGZIP(), []int{13} } func (x *ProductDetailReq) GetId() int32 { @@ -952,7 +1404,7 @@ type ProductDetailResp struct { func (x *ProductDetailResp) Reset() { *x = ProductDetailResp{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[9] + mi := &file_trade_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -965,7 +1417,7 @@ func (x *ProductDetailResp) String() string { func (*ProductDetailResp) ProtoMessage() {} func (x *ProductDetailResp) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[9] + mi := &file_trade_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -978,7 +1430,7 @@ func (x *ProductDetailResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductDetailResp.ProtoReflect.Descriptor instead. func (*ProductDetailResp) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{9} + return file_trade_proto_rawDescGZIP(), []int{14} } func (x *ProductDetailResp) GetProductDetail() []*ProductDetail { @@ -1008,7 +1460,7 @@ type ProductSku struct { func (x *ProductSku) Reset() { *x = ProductSku{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[10] + mi := &file_trade_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1021,7 +1473,7 @@ func (x *ProductSku) String() string { func (*ProductSku) ProtoMessage() {} func (x *ProductSku) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[10] + mi := &file_trade_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1034,7 +1486,7 @@ func (x *ProductSku) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSku.ProtoReflect.Descriptor instead. func (*ProductSku) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{10} + return file_trade_proto_rawDescGZIP(), []int{15} } func (x *ProductSku) GetSkuId() int32 { @@ -1084,7 +1536,7 @@ type ProductSkuReq struct { func (x *ProductSkuReq) Reset() { *x = ProductSkuReq{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[11] + mi := &file_trade_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1097,7 +1549,7 @@ func (x *ProductSkuReq) String() string { func (*ProductSkuReq) ProtoMessage() {} func (x *ProductSkuReq) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[11] + mi := &file_trade_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1110,7 +1562,7 @@ func (x *ProductSkuReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSkuReq.ProtoReflect.Descriptor instead. func (*ProductSkuReq) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{11} + return file_trade_proto_rawDescGZIP(), []int{16} } func (x *ProductSkuReq) GetProductId() int32 { @@ -1132,7 +1584,7 @@ type ProductSkuResp struct { func (x *ProductSkuResp) Reset() { *x = ProductSkuResp{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[12] + mi := &file_trade_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1145,7 +1597,7 @@ func (x *ProductSkuResp) String() string { func (*ProductSkuResp) ProtoMessage() {} func (x *ProductSkuResp) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[12] + mi := &file_trade_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1158,7 +1610,7 @@ func (x *ProductSkuResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ProductSkuResp.ProtoReflect.Descriptor instead. func (*ProductSkuResp) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{12} + return file_trade_proto_rawDescGZIP(), []int{17} } func (x *ProductSkuResp) GetProductSku() []*ProductSku { @@ -1180,7 +1632,7 @@ type TokenReq struct { func (x *TokenReq) Reset() { *x = TokenReq{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[13] + mi := &file_trade_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1193,7 +1645,7 @@ func (x *TokenReq) String() string { func (*TokenReq) ProtoMessage() {} func (x *TokenReq) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[13] + mi := &file_trade_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1206,7 +1658,7 @@ func (x *TokenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenReq.ProtoReflect.Descriptor instead. func (*TokenReq) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{13} + return file_trade_proto_rawDescGZIP(), []int{18} } func (x *TokenReq) GetUuid() string { @@ -1229,7 +1681,7 @@ type TokenResp struct { func (x *TokenResp) Reset() { *x = TokenResp{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[14] + mi := &file_trade_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1242,7 +1694,7 @@ func (x *TokenResp) String() string { func (*TokenResp) ProtoMessage() {} func (x *TokenResp) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[14] + mi := &file_trade_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1255,7 +1707,7 @@ func (x *TokenResp) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenResp.ProtoReflect.Descriptor instead. func (*TokenResp) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{14} + return file_trade_proto_rawDescGZIP(), []int{19} } func (x *TokenResp) GetToken() string { @@ -1284,7 +1736,7 @@ type UpdateSkuReq struct { func (x *UpdateSkuReq) Reset() { *x = UpdateSkuReq{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[15] + mi := &file_trade_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1297,7 +1749,7 @@ func (x *UpdateSkuReq) String() string { func (*UpdateSkuReq) ProtoMessage() {} func (x *UpdateSkuReq) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[15] + mi := &file_trade_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1310,7 +1762,7 @@ func (x *UpdateSkuReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSkuReq.ProtoReflect.Descriptor instead. func (*UpdateSkuReq) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{15} + return file_trade_proto_rawDescGZIP(), []int{20} } func (x *UpdateSkuReq) GetProductSku() *ProductSku { @@ -1331,7 +1783,7 @@ type UpdateSkuResp struct { func (x *UpdateSkuResp) Reset() { *x = UpdateSkuResp{} if protoimpl.UnsafeEnabled { - mi := &file_trade_proto_msgTypes[16] + mi := &file_trade_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1344,7 +1796,7 @@ func (x *UpdateSkuResp) String() string { func (*UpdateSkuResp) ProtoMessage() {} func (x *UpdateSkuResp) ProtoReflect() protoreflect.Message { - mi := &file_trade_proto_msgTypes[16] + mi := &file_trade_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1357,7 +1809,7 @@ func (x *UpdateSkuResp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSkuResp.ProtoReflect.Descriptor instead. func (*UpdateSkuResp) Descriptor() ([]byte, []int) { - return file_trade_proto_rawDescGZIP(), []int{16} + return file_trade_proto_rawDescGZIP(), []int{21} } func (x *UpdateSkuResp) GetIsSuccess() bool { @@ -1444,154 +1896,233 @@ var file_trade_proto_rawDesc = []byte{ 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x72, 0x65, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x61, - 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xec, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x3b, 0x0a, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x07, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x5e, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0xbf, 0x04, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, - 0x6f, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, - 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, - 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, - 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, - 0x61, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, - 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x69, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, - 0x11, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x9c, - 0x01, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6b, - 0x75, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, - 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, - 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x73, 0x65, - 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, - 0x0d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0e, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, - 0x75, 0x22, 0x1e, 0x0a, 0x08, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x22, 0x3b, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x41, - 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x31, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, - 0x75, 0x22, 0x2d, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x32, 0x55, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x12, 0x44, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, - 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x5b, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x10, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x32, 0x31, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x04, - 0x50, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x5d, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x48, 0x0a, 0x11, - 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x51, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x3f, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, + 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfe, 0x02, 0x0a, 0x0c, 0x53, 0x68, 0x6f, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, + 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xff, 0x02, 0x0a, 0x0d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, + 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, + 0x6b, 0x75, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x50, + 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x0e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, + 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, + 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, + 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x18, 0x63, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, + 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x73, 0x42, + 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x42, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x4d, 0x61, 0x78, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x44, 0x22, 0x53, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x0c, 0x46, 0x69, + 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0d, 0x73, 0x68, + 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x43, 0x61, 0x72, 0x74, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x43, 0x61, 0x72, 0x74, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, + 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, + 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x07, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x5e, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x28, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0xbf, 0x04, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x63, + 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, + 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x69, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, + 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x72, 0x65, 0x61, 0x50, 0x6f, 0x73, 0x74, + 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x42, 0x75, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, + 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, + 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, + 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, + 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x69, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x11, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x9c, 0x01, 0x0a, + 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x6b, 0x75, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6b, 0x75, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x6c, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x6c, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, 0x0d, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x22, + 0x1e, 0x0a, 0x08, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, + 0x3b, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x41, 0x0a, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x53, 0x6b, 0x75, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x22, + 0x2d, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x32, 0x55, + 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x44, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x5b, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x10, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, + 0x64, 0x64, 0x54, 0x72, 0x61, 0x64, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x32, 0x49, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, + 0x12, 0x3b, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x12, 0x14, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x41, 0x0a, + 0x08, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x46, 0x69, 0x6e, + 0x64, 0x43, 0x61, 0x72, 0x74, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x32, 0x31, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, + 0x12, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x32, 0x5d, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x48, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x32, 0x51, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x53, 0x6b, 0x75, 0x12, 0x3f, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x52, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x53, 0x6b, 0x75, 0x12, 0x41, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x53, 0x6b, 0x75, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x52, 0x0a, 0x0d, 0x53, 0x68, 0x6f, - 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x6b, 0x75, 0x12, 0x41, 0x0a, 0x0d, 0x53, 0x68, - 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x6b, 0x75, 0x12, 0x17, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x43, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x32, 0x45, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, - 0x38, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, - 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x3b, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x6b, 0x75, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x32, 0x45, + 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x38, 0x0a, 0x09, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x75, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1606,57 +2137,67 @@ func file_trade_proto_rawDescGZIP() []byte { return file_trade_proto_rawDescData } -var file_trade_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_trade_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_trade_proto_goTypes = []interface{}{ (*TradeOrder)(nil), // 0: proto.TradeOrder (*AddTradeOrderReq)(nil), // 1: proto.AddTradeOrderReq (*AddTradeOrderResp)(nil), // 2: proto.AddTradeOrderResp (*ProductOrder)(nil), // 3: proto.ProductOrder - (*Product)(nil), // 4: proto.Product - (*PageReq)(nil), // 5: proto.PageReq - (*PageResp)(nil), // 6: proto.PageResp - (*ProductDetail)(nil), // 7: proto.ProductDetail - (*ProductDetailReq)(nil), // 8: proto.ProductDetailReq - (*ProductDetailResp)(nil), // 9: proto.ProductDetailResp - (*ProductSku)(nil), // 10: proto.ProductSku - (*ProductSkuReq)(nil), // 11: proto.ProductSkuReq - (*ProductSkuResp)(nil), // 12: proto.ProductSkuResp - (*TokenReq)(nil), // 13: proto.TokenReq - (*TokenResp)(nil), // 14: proto.TokenResp - (*UpdateSkuReq)(nil), // 15: proto.UpdateSkuReq - (*UpdateSkuResp)(nil), // 16: proto.UpdateSkuResp - nil, // 17: proto.Product.LabelListEntry + (*ShoppingCart)(nil), // 4: proto.ShoppingCart + (*UpdateCartReq)(nil), // 5: proto.UpdateCartReq + (*UpdateCartResp)(nil), // 6: proto.UpdateCartResp + (*FindCartReq)(nil), // 7: proto.FindCartReq + (*FindCartResp)(nil), // 8: proto.FindCartResp + (*Product)(nil), // 9: proto.Product + (*PageReq)(nil), // 10: proto.PageReq + (*PageResp)(nil), // 11: proto.PageResp + (*ProductDetail)(nil), // 12: proto.ProductDetail + (*ProductDetailReq)(nil), // 13: proto.ProductDetailReq + (*ProductDetailResp)(nil), // 14: proto.ProductDetailResp + (*ProductSku)(nil), // 15: proto.ProductSku + (*ProductSkuReq)(nil), // 16: proto.ProductSkuReq + (*ProductSkuResp)(nil), // 17: proto.ProductSkuResp + (*TokenReq)(nil), // 18: proto.TokenReq + (*TokenResp)(nil), // 19: proto.TokenResp + (*UpdateSkuReq)(nil), // 20: proto.UpdateSkuReq + (*UpdateSkuResp)(nil), // 21: proto.UpdateSkuResp + nil, // 22: proto.Product.LabelListEntry } var file_trade_proto_depIdxs = []int32{ 0, // 0: proto.AddTradeOrderReq.tradeOrder:type_name -> proto.TradeOrder 0, // 1: proto.AddTradeOrderResp.tradeOrder:type_name -> proto.TradeOrder 3, // 2: proto.AddTradeOrderResp.products:type_name -> proto.ProductOrder - 17, // 3: proto.Product.labelList:type_name -> proto.Product.LabelListEntry - 4, // 4: proto.PageResp.product:type_name -> proto.Product - 7, // 5: proto.ProductDetailResp.productDetail:type_name -> proto.ProductDetail - 10, // 6: proto.ProductSkuResp.productSku:type_name -> proto.ProductSku - 10, // 7: proto.UpdateSkuReq.productSku:type_name -> proto.ProductSku - 1, // 8: proto.AddTradeOrder.AddTradeOrder:input_type -> proto.AddTradeOrderReq - 1, // 9: proto.UpdateTradeOrder.UpdateTradeOrder:input_type -> proto.AddTradeOrderReq - 5, // 10: proto.Page.Page:input_type -> proto.PageReq - 8, // 11: proto.ShowProductDetail.ShowProductDetail:input_type -> proto.ProductDetailReq - 11, // 12: proto.ShowProductSku.ShowProductSku:input_type -> proto.ProductSkuReq - 8, // 13: proto.ShowDetailSku.ShowDetailSku:input_type -> proto.ProductDetailReq - 13, // 14: proto.GetUserToken.GetUserToken:input_type -> proto.TokenReq - 15, // 15: proto.UpdateSku.UpdateSku:input_type -> proto.UpdateSkuReq - 2, // 16: proto.AddTradeOrder.AddTradeOrder:output_type -> proto.AddTradeOrderResp - 2, // 17: proto.UpdateTradeOrder.UpdateTradeOrder:output_type -> proto.AddTradeOrderResp - 6, // 18: proto.Page.Page:output_type -> proto.PageResp - 9, // 19: proto.ShowProductDetail.ShowProductDetail:output_type -> proto.ProductDetailResp - 12, // 20: proto.ShowProductSku.ShowProductSku:output_type -> proto.ProductSkuResp - 12, // 21: proto.ShowDetailSku.ShowDetailSku:output_type -> proto.ProductSkuResp - 14, // 22: proto.GetUserToken.GetUserToken:output_type -> proto.TokenResp - 16, // 23: proto.UpdateSku.UpdateSku:output_type -> proto.UpdateSkuResp - 16, // [16:24] is the sub-list for method output_type - 8, // [8:16] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 4, // 3: proto.FindCartResp.shoppingCarts:type_name -> proto.ShoppingCart + 22, // 4: proto.Product.labelList:type_name -> proto.Product.LabelListEntry + 9, // 5: proto.PageResp.product:type_name -> proto.Product + 12, // 6: proto.ProductDetailResp.productDetail:type_name -> proto.ProductDetail + 15, // 7: proto.ProductSkuResp.productSku:type_name -> proto.ProductSku + 15, // 8: proto.UpdateSkuReq.productSku:type_name -> proto.ProductSku + 1, // 9: proto.AddTradeOrder.AddTradeOrder:input_type -> proto.AddTradeOrderReq + 1, // 10: proto.UpdateTradeOrder.UpdateTradeOrder:input_type -> proto.AddTradeOrderReq + 5, // 11: proto.UpdateCart.UpdateCart:input_type -> proto.UpdateCartReq + 7, // 12: proto.FindCart.FindCart:input_type -> proto.FindCartReq + 10, // 13: proto.Page.Page:input_type -> proto.PageReq + 13, // 14: proto.ShowProductDetail.ShowProductDetail:input_type -> proto.ProductDetailReq + 16, // 15: proto.ShowProductSku.ShowProductSku:input_type -> proto.ProductSkuReq + 13, // 16: proto.ShowDetailSku.ShowDetailSku:input_type -> proto.ProductDetailReq + 18, // 17: proto.GetUserToken.GetUserToken:input_type -> proto.TokenReq + 20, // 18: proto.UpdateSku.UpdateSku:input_type -> proto.UpdateSkuReq + 2, // 19: proto.AddTradeOrder.AddTradeOrder:output_type -> proto.AddTradeOrderResp + 2, // 20: proto.UpdateTradeOrder.UpdateTradeOrder:output_type -> proto.AddTradeOrderResp + 6, // 21: proto.UpdateCart.UpdateCart:output_type -> proto.UpdateCartResp + 8, // 22: proto.FindCart.FindCart:output_type -> proto.FindCartResp + 11, // 23: proto.Page.Page:output_type -> proto.PageResp + 14, // 24: proto.ShowProductDetail.ShowProductDetail:output_type -> proto.ProductDetailResp + 17, // 25: proto.ShowProductSku.ShowProductSku:output_type -> proto.ProductSkuResp + 17, // 26: proto.ShowDetailSku.ShowDetailSku:output_type -> proto.ProductSkuResp + 19, // 27: proto.GetUserToken.GetUserToken:output_type -> proto.TokenResp + 21, // 28: proto.UpdateSku.UpdateSku:output_type -> proto.UpdateSkuResp + 19, // [19:29] is the sub-list for method output_type + 9, // [9:19] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_trade_proto_init() } @@ -1714,7 +2255,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Product); i { + switch v := v.(*ShoppingCart); i { case 0: return &v.state case 1: @@ -1726,7 +2267,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageReq); i { + switch v := v.(*UpdateCartReq); i { case 0: return &v.state case 1: @@ -1738,7 +2279,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageResp); i { + switch v := v.(*UpdateCartResp); i { case 0: return &v.state case 1: @@ -1750,7 +2291,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetail); i { + switch v := v.(*FindCartReq); i { case 0: return &v.state case 1: @@ -1762,7 +2303,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetailReq); i { + switch v := v.(*FindCartResp); i { case 0: return &v.state case 1: @@ -1774,7 +2315,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductDetailResp); i { + switch v := v.(*Product); i { case 0: return &v.state case 1: @@ -1786,7 +2327,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSku); i { + switch v := v.(*PageReq); i { case 0: return &v.state case 1: @@ -1798,7 +2339,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSkuReq); i { + switch v := v.(*PageResp); i { case 0: return &v.state case 1: @@ -1810,7 +2351,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProductSkuResp); i { + switch v := v.(*ProductDetail); i { case 0: return &v.state case 1: @@ -1822,7 +2363,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenReq); i { + switch v := v.(*ProductDetailReq); i { case 0: return &v.state case 1: @@ -1834,7 +2375,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenResp); i { + switch v := v.(*ProductDetailResp); i { case 0: return &v.state case 1: @@ -1846,7 +2387,7 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateSkuReq); i { + switch v := v.(*ProductSku); i { case 0: return &v.state case 1: @@ -1858,6 +2399,66 @@ func file_trade_proto_init() { } } file_trade_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProductSkuReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_trade_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProductSkuResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_trade_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_trade_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_trade_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateSkuReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_trade_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSkuResp); i { case 0: return &v.state @@ -1876,9 +2477,9 @@ func file_trade_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_trade_proto_rawDesc, NumEnums: 0, - NumMessages: 18, + NumMessages: 23, NumExtensions: 0, - NumServices: 8, + NumServices: 10, }, GoTypes: file_trade_proto_goTypes, DependencyIndexes: file_trade_proto_depIdxs, @@ -2046,6 +2647,152 @@ var _UpdateTradeOrder_serviceDesc = grpc.ServiceDesc{ Metadata: "trade.proto", } +// UpdateCartClient is the client API for UpdateCart service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type UpdateCartClient interface { + // rpc 服务 + UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...grpc.CallOption) (*UpdateCartResp, error) +} + +type updateCartClient struct { + cc grpc.ClientConnInterface +} + +func NewUpdateCartClient(cc grpc.ClientConnInterface) UpdateCartClient { + return &updateCartClient{cc} +} + +func (c *updateCartClient) UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...grpc.CallOption) (*UpdateCartResp, error) { + out := new(UpdateCartResp) + err := c.cc.Invoke(ctx, "/proto.UpdateCart/UpdateCart", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// UpdateCartServer is the server API for UpdateCart service. +type UpdateCartServer interface { + // rpc 服务 + UpdateCart(context.Context, *UpdateCartReq) (*UpdateCartResp, error) +} + +// UnimplementedUpdateCartServer can be embedded to have forward compatible implementations. +type UnimplementedUpdateCartServer struct { +} + +func (*UnimplementedUpdateCartServer) UpdateCart(context.Context, *UpdateCartReq) (*UpdateCartResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateCart not implemented") +} + +func RegisterUpdateCartServer(s *grpc.Server, srv UpdateCartServer) { + s.RegisterService(&_UpdateCart_serviceDesc, srv) +} + +func _UpdateCart_UpdateCart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateCartReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UpdateCartServer).UpdateCart(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.UpdateCart/UpdateCart", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UpdateCartServer).UpdateCart(ctx, req.(*UpdateCartReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _UpdateCart_serviceDesc = grpc.ServiceDesc{ + ServiceName: "proto.UpdateCart", + HandlerType: (*UpdateCartServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateCart", + Handler: _UpdateCart_UpdateCart_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "trade.proto", +} + +// FindCartClient is the client API for FindCart service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type FindCartClient interface { + FindCart(ctx context.Context, in *FindCartReq, opts ...grpc.CallOption) (*FindCartResp, error) +} + +type findCartClient struct { + cc grpc.ClientConnInterface +} + +func NewFindCartClient(cc grpc.ClientConnInterface) FindCartClient { + return &findCartClient{cc} +} + +func (c *findCartClient) FindCart(ctx context.Context, in *FindCartReq, opts ...grpc.CallOption) (*FindCartResp, error) { + out := new(FindCartResp) + err := c.cc.Invoke(ctx, "/proto.FindCart/FindCart", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// FindCartServer is the server API for FindCart service. +type FindCartServer interface { + FindCart(context.Context, *FindCartReq) (*FindCartResp, error) +} + +// UnimplementedFindCartServer can be embedded to have forward compatible implementations. +type UnimplementedFindCartServer struct { +} + +func (*UnimplementedFindCartServer) FindCart(context.Context, *FindCartReq) (*FindCartResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindCart not implemented") +} + +func RegisterFindCartServer(s *grpc.Server, srv FindCartServer) { + s.RegisterService(&_FindCart_serviceDesc, srv) +} + +func _FindCart_FindCart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindCartReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FindCartServer).FindCart(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.FindCart/FindCart", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FindCartServer).FindCart(ctx, req.(*FindCartReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _FindCart_serviceDesc = grpc.ServiceDesc{ + ServiceName: "proto.FindCart", + HandlerType: (*FindCartServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FindCart", + Handler: _FindCart_FindCart_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "trade.proto", +} + // PageClient is the client API for Page service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. diff --git a/trade-order/proto/trade.pb.micro.go b/trade-order/proto/trade.pb.micro.go index 37cad26..1a386e9 100644 --- a/trade-order/proto/trade.pb.micro.go +++ b/trade-order/proto/trade.pb.micro.go @@ -149,6 +149,126 @@ func (h *updateTradeOrderHandler) UpdateTradeOrder(ctx context.Context, in *AddT return h.UpdateTradeOrderHandler.UpdateTradeOrder(ctx, in, out) } +// Api Endpoints for UpdateCart service + +func NewUpdateCartEndpoints() []*api.Endpoint { + return []*api.Endpoint{} +} + +// Client API for UpdateCart service + +type UpdateCartService interface { + // rpc 服务 + UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...client.CallOption) (*UpdateCartResp, error) +} + +type updateCartService struct { + c client.Client + name string +} + +func NewUpdateCartService(name string, c client.Client) UpdateCartService { + return &updateCartService{ + c: c, + name: name, + } +} + +func (c *updateCartService) UpdateCart(ctx context.Context, in *UpdateCartReq, opts ...client.CallOption) (*UpdateCartResp, error) { + req := c.c.NewRequest(c.name, "UpdateCart.UpdateCart", in) + out := new(UpdateCartResp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for UpdateCart service + +type UpdateCartHandler interface { + // rpc 服务 + UpdateCart(context.Context, *UpdateCartReq, *UpdateCartResp) error +} + +func RegisterUpdateCartHandler(s server.Server, hdlr UpdateCartHandler, opts ...server.HandlerOption) error { + type updateCart interface { + UpdateCart(ctx context.Context, in *UpdateCartReq, out *UpdateCartResp) error + } + type UpdateCart struct { + updateCart + } + h := &updateCartHandler{hdlr} + return s.Handle(s.NewHandler(&UpdateCart{h}, opts...)) +} + +type updateCartHandler struct { + UpdateCartHandler +} + +func (h *updateCartHandler) UpdateCart(ctx context.Context, in *UpdateCartReq, out *UpdateCartResp) error { + return h.UpdateCartHandler.UpdateCart(ctx, in, out) +} + +// Api Endpoints for FindCart service + +func NewFindCartEndpoints() []*api.Endpoint { + return []*api.Endpoint{} +} + +// Client API for FindCart service + +type FindCartService interface { + FindCart(ctx context.Context, in *FindCartReq, opts ...client.CallOption) (*FindCartResp, error) +} + +type findCartService struct { + c client.Client + name string +} + +func NewFindCartService(name string, c client.Client) FindCartService { + return &findCartService{ + c: c, + name: name, + } +} + +func (c *findCartService) FindCart(ctx context.Context, in *FindCartReq, opts ...client.CallOption) (*FindCartResp, error) { + req := c.c.NewRequest(c.name, "FindCart.FindCart", in) + out := new(FindCartResp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for FindCart service + +type FindCartHandler interface { + FindCart(context.Context, *FindCartReq, *FindCartResp) error +} + +func RegisterFindCartHandler(s server.Server, hdlr FindCartHandler, opts ...server.HandlerOption) error { + type findCart interface { + FindCart(ctx context.Context, in *FindCartReq, out *FindCartResp) error + } + type FindCart struct { + findCart + } + h := &findCartHandler{hdlr} + return s.Handle(s.NewHandler(&FindCart{h}, opts...)) +} + +type findCartHandler struct { + FindCartHandler +} + +func (h *findCartHandler) FindCart(ctx context.Context, in *FindCartReq, out *FindCartResp) error { + return h.FindCartHandler.FindCart(ctx, in, out) +} + // Api Endpoints for Page service func NewPageEndpoints() []*api.Endpoint { diff --git a/trade-order/proto/trade.proto b/trade-order/proto/trade.proto index 629036e..b95bd09 100644 --- a/trade-order/proto/trade.proto +++ b/trade-order/proto/trade.proto @@ -88,13 +88,64 @@ service AddTradeOrder { //rpc 服务 rpc AddTradeOrder (AddTradeOrderReq) returns (AddTradeOrderResp){} } - service UpdateTradeOrder { //rpc 服务 rpc UpdateTradeOrder (AddTradeOrderReq) returns (AddTradeOrderResp){} } +message ShoppingCart { + int32 id = 1; + int32 userId = 2; + int32 productId =3; + int32 productSkuId = 4; + string productName = 5; + string productMainPicture = 6; + int32 number = 7; + //查询修改所需 + string updateTime =8; + string crateTime = 9; + int32 createUser = 10; + int32 updateUser = 11; + bool isDeleted = 12; +} + +message UpdateCartReq { + int32 number = 1; + int32 productId = 2; + int32 productSkuId =3; + string productName = 4; + string productMainPicture = 5; + int32 userId =6; + int32 id = 7; + string updateTime =8; + string crateTime = 9; + int32 createUser = 10; + int32 updateUser = 11; + bool isDeleted = 12; +} +message UpdateCartResp { + int64 shoppingCartNumber = 3; + int64 canSetShoppingCartNumber = 4; + bool isBeyondMaxLimit = 5; + int32 ID = 6; +} +service UpdateCart { + //rpc 服务 + rpc UpdateCart (UpdateCartReq) returns (UpdateCartResp){} +} +message FindCartReq { + int32 id = 1; + int32 userId = 2; + bool isDeleted = 3; +} +message FindCartResp { + repeated ShoppingCart shoppingCarts = 1; +} +//查询购物车 +service FindCart { + rpc FindCart (FindCartReq) returns (FindCartResp){} +} message Product { int32 id = 1; string name = 2;