增加套餐相关代码

This commit is contained in:
刘祥超
2021-10-29 14:02:49 +08:00
parent 81a17aaad9
commit f90c8db556
9 changed files with 3093 additions and 0 deletions

247
pkg/rpc/pb/model_plan.pb.go Normal file
View File

@@ -0,0 +1,247 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.12.3
// source: models/model_plan.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type Plan struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
IsOn bool `protobuf:"varint,2,opt,name=isOn,proto3" json:"isOn,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
ClusterId int64 `protobuf:"varint,4,opt,name=clusterId,proto3" json:"clusterId,omitempty"`
BandwidthLimitJSON []byte `protobuf:"bytes,5,opt,name=bandwidthLimitJSON,proto3" json:"bandwidthLimitJSON,omitempty"`
FeaturesJSON []byte `protobuf:"bytes,6,opt,name=featuresJSON,proto3" json:"featuresJSON,omitempty"`
PriceType string `protobuf:"bytes,7,opt,name=priceType,proto3" json:"priceType,omitempty"`
BandwidthPriceJSON []byte `protobuf:"bytes,8,opt,name=bandwidthPriceJSON,proto3" json:"bandwidthPriceJSON,omitempty"`
MonthlyPrice float32 `protobuf:"fixed32,9,opt,name=monthlyPrice,proto3" json:"monthlyPrice,omitempty"`
SeasonallyPrice float32 `protobuf:"fixed32,10,opt,name=seasonallyPrice,proto3" json:"seasonallyPrice,omitempty"`
YearlyPrice float32 `protobuf:"fixed32,11,opt,name=yearlyPrice,proto3" json:"yearlyPrice,omitempty"`
}
func (x *Plan) Reset() {
*x = Plan{}
if protoimpl.UnsafeEnabled {
mi := &file_models_model_plan_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Plan) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Plan) ProtoMessage() {}
func (x *Plan) ProtoReflect() protoreflect.Message {
mi := &file_models_model_plan_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Plan.ProtoReflect.Descriptor instead.
func (*Plan) Descriptor() ([]byte, []int) {
return file_models_model_plan_proto_rawDescGZIP(), []int{0}
}
func (x *Plan) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *Plan) GetIsOn() bool {
if x != nil {
return x.IsOn
}
return false
}
func (x *Plan) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Plan) GetClusterId() int64 {
if x != nil {
return x.ClusterId
}
return 0
}
func (x *Plan) GetBandwidthLimitJSON() []byte {
if x != nil {
return x.BandwidthLimitJSON
}
return nil
}
func (x *Plan) GetFeaturesJSON() []byte {
if x != nil {
return x.FeaturesJSON
}
return nil
}
func (x *Plan) GetPriceType() string {
if x != nil {
return x.PriceType
}
return ""
}
func (x *Plan) GetBandwidthPriceJSON() []byte {
if x != nil {
return x.BandwidthPriceJSON
}
return nil
}
func (x *Plan) GetMonthlyPrice() float32 {
if x != nil {
return x.MonthlyPrice
}
return 0
}
func (x *Plan) GetSeasonallyPrice() float32 {
if x != nil {
return x.SeasonallyPrice
}
return 0
}
func (x *Plan) GetYearlyPrice() float32 {
if x != nil {
return x.YearlyPrice
}
return 0
}
var File_models_model_plan_proto protoreflect.FileDescriptor
var file_models_model_plan_proto_rawDesc = []byte{
0x0a, 0x17, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x70,
0x6c, 0x61, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0xee, 0x02,
0x0a, 0x04, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x18, 0x02,
0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
0x03, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12,
0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x53,
0x4f, 0x4e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69,
0x64, 0x74, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x53, 0x4f, 0x4e, 0x12, 0x22, 0x0a, 0x0c,
0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x4a, 0x53, 0x4f, 0x4e,
0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e,
0x0a, 0x12, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x50, 0x72, 0x69, 0x63, 0x65,
0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x61, 0x6e, 0x64,
0x77, 0x69, 0x64, 0x74, 0x68, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4a, 0x53, 0x4f, 0x4e, 0x12, 0x22,
0x0a, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09,
0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x50, 0x72, 0x69,
0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79,
0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x73, 0x65, 0x61,
0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b,
0x79, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,
0x02, 0x52, 0x0b, 0x79, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x42, 0x06,
0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_models_model_plan_proto_rawDescOnce sync.Once
file_models_model_plan_proto_rawDescData = file_models_model_plan_proto_rawDesc
)
func file_models_model_plan_proto_rawDescGZIP() []byte {
file_models_model_plan_proto_rawDescOnce.Do(func() {
file_models_model_plan_proto_rawDescData = protoimpl.X.CompressGZIP(file_models_model_plan_proto_rawDescData)
})
return file_models_model_plan_proto_rawDescData
}
var file_models_model_plan_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_models_model_plan_proto_goTypes = []interface{}{
(*Plan)(nil), // 0: pb.Plan
}
var file_models_model_plan_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_models_model_plan_proto_init() }
func file_models_model_plan_proto_init() {
if File_models_model_plan_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_models_model_plan_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Plan); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_models_model_plan_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_models_model_plan_proto_goTypes,
DependencyIndexes: file_models_model_plan_proto_depIdxs,
MessageInfos: file_models_model_plan_proto_msgTypes,
}.Build()
File_models_model_plan_proto = out.File
file_models_model_plan_proto_rawDesc = nil
file_models_model_plan_proto_goTypes = nil
file_models_model_plan_proto_depIdxs = nil
}

View File

@@ -0,0 +1,213 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.12.3
// source: models/model_user_plan.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type UserPlan struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
UserId int64 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"`
PlanId int64 `protobuf:"varint,3,opt,name=planId,proto3" json:"planId,omitempty"`
IsOn bool `protobuf:"varint,4,opt,name=isOn,proto3" json:"isOn,omitempty"`
DayTo string `protobuf:"bytes,5,opt,name=dayTo,proto3" json:"dayTo,omitempty"`
User *User `protobuf:"bytes,30,opt,name=user,proto3" json:"user,omitempty"`
Plan *Plan `protobuf:"bytes,31,opt,name=plan,proto3" json:"plan,omitempty"`
}
func (x *UserPlan) Reset() {
*x = UserPlan{}
if protoimpl.UnsafeEnabled {
mi := &file_models_model_user_plan_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserPlan) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserPlan) ProtoMessage() {}
func (x *UserPlan) ProtoReflect() protoreflect.Message {
mi := &file_models_model_user_plan_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UserPlan.ProtoReflect.Descriptor instead.
func (*UserPlan) Descriptor() ([]byte, []int) {
return file_models_model_user_plan_proto_rawDescGZIP(), []int{0}
}
func (x *UserPlan) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *UserPlan) GetUserId() int64 {
if x != nil {
return x.UserId
}
return 0
}
func (x *UserPlan) GetPlanId() int64 {
if x != nil {
return x.PlanId
}
return 0
}
func (x *UserPlan) GetIsOn() bool {
if x != nil {
return x.IsOn
}
return false
}
func (x *UserPlan) GetDayTo() string {
if x != nil {
return x.DayTo
}
return ""
}
func (x *UserPlan) GetUser() *User {
if x != nil {
return x.User
}
return nil
}
func (x *UserPlan) GetPlan() *Plan {
if x != nil {
return x.Plan
}
return nil
}
var File_models_model_user_plan_proto protoreflect.FileDescriptor
var file_models_model_user_plan_proto_rawDesc = []byte{
0x0a, 0x1c, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02,
0x70, 0x62, 0x1a, 0x17, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6d, 0x6f, 0x64,
0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb0, 0x01, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x50, 0x6c, 0x61,
0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x61,
0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x49,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
0x04, 0x69, 0x73, 0x4f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x61, 0x79, 0x54, 0x6f, 0x18, 0x05,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x61, 0x79, 0x54, 0x6f, 0x12, 0x1c, 0x0a, 0x04, 0x75,
0x73, 0x65, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x55,
0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x04, 0x70, 0x6c, 0x61,
0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6c, 0x61,
0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_models_model_user_plan_proto_rawDescOnce sync.Once
file_models_model_user_plan_proto_rawDescData = file_models_model_user_plan_proto_rawDesc
)
func file_models_model_user_plan_proto_rawDescGZIP() []byte {
file_models_model_user_plan_proto_rawDescOnce.Do(func() {
file_models_model_user_plan_proto_rawDescData = protoimpl.X.CompressGZIP(file_models_model_user_plan_proto_rawDescData)
})
return file_models_model_user_plan_proto_rawDescData
}
var file_models_model_user_plan_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_models_model_user_plan_proto_goTypes = []interface{}{
(*UserPlan)(nil), // 0: pb.UserPlan
(*User)(nil), // 1: pb.User
(*Plan)(nil), // 2: pb.Plan
}
var file_models_model_user_plan_proto_depIdxs = []int32{
1, // 0: pb.UserPlan.user:type_name -> pb.User
2, // 1: pb.UserPlan.plan:type_name -> pb.Plan
2, // [2:2] is the sub-list for method output_type
2, // [2:2] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
}
func init() { file_models_model_user_plan_proto_init() }
func file_models_model_user_plan_proto_init() {
if File_models_model_user_plan_proto != nil {
return
}
file_models_model_user_proto_init()
file_models_model_plan_proto_init()
if !protoimpl.UnsafeEnabled {
file_models_model_user_plan_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserPlan); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_models_model_user_plan_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_models_model_user_plan_proto_goTypes,
DependencyIndexes: file_models_model_user_plan_proto_depIdxs,
MessageInfos: file_models_model_user_plan_proto_msgTypes,
}.Build()
File_models_model_user_plan_proto = out.File
file_models_model_user_plan_proto_rawDesc = nil
file_models_model_user_plan_proto_goTypes = nil
file_models_model_user_plan_proto_depIdxs = nil
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
message Plan {
int64 id = 1;
bool isOn = 2;
string name = 3;
int64 clusterId = 4;
bytes bandwidthLimitJSON = 5;
bytes featuresJSON = 6;
string priceType = 7;
bytes bandwidthPriceJSON = 8;
float monthlyPrice = 9;
float seasonallyPrice = 10;
float yearlyPrice = 11;
}

View File

@@ -0,0 +1,19 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_user.proto";
import "models/model_plan.proto";
message UserPlan {
int64 id = 1;
int64 userId = 2;
int64 planId = 3;
bool isOn = 4;
string dayTo = 5;
User user = 30;
Plan plan = 31;
}

View File

@@ -0,0 +1,97 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_plan.proto";
import "models/rpc_messages.proto";
// 套餐相关服务
service PlanService {
// 创建套餐
rpc createPlan(CreatePlanRequest) returns (CreatePlanResponse);
// 修改套餐
rpc updatePlan(UpdatePlanRequest) returns (RPCSuccess);
// 删除套餐
rpc deletePlan(DeletePlanRequest) returns (RPCSuccess);
// 查找单个套餐
rpc findEnabledPlan(FindEnabledPlanRequest) returns (FindEnabledPlanResponse);
// 计算套餐数量
rpc countAllEnabledPlans(CountAllEnabledPlansRequest) returns (RPCCountResponse);
// 列出单页套餐
rpc listEnabledPlans(ListEnabledPlansRequest) returns (ListEnabledPlansResponse);
// 对套餐进行排序
rpc sortPlans(SortPlansRequest) returns (RPCSuccess);
}
// 创建套餐
message CreatePlanRequest {
string name = 1;
int64 clusterId = 2;
bytes bandwidthLimitJSON = 3;
bytes featuresJSON = 4;
string priceType = 5;
bytes bandwidthPriceJSON = 6;
float monthlyPrice = 7;
float seasonallyPrice = 8;
float yearlyPrice = 9;
}
message CreatePlanResponse {
int64 planId = 1;
}
// 修改套餐
message UpdatePlanRequest {
int64 planId = 1;
string name = 2;
bool isOn = 3;
int64 clusterId = 4;
bytes bandwidthLimitJSON = 5;
bytes featuresJSON = 6;
string priceType = 7;
bytes bandwidthPriceJSON = 8;
float monthlyPrice = 9;
float seasonallyPrice = 10;
float yearlyPrice = 11;
}
// 删除套餐
message DeletePlanRequest {
int64 planId = 1;
}
// 查找单个套餐
message FindEnabledPlanRequest {
int64 planId = 1;
}
message FindEnabledPlanResponse {
Plan plan = 1;
}
// 计算套餐数量
message CountAllEnabledPlansRequest {
}
// 列出单页套餐
message ListEnabledPlansRequest {
int64 offset = 1;
int64 size = 2;
}
message ListEnabledPlansResponse {
repeated Plan plans = 1;
}
// 对套餐进行排序
message SortPlansRequest {
repeated int64 planIds = 1;
}

View File

@@ -0,0 +1,83 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/rpc_messages.proto";
import "models/model_user_plan.proto";
// 用户购买的套餐
service UserPlanService {
// 添加已购套餐
rpc createUserPlan(CreateUserPlanRequest) returns (CreateUserPlanResponse);
// 查找单个已购套餐信息
rpc findEnabledUserPlan(FindEnabledUserPlanRequest) returns (FindEnabledUserPlanResponse);
// 修改已购套餐
rpc updateUserPlan(UpdateUserPlanRequest) returns (RPCSuccess);
// 删除已购套餐
rpc deleteUserPlan(DeleteUserPlanRequest) returns (RPCSuccess);
// 计算已购套餐数
rpc countAllEnabledUserPlans(CountAllEnabledUserPlansRequest) returns (RPCCountResponse);
// 列出单页已购套餐
rpc listEnabledUserPlans(ListEnabledUserPlansRequest) returns (ListEnabledUserPlansResponse);
}
// 添加已购套餐
message CreateUserPlanRequest{
int64 userId = 1;
int64 planId = 2;
string dayTo = 3;
}
message CreateUserPlanResponse {
int64 userPlanId = 1;
}
// 查找单个已购套餐信息
message FindEnabledUserPlanRequest {
int64 userPlanId = 1;
}
message FindEnabledUserPlanResponse {
UserPlan userPlan = 1;
}
// 修改已购套餐
message UpdateUserPlanRequest {
int64 userPlanId = 1;
int64 planId = 2;
string dayTo = 3;
bool isOn = 4;
}
// 删除已购套餐
message DeleteUserPlanRequest {
int64 userPlanId = 1;
}
// 计算已购套餐数
message CountAllEnabledUserPlansRequest {
bool isAvailable = 1;
bool isExpired = 2;
int32 expiringDays = 3;
int64 userId = 4;
}
// 列出单页已购套餐
message ListEnabledUserPlansRequest {
bool isAvailable = 1;
bool isExpired = 2;
int32 expiringDays = 3;
int64 userId = 4;
int64 offset = 5;
int64 size = 6;
}
message ListEnabledUserPlansResponse {
repeated UserPlan userPlans = 1;
}

View File

@@ -0,0 +1,24 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package serverconfigs
type PlanPriceType = string
const (
PlanPriceTypeBandwidth PlanPriceType = "bandwidth"
PlanPriceTypePeriod PlanPriceType = "period"
)
func FindPlanPriceTypeName(priceType PlanPriceType) string {
switch priceType {
case PlanPriceTypeBandwidth:
return "带宽用量"
case PlanPriceTypePeriod:
return "时间周期"
}
return ""
}
type PlanBandwidthPrice struct {
Base float32 `yaml:"base" json:"base"` // 基础价格,单位是 元/GB
}