From 560d4e783e267bdeb22aef2912fbb135ca33df31 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 8 Nov 2024 09:14:25 +0800 Subject: [PATCH] =?UTF-8?q?db=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/dao/internal/user.go | 312 +++++++++++++++++++ db/dao/user.go | 22 ++ db/export.go | 36 --- db/gen.bat | 2 + db/gen_rpc.bat | 16 - db/model/lottery.go | 34 --- db/model/user.go | 25 ++ db/proto/lottery/lottery.pb.go | 448 ---------------------------- db/proto/lottery/lottery.proto | 28 -- db/proto/lottery/lottery_grpc.pb.go | 146 --------- db/proto/{public => }/public.proto | 0 db/proto/public/通用数据结构 | 0 db/proto/user.proto | 21 ++ db/proto/user/user.pb.go | 235 +++++++++++++++ db/proto/user/user_grpc.pb.go | 109 +++++++ db/register.go | 21 -- db/rpc/export.go | 58 ++++ db/rpc/logic/userlogic.go | 34 +++ db/rpc/server/userserver.go | 29 ++ db/rpc/svc/servicecontext.go | 97 ++++++ 20 files changed, 944 insertions(+), 729 deletions(-) create mode 100644 db/dao/internal/user.go create mode 100644 db/dao/user.go delete mode 100644 db/export.go create mode 100644 db/gen.bat delete mode 100644 db/gen_rpc.bat delete mode 100644 db/model/lottery.go create mode 100644 db/model/user.go delete mode 100644 db/proto/lottery/lottery.pb.go delete mode 100644 db/proto/lottery/lottery.proto delete mode 100644 db/proto/lottery/lottery_grpc.pb.go rename db/proto/{public => }/public.proto (100%) delete mode 100644 db/proto/public/通用数据结构 create mode 100644 db/proto/user.proto create mode 100644 db/proto/user/user.pb.go create mode 100644 db/proto/user/user_grpc.pb.go delete mode 100644 db/register.go create mode 100644 db/rpc/export.go create mode 100644 db/rpc/logic/userlogic.go create mode 100644 db/rpc/server/userserver.go create mode 100644 db/rpc/svc/servicecontext.go diff --git a/db/dao/internal/user.go b/db/dao/internal/user.go new file mode 100644 index 0000000..93d61d0 --- /dev/null +++ b/db/dao/internal/user.go @@ -0,0 +1,312 @@ +// -------------------------------------------------------------------------------------------- +// The following code is automatically generated by the mongo-dao-generator tool. +// Please do not modify this code manually to avoid being overwritten in the next generation. +// For more tool details, please click the link to view https://github.com/dobyte/mongo-dao-generator +// -------------------------------------------------------------------------------------------- + +package internal + +import ( + "context" + "errors" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + modelpkg "mongo.games.com/game/db/model" + "time" +) + +type UserFilterFunc func(cols *UserColumns) interface{} +type UserUpdateFunc func(cols *UserColumns) interface{} +type UserPipelineFunc func(cols *UserColumns) interface{} +type UserCountOptionsFunc func(cols *UserColumns) *options.CountOptions +type UserAggregateOptionsFunc func(cols *UserColumns) *options.AggregateOptions +type UserFindOneOptionsFunc func(cols *UserColumns) *options.FindOneOptions +type UserFindManyOptionsFunc func(cols *UserColumns) *options.FindOptions +type UserUpdateOptionsFunc func(cols *UserColumns) *options.UpdateOptions +type UserDeleteOptionsFunc func(cols *UserColumns) *options.DeleteOptions +type UserInsertOneOptionsFunc func(cols *UserColumns) *options.InsertOneOptions +type UserInsertManyOptionsFunc func(cols *UserColumns) *options.InsertManyOptions + +type User struct { + Columns *UserColumns + Database *mongo.Database + Collection *mongo.Collection +} + +type UserColumns struct { + ID string + Account string // 用户账号 + Password string // 用户密码 + Salt string // 密码 + Mobile string // 用户手机 + Email string // 用户邮箱 + Nickname string // 用户昵称 + Signature string // 用户签名 + Level string // 用户等级 + Experience string // 用户经验 + Coin string // 用户金币 + DeviceID string // 设备ID + RegisterIP string // 注册IP + RegisterTime string // 注册时间 + LastLoginIP string // 最近登录IP + LastLoginTime string // 最近登录时间 +} + +var userColumns = &UserColumns{ + ID: "_id", + Account: "account", // 用户账号 + Password: "password", // 用户密码 + Salt: "salt", // 密码 + Mobile: "mobile", // 用户手机 + Email: "email", // 用户邮箱 + Nickname: "nickname", // 用户昵称 + Signature: "signature", // 用户签名 + Level: "level", // 用户等级 + Experience: "experience", // 用户经验 + Coin: "coin", // 用户金币 + DeviceID: "device_id", // 设备ID + RegisterIP: "register_ip", // 注册IP + RegisterTime: "register_time", // 注册时间 + LastLoginIP: "last_login_ip", // 最近登录IP + LastLoginTime: "last_login_time", // 最近登录时间 +} + +func NewUser(db *mongo.Database) *User { + return &User{ + Columns: userColumns, + Database: db, + Collection: db.Collection("user"), + } +} + +// Count returns the number of documents in the collection. +func (dao *User) Count(ctx context.Context, filterFunc UserFilterFunc, optionsFunc ...UserCountOptionsFunc) (int64, error) { + var ( + opts *options.CountOptions + filter = filterFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.CountDocuments(ctx, filter, opts) +} + +// Aggregate executes an aggregate command against the collection and returns a cursor over the resulting documents. +func (dao *User) Aggregate(ctx context.Context, pipelineFunc UserPipelineFunc, optionsFunc ...UserAggregateOptionsFunc) (*mongo.Cursor, error) { + var ( + opts *options.AggregateOptions + pipeline = pipelineFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.Aggregate(ctx, pipeline, opts) +} + +// InsertOne executes an insert command to insert a single document into the collection. +func (dao *User) InsertOne(ctx context.Context, model *modelpkg.User, optionsFunc ...UserInsertOneOptionsFunc) (*mongo.InsertOneResult, error) { + if model == nil { + return nil, errors.New("model is nil") + } + + if err := dao.autofill(ctx, model); err != nil { + return nil, err + } + + var opts *options.InsertOneOptions + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.InsertOne(ctx, model, opts) +} + +// InsertMany executes an insert command to insert multiple documents into the collection. +func (dao *User) InsertMany(ctx context.Context, models []*modelpkg.User, optionsFunc ...UserInsertManyOptionsFunc) (*mongo.InsertManyResult, error) { + if len(models) == 0 { + return nil, errors.New("models is empty") + } + + documents := make([]interface{}, 0, len(models)) + for i := range models { + model := models[i] + if err := dao.autofill(ctx, model); err != nil { + return nil, err + } + documents = append(documents, model) + } + + var opts *options.InsertManyOptions + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.InsertMany(ctx, documents, opts) +} + +// UpdateOne executes an update command to update at most one document in the collection. +func (dao *User) UpdateOne(ctx context.Context, filterFunc UserFilterFunc, updateFunc UserUpdateFunc, optionsFunc ...UserUpdateOptionsFunc) (*mongo.UpdateResult, error) { + var ( + opts *options.UpdateOptions + filter = filterFunc(dao.Columns) + update = updateFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.UpdateOne(ctx, filter, update, opts) +} + +// UpdateOneByID executes an update command to update at most one document in the collection. +func (dao *User) UpdateOneByID(ctx context.Context, id string, updateFunc UserUpdateFunc, optionsFunc ...UserUpdateOptionsFunc) (*mongo.UpdateResult, error) { + objectID, err := primitive.ObjectIDFromHex(id) + if err != nil { + return nil, err + } + + return dao.UpdateOne(ctx, func(cols *UserColumns) interface{} { + return bson.M{"_id": objectID} + }, updateFunc, optionsFunc...) +} + +// UpdateMany executes an update command to update documents in the collection. +func (dao *User) UpdateMany(ctx context.Context, filterFunc UserFilterFunc, updateFunc UserUpdateFunc, optionsFunc ...UserUpdateOptionsFunc) (*mongo.UpdateResult, error) { + var ( + opts *options.UpdateOptions + filter = filterFunc(dao.Columns) + update = updateFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.UpdateMany(ctx, filter, update, opts) +} + +// FindOne executes a find command and returns a model for one document in the collection. +func (dao *User) FindOne(ctx context.Context, filterFunc UserFilterFunc, optionsFunc ...UserFindOneOptionsFunc) (*modelpkg.User, error) { + var ( + opts *options.FindOneOptions + model = &modelpkg.User{} + filter = filterFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + err := dao.Collection.FindOne(ctx, filter, opts).Decode(model) + if err != nil { + if err == mongo.ErrNoDocuments { + return nil, nil + } + return nil, err + } + + return model, nil +} + +// FindOneByID executes a find command and returns a model for one document in the collection. +func (dao *User) FindOneByID(ctx context.Context, id string, optionsFunc ...UserFindOneOptionsFunc) (*modelpkg.User, error) { + objectID, err := primitive.ObjectIDFromHex(id) + if err != nil { + return nil, err + } + + return dao.FindOne(ctx, func(cols *UserColumns) interface{} { + return bson.M{"_id": objectID} + }, optionsFunc...) +} + +// FindMany executes a find command and returns many models the matching documents in the collection. +func (dao *User) FindMany(ctx context.Context, filterFunc UserFilterFunc, optionsFunc ...UserFindManyOptionsFunc) ([]*modelpkg.User, error) { + var ( + opts *options.FindOptions + filter = filterFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + cur, err := dao.Collection.Find(ctx, filter, opts) + if err != nil { + return nil, err + } + + models := make([]*modelpkg.User, 0) + + if err = cur.All(ctx, &models); err != nil { + return nil, err + } + + return models, nil +} + +// DeleteOne executes a delete command to delete at most one document from the collection. +func (dao *User) DeleteOne(ctx context.Context, filterFunc UserFilterFunc, optionsFunc ...UserDeleteOptionsFunc) (*mongo.DeleteResult, error) { + var ( + opts *options.DeleteOptions + filter = filterFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.DeleteOne(ctx, filter, opts) +} + +// DeleteOneByID executes a delete command to delete at most one document from the collection. +func (dao *User) DeleteOneByID(ctx context.Context, id string, optionsFunc ...UserDeleteOptionsFunc) (*mongo.DeleteResult, error) { + objectID, err := primitive.ObjectIDFromHex(id) + if err != nil { + return nil, err + } + + return dao.DeleteOne(ctx, func(cols *UserColumns) interface{} { + return bson.M{"_id": objectID} + }, optionsFunc...) +} + +// DeleteMany executes a delete command to delete documents from the collection. +func (dao *User) DeleteMany(ctx context.Context, filterFunc UserFilterFunc, optionsFunc ...UserDeleteOptionsFunc) (*mongo.DeleteResult, error) { + var ( + opts *options.DeleteOptions + filter = filterFunc(dao.Columns) + ) + + if len(optionsFunc) > 0 { + opts = optionsFunc[0](dao.Columns) + } + + return dao.Collection.DeleteMany(ctx, filter, opts) +} + +// autofill when inserting data +func (dao *User) autofill(ctx context.Context, model *modelpkg.User) error { + if model.ID.IsZero() { + model.ID = primitive.NewObjectID() + } + + if model.RegisterTime == 0 { + model.RegisterTime = primitive.NewDateTimeFromTime(time.Now()) + } + + if model.LastLoginTime == 0 { + model.LastLoginTime = primitive.NewDateTimeFromTime(time.Now()) + } + + return nil +} diff --git a/db/dao/user.go b/db/dao/user.go new file mode 100644 index 0000000..a7757ad --- /dev/null +++ b/db/dao/user.go @@ -0,0 +1,22 @@ +package dao + +import ( + "go.mongodb.org/mongo-driver/mongo" + "mongo.games.com/game/db/dao/internal" +) + +type UserColumns = internal.UserColumns + +type User struct { + *internal.User +} + +func NewUser(db *mongo.Database, c *mongo.Collection) *User { + v := internal.NewUser(nil) + v.Database = db + v.Collection = c + panic("创建索引") + //c.Indexes().CreateOne() + //c.Indexes().CreateMany() + return &User{User: v} +} diff --git a/db/export.go b/db/export.go deleted file mode 100644 index f8466a0..0000000 --- a/db/export.go +++ /dev/null @@ -1,36 +0,0 @@ -package db - -import ( - "errors" - "net" - - "google.golang.org/grpc" - "mongo.games.com/goserver/core/logger" -) - -var GrpcServer *grpc.Server -var GrpcClientConn *grpc.ClientConn - -func RunGrpcServer() { - GrpcServer = grpc.NewServer() - registerGrpcServer() - ln, err := net.Listen("tcp", ":8899") - if err != nil { - panic(errors.New("db grpc failed to listen: " + err.Error())) - } - - err = GrpcServer.Serve(ln) - if err != nil { - panic(errors.New("db grpc failed to serve: " + err.Error())) - } - logger.Logger.Infof("db grpc start success") -} - -func NewGrpcClientConn() { - var err error - GrpcClientConn, err = grpc.NewClient("localhost:8899", grpc.WithInsecure()) - if err != nil { - panic(errors.New("db grpc failed to dial: " + err.Error())) - } - registerGrpcClient() -} diff --git a/db/gen.bat b/db/gen.bat new file mode 100644 index 0000000..7342b59 --- /dev/null +++ b/db/gen.bat @@ -0,0 +1,2 @@ +mongoctl -model-dir=./model -model-names=User -dao-dir=./dao +protoc --proto_path=./proto --go_out=../../../ --go-grpc_out=../../../ ./proto/*.proto \ No newline at end of file diff --git a/db/gen_rpc.bat b/db/gen_rpc.bat deleted file mode 100644 index 1a855f4..0000000 --- a/db/gen_rpc.bat +++ /dev/null @@ -1,16 +0,0 @@ -set work_path=%cd% -set proto_path=%work_path%\proto -set protoc=%work_path%\..\bin\protoc-3.19.4-win64\bin\protoc.exe -set protoc-gen-go-plugin-path="%work_path%\..\bin\protoc-gen-go.exe" -set protoc-gen-go-grpc-plugin-path="%work_path%\..\bin\protoc-gen-go-grpc.exe" - -rem echo %protoc3% -cd %proto_path% -for /d %%s in (,*) do ( - cd %%s - for %%b in (,*.proto) do ( - %protoc% --proto_path=%GOPATH%\src\mongo.games.com\game\db\proto --proto_path=. --plugin=protoc-gen-go=%protoc-gen-go-plugin-path% --plugin=protoc-gen-go-grpc=%protoc-gen-go-grpc-plugin-path% --go_out=%GOPATH%\src --go-grpc_out=%GOPATH%\src %%b - ) - cd .. -) -cd %work_path% \ No newline at end of file diff --git a/db/model/lottery.go b/db/model/lottery.go deleted file mode 100644 index f9b80ac..0000000 --- a/db/model/lottery.go +++ /dev/null @@ -1,34 +0,0 @@ -package model - -import ( - "context" - - "mongo.games.com/goserver/core/logger" - - "mongo.games.com/game/db/proto/lottery" -) - -// 竞技馆抽奖记录 - -type Lottery struct { - Ts int64 // 中奖时间 - SnId int32 // 玩家id - Name string // 玩家昵称 - Number int64 // 中奖号码 - Award map[int32]int64 // 奖品,key为奖品id,value为奖品数量 - Video string // 视频地址 -} - -type LotteryServer struct { - lottery.UnimplementedLotteryServerServer -} - -func (l *Lottery) Save(ctx context.Context, req *lottery.SaveReq) (*lottery.SaveRsp, error) { - logger.Logger.Infof("Lottery Save: %v", req) - return nil, nil -} - -func (l *Lottery) Find(ctx context.Context, req *lottery.FindReq) (*lottery.FindRsp, error) { - logger.Logger.Infof("Lottery Find: %v", req) - return nil, nil -} diff --git a/db/model/user.go b/db/model/user.go new file mode 100644 index 0000000..8838d95 --- /dev/null +++ b/db/model/user.go @@ -0,0 +1,25 @@ +package model + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" +) + +//go:generate mongoctl -model-dir=. -model-names=User -dao-dir=../dao +type User struct { + ID primitive.ObjectID `bson:"_id" gen:"autoFill"` + Account string `bson:"account"` // 用户账号 + Password string `bson:"password"` // 用户密码 + Salt string `bson:"salt"` // 密码 + Mobile string `bson:"mobile"` // 用户手机 + Email string `bson:"email"` // 用户邮箱 + Nickname string `bson:"nickname"` // 用户昵称 + Signature string `bson:"signature"` // 用户签名 + Level int `bson:"level"` // 用户等级 + Experience int `bson:"experience"` // 用户经验 + Coin int `bson:"coin"` // 用户金币 + DeviceID string `bson:"device_id"` // 设备ID + RegisterIP string `bson:"register_ip"` // 注册IP + RegisterTime primitive.DateTime `bson:"register_time" gen:"autoFill"` // 注册时间 + LastLoginIP string `bson:"last_login_ip"` // 最近登录IP + LastLoginTime primitive.DateTime `bson:"last_login_time" gen:"autoFill"` // 最近登录时间 +} diff --git a/db/proto/lottery/lottery.pb.go b/db/proto/lottery/lottery.pb.go deleted file mode 100644 index d11907e..0000000 --- a/db/proto/lottery/lottery.pb.go +++ /dev/null @@ -1,448 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1-devel -// protoc v3.19.4 -// source: lottery.proto - -package lottery - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - public "mongo.games.com/game/db/proto/public" - 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) -) - -type Lottery struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ts int64 `protobuf:"varint,1,opt,name=Ts,proto3" json:"Ts,omitempty"` // 中奖时间 - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id - Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 玩家昵称 - Number int64 `protobuf:"varint,4,opt,name=Number,proto3" json:"Number,omitempty"` // 中奖号码 - Award []*public.Item `protobuf:"bytes,5,rep,name=Award,proto3" json:"Award,omitempty"` // 奖品,key为奖品id,value为奖品数量 -} - -func (x *Lottery) Reset() { - *x = Lottery{} - if protoimpl.UnsafeEnabled { - mi := &file_lottery_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Lottery) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Lottery) ProtoMessage() {} - -func (x *Lottery) ProtoReflect() protoreflect.Message { - mi := &file_lottery_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 Lottery.ProtoReflect.Descriptor instead. -func (*Lottery) Descriptor() ([]byte, []int) { - return file_lottery_proto_rawDescGZIP(), []int{0} -} - -func (x *Lottery) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *Lottery) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *Lottery) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Lottery) GetNumber() int64 { - if x != nil { - return x.Number - } - return 0 -} - -func (x *Lottery) GetAward() []*public.Item { - if x != nil { - return x.Award - } - return nil -} - -//客户端发送给服务端 -type SaveReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *SaveReq) Reset() { - *x = SaveReq{} - if protoimpl.UnsafeEnabled { - mi := &file_lottery_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SaveReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SaveReq) ProtoMessage() {} - -func (x *SaveReq) ProtoReflect() protoreflect.Message { - mi := &file_lottery_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SaveReq.ProtoReflect.Descriptor instead. -func (*SaveReq) Descriptor() ([]byte, []int) { - return file_lottery_proto_rawDescGZIP(), []int{1} -} - -func (x *SaveReq) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -//服务端返回给客户端 -type SaveRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` -} - -func (x *SaveRsp) Reset() { - *x = SaveRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_lottery_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SaveRsp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SaveRsp) ProtoMessage() {} - -func (x *SaveRsp) ProtoReflect() protoreflect.Message { - mi := &file_lottery_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SaveRsp.ProtoReflect.Descriptor instead. -func (*SaveRsp) Descriptor() ([]byte, []int) { - return file_lottery_proto_rawDescGZIP(), []int{2} -} - -func (x *SaveRsp) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -//客户端发送给服务端 -type FindReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *FindReq) Reset() { - *x = FindReq{} - if protoimpl.UnsafeEnabled { - mi := &file_lottery_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FindReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FindReq) ProtoMessage() {} - -func (x *FindReq) ProtoReflect() protoreflect.Message { - mi := &file_lottery_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 FindReq.ProtoReflect.Descriptor instead. -func (*FindReq) Descriptor() ([]byte, []int) { - return file_lottery_proto_rawDescGZIP(), []int{3} -} - -func (x *FindReq) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -//服务端返回给客户端 -type FindRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` -} - -func (x *FindRsp) Reset() { - *x = FindRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_lottery_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FindRsp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FindRsp) ProtoMessage() {} - -func (x *FindRsp) ProtoReflect() protoreflect.Message { - mi := &file_lottery_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 FindRsp.ProtoReflect.Descriptor instead. -func (*FindRsp) Descriptor() ([]byte, []int) { - return file_lottery_proto_rawDescGZIP(), []int{4} -} - -func (x *FindRsp) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -var File_lottery_proto protoreflect.FileDescriptor - -var file_lottery_proto_rawDesc = []byte{ - 0x0a, 0x0d, 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7d, 0x0a, - 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x1d, 0x0a, 0x07, - 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1b, 0x0a, 0x07, 0x53, - 0x61, 0x76, 0x65, 0x52, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x1d, 0x0a, 0x07, 0x46, 0x69, 0x6e, 0x64, - 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1b, 0x0a, 0x07, 0x46, 0x69, 0x6e, 0x64, 0x52, - 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x32, 0x6b, 0x0a, 0x0d, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x61, 0x76, 0x65, 0x12, 0x10, 0x2e, - 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x10, 0x2e, 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x6c, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, - 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x73, 0x70, 0x22, - 0x00, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x64, 0x62, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x6c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_lottery_proto_rawDescOnce sync.Once - file_lottery_proto_rawDescData = file_lottery_proto_rawDesc -) - -func file_lottery_proto_rawDescGZIP() []byte { - file_lottery_proto_rawDescOnce.Do(func() { - file_lottery_proto_rawDescData = protoimpl.X.CompressGZIP(file_lottery_proto_rawDescData) - }) - return file_lottery_proto_rawDescData -} - -var file_lottery_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_lottery_proto_goTypes = []interface{}{ - (*Lottery)(nil), // 0: lottery.Lottery - (*SaveReq)(nil), // 1: lottery.SaveReq - (*SaveRsp)(nil), // 2: lottery.SaveRsp - (*FindReq)(nil), // 3: lottery.FindReq - (*FindRsp)(nil), // 4: lottery.FindRsp - (*public.Item)(nil), // 5: public.Item -} -var file_lottery_proto_depIdxs = []int32{ - 5, // 0: lottery.Lottery.Award:type_name -> public.Item - 1, // 1: lottery.LotteryServer.Save:input_type -> lottery.SaveReq - 3, // 2: lottery.LotteryServer.Find:input_type -> lottery.FindReq - 2, // 3: lottery.LotteryServer.Save:output_type -> lottery.SaveRsp - 4, // 4: lottery.LotteryServer.Find:output_type -> lottery.FindRsp - 3, // [3:5] is the sub-list for method output_type - 1, // [1:3] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_lottery_proto_init() } -func file_lottery_proto_init() { - if File_lottery_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_lottery_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Lottery); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_lottery_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_lottery_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_lottery_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_lottery_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindRsp); 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_lottery_proto_rawDesc, - NumEnums: 0, - NumMessages: 5, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_lottery_proto_goTypes, - DependencyIndexes: file_lottery_proto_depIdxs, - MessageInfos: file_lottery_proto_msgTypes, - }.Build() - File_lottery_proto = out.File - file_lottery_proto_rawDesc = nil - file_lottery_proto_goTypes = nil - file_lottery_proto_depIdxs = nil -} diff --git a/db/proto/lottery/lottery.proto b/db/proto/lottery/lottery.proto deleted file mode 100644 index 7116b0b..0000000 --- a/db/proto/lottery/lottery.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; -package lottery; -option go_package = "mongo.games.com/game/db/proto/lottery"; - -service LotteryServer { - rpc Save (SaveReq) returns (SaveRsp){} - rpc Find (FindReq) returns (FindRsp){} -} - -//客户端发送给服务端 -message SaveReq { - string name = 1 ; -} - -//服务端返回给客户端 -message SaveRsp { - string msg = 1 ; -} - -//客户端发送给服务端 -message FindReq { - string name = 1 ; -} - -//服务端返回给客户端 -message FindRsp { - string msg = 1 ; -} \ No newline at end of file diff --git a/db/proto/lottery/lottery_grpc.pb.go b/db/proto/lottery/lottery_grpc.pb.go deleted file mode 100644 index 067af9c..0000000 --- a/db/proto/lottery/lottery_grpc.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.19.4 -// source: lottery.proto - -package lottery - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - LotteryServer_Save_FullMethodName = "/lottery.LotteryServer/Save" - LotteryServer_Find_FullMethodName = "/lottery.LotteryServer/Find" -) - -// LotteryServerClient is the client API for LotteryServer service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type LotteryServerClient interface { - Save(ctx context.Context, in *SaveReq, opts ...grpc.CallOption) (*SaveRsp, error) - Find(ctx context.Context, in *FindReq, opts ...grpc.CallOption) (*FindRsp, error) -} - -type lotteryServerClient struct { - cc grpc.ClientConnInterface -} - -func NewLotteryServerClient(cc grpc.ClientConnInterface) LotteryServerClient { - return &lotteryServerClient{cc} -} - -func (c *lotteryServerClient) Save(ctx context.Context, in *SaveReq, opts ...grpc.CallOption) (*SaveRsp, error) { - out := new(SaveRsp) - err := c.cc.Invoke(ctx, LotteryServer_Save_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *lotteryServerClient) Find(ctx context.Context, in *FindReq, opts ...grpc.CallOption) (*FindRsp, error) { - out := new(FindRsp) - err := c.cc.Invoke(ctx, LotteryServer_Find_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// LotteryServerServer is the server API for LotteryServer service. -// All implementations must embed UnimplementedLotteryServerServer -// for forward compatibility -type LotteryServerServer interface { - Save(context.Context, *SaveReq) (*SaveRsp, error) - Find(context.Context, *FindReq) (*FindRsp, error) - mustEmbedUnimplementedLotteryServerServer() -} - -// UnimplementedLotteryServerServer must be embedded to have forward compatible implementations. -type UnimplementedLotteryServerServer struct { -} - -func (UnimplementedLotteryServerServer) Save(context.Context, *SaveReq) (*SaveRsp, error) { - return nil, status.Errorf(codes.Unimplemented, "method Save not implemented") -} -func (UnimplementedLotteryServerServer) Find(context.Context, *FindReq) (*FindRsp, error) { - return nil, status.Errorf(codes.Unimplemented, "method Find not implemented") -} -func (UnimplementedLotteryServerServer) mustEmbedUnimplementedLotteryServerServer() {} - -// UnsafeLotteryServerServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to LotteryServerServer will -// result in compilation errors. -type UnsafeLotteryServerServer interface { - mustEmbedUnimplementedLotteryServerServer() -} - -func RegisterLotteryServerServer(s grpc.ServiceRegistrar, srv LotteryServerServer) { - s.RegisterService(&LotteryServer_ServiceDesc, srv) -} - -func _LotteryServer_Save_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SaveReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LotteryServerServer).Save(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: LotteryServer_Save_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LotteryServerServer).Save(ctx, req.(*SaveReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _LotteryServer_Find_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FindReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LotteryServerServer).Find(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: LotteryServer_Find_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LotteryServerServer).Find(ctx, req.(*FindReq)) - } - return interceptor(ctx, in, info, handler) -} - -// LotteryServer_ServiceDesc is the grpc.ServiceDesc for LotteryServer service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var LotteryServer_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "lottery.LotteryServer", - HandlerType: (*LotteryServerServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Save", - Handler: _LotteryServer_Save_Handler, - }, - { - MethodName: "Find", - Handler: _LotteryServer_Find_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "lottery.proto", -} diff --git a/db/proto/public/public.proto b/db/proto/public.proto similarity index 100% rename from db/proto/public/public.proto rename to db/proto/public.proto diff --git a/db/proto/public/通用数据结构 b/db/proto/public/通用数据结构 deleted file mode 100644 index e69de29..0000000 diff --git a/db/proto/user.proto b/db/proto/user.proto new file mode 100644 index 0000000..ed50358 --- /dev/null +++ b/db/proto/user.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package user; +option go_package = "mongo.games.com/game/db/proto/user"; + +import "public.proto"; + +service UserServer { + rpc Save (SaveReq) returns (SaveRsp){} +} + +//客户端发送给服务端 +message SaveReq { + string Platform = 1; + string name = 2; + repeated public.Item Items = 3; +} + +//服务端返回给客户端 +message SaveRsp { + string msg = 1 ; +} \ No newline at end of file diff --git a/db/proto/user/user.pb.go b/db/proto/user/user.pb.go new file mode 100644 index 0000000..e78ff5c --- /dev/null +++ b/db/proto/user/user.pb.go @@ -0,0 +1,235 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1-devel +// protoc v3.19.4 +// source: user.proto + +package user + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + public "mongo.games.com/game/db/proto/public" + 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) +) + +//客户端发送给服务端 +type SaveReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Items []*public.Item `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` +} + +func (x *SaveReq) Reset() { + *x = SaveReq{} + if protoimpl.UnsafeEnabled { + mi := &file_user_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SaveReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveReq) ProtoMessage() {} + +func (x *SaveReq) ProtoReflect() protoreflect.Message { + mi := &file_user_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 SaveReq.ProtoReflect.Descriptor instead. +func (*SaveReq) Descriptor() ([]byte, []int) { + return file_user_proto_rawDescGZIP(), []int{0} +} + +func (x *SaveReq) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *SaveReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SaveReq) GetItems() []*public.Item { + if x != nil { + return x.Items + } + return nil +} + +//服务端返回给客户端 +type SaveRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` +} + +func (x *SaveRsp) Reset() { + *x = SaveRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_user_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SaveRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveRsp) ProtoMessage() {} + +func (x *SaveRsp) ProtoReflect() protoreflect.Message { + mi := &file_user_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SaveRsp.ProtoReflect.Descriptor instead. +func (*SaveRsp) Descriptor() ([]byte, []int) { + return file_user_proto_rawDescGZIP(), []int{1} +} + +func (x *SaveRsp) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +var File_user_proto protoreflect.FileDescriptor + +var file_user_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x1a, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x5d, 0x0a, 0x07, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0x1b, 0x0a, 0x07, 0x53, 0x61, 0x76, 0x65, 0x52, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x32, 0x34, 0x0a, 0x0a, + 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x04, 0x53, 0x61, + 0x76, 0x65, 0x12, 0x0d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x0d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x73, 0x70, + 0x22, 0x00, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x64, 0x62, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_user_proto_rawDescOnce sync.Once + file_user_proto_rawDescData = file_user_proto_rawDesc +) + +func file_user_proto_rawDescGZIP() []byte { + file_user_proto_rawDescOnce.Do(func() { + file_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_proto_rawDescData) + }) + return file_user_proto_rawDescData +} + +var file_user_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_user_proto_goTypes = []interface{}{ + (*SaveReq)(nil), // 0: user.SaveReq + (*SaveRsp)(nil), // 1: user.SaveRsp + (*public.Item)(nil), // 2: public.Item +} +var file_user_proto_depIdxs = []int32{ + 2, // 0: user.SaveReq.Items:type_name -> public.Item + 0, // 1: user.UserServer.Save:input_type -> user.SaveReq + 1, // 2: user.UserServer.Save:output_type -> user.SaveRsp + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_user_proto_init() } +func file_user_proto_init() { + if File_user_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_user_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SaveReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SaveRsp); 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_user_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_user_proto_goTypes, + DependencyIndexes: file_user_proto_depIdxs, + MessageInfos: file_user_proto_msgTypes, + }.Build() + File_user_proto = out.File + file_user_proto_rawDesc = nil + file_user_proto_goTypes = nil + file_user_proto_depIdxs = nil +} diff --git a/db/proto/user/user_grpc.pb.go b/db/proto/user/user_grpc.pb.go new file mode 100644 index 0000000..94e7f93 --- /dev/null +++ b/db/proto/user/user_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.19.4 +// source: user.proto + +package user + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + UserServer_Save_FullMethodName = "/user.UserServer/Save" +) + +// UserServerClient is the client API for UserServer service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type UserServerClient interface { + Save(ctx context.Context, in *SaveReq, opts ...grpc.CallOption) (*SaveRsp, error) +} + +type userServerClient struct { + cc grpc.ClientConnInterface +} + +func NewUserServerClient(cc grpc.ClientConnInterface) UserServerClient { + return &userServerClient{cc} +} + +func (c *userServerClient) Save(ctx context.Context, in *SaveReq, opts ...grpc.CallOption) (*SaveRsp, error) { + out := new(SaveRsp) + err := c.cc.Invoke(ctx, UserServer_Save_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// UserServerServer is the server API for UserServer service. +// All implementations must embed UnimplementedUserServerServer +// for forward compatibility +type UserServerServer interface { + Save(context.Context, *SaveReq) (*SaveRsp, error) + mustEmbedUnimplementedUserServerServer() +} + +// UnimplementedUserServerServer must be embedded to have forward compatible implementations. +type UnimplementedUserServerServer struct { +} + +func (UnimplementedUserServerServer) Save(context.Context, *SaveReq) (*SaveRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Save not implemented") +} +func (UnimplementedUserServerServer) mustEmbedUnimplementedUserServerServer() {} + +// UnsafeUserServerServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to UserServerServer will +// result in compilation errors. +type UnsafeUserServerServer interface { + mustEmbedUnimplementedUserServerServer() +} + +func RegisterUserServerServer(s grpc.ServiceRegistrar, srv UserServerServer) { + s.RegisterService(&UserServer_ServiceDesc, srv) +} + +func _UserServer_Save_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServerServer).Save(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserServer_Save_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServerServer).Save(ctx, req.(*SaveReq)) + } + return interceptor(ctx, in, info, handler) +} + +// UserServer_ServiceDesc is the grpc.ServiceDesc for UserServer service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var UserServer_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "user.UserServer", + HandlerType: (*UserServerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Save", + Handler: _UserServer_Save_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "user.proto", +} diff --git a/db/register.go b/db/register.go deleted file mode 100644 index d968ae5..0000000 --- a/db/register.go +++ /dev/null @@ -1,21 +0,0 @@ -package db - -import ( - "mongo.games.com/game/db/model" - "mongo.games.com/game/db/proto/lottery" -) - -/* - grpc 服务端注册 -*/ - -// registerGrpcServer 注册grpc服务 -func registerGrpcServer() { - lottery.RegisterLotteryServerServer(GrpcServer, new(model.LotteryServer)) -} - -var LotteryClient lottery.LotteryServerClient - -func registerGrpcClient() { - LotteryClient = lottery.NewLotteryServerClient(GrpcClientConn) -} diff --git a/db/rpc/export.go b/db/rpc/export.go new file mode 100644 index 0000000..9b4fd69 --- /dev/null +++ b/db/rpc/export.go @@ -0,0 +1,58 @@ +package rpc + +import ( + "errors" + "net" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "mongo.games.com/goserver/core/logger" + + "mongo.games.com/game/db/proto/user" + "mongo.games.com/game/db/rpc/server" + "mongo.games.com/game/db/rpc/svc" +) + +// GrpcServer grpc服务 +var GrpcServer *grpc.Server + +// GrpcClientConn grpc客户端连接 +var GrpcClientConn *grpc.ClientConn + +// RunGrpcServer 启动grpc服务端 +func RunGrpcServer(addr string) { + GrpcServer = grpc.NewServer() + registerGrpcServer() + ln, err := net.Listen("tcp", addr) + if err != nil { + panic(errors.New("db grpc failed to listen: " + err.Error())) + } + + err = GrpcServer.Serve(ln) + if err != nil { + panic(errors.New("db grpc failed to serve: " + err.Error())) + } + logger.Logger.Infof("db grpc start success") +} + +// NewGrpcClientConn 创建grpc客户端连接 +func NewGrpcClientConn(addr string) { + var err error + GrpcClientConn, err = grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + panic(errors.New("db grpc failed to dial: " + err.Error())) + } + registerGrpcClient() +} + +// registerGrpcServer 注册grpc服务 +func registerGrpcServer() { + ctx := svc.NewServiceContext() + user.RegisterUserServerServer(GrpcServer, server.NewUserServer(ctx)) +} + +var UserClient user.UserServerClient + +func registerGrpcClient() { + UserClient = user.NewUserServerClient(GrpcClientConn) +} diff --git a/db/rpc/logic/userlogic.go b/db/rpc/logic/userlogic.go new file mode 100644 index 0000000..492f7cc --- /dev/null +++ b/db/rpc/logic/userlogic.go @@ -0,0 +1,34 @@ +package logic + +import ( + "context" + + "mongo.games.com/game/db/dao" + "mongo.games.com/game/db/model" + "mongo.games.com/game/db/proto/user" + "mongo.games.com/game/db/rpc/svc" +) + +type UserLogic struct { + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserLogic { + return &UserLogic{ + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *UserLogic) Save(in *user.SaveReq) (*user.SaveRsp, error) { + u, err := svc.GetUserCollection(in.GetPlatform(), model.User{}, dao.NewUser) + if err != nil { + return nil, err + } + _, err = u.InsertOne(l.ctx, &model.User{}) + if err != nil { + return nil, err + } + return &user.SaveRsp{}, nil +} diff --git a/db/rpc/server/userserver.go b/db/rpc/server/userserver.go new file mode 100644 index 0000000..6f953c1 --- /dev/null +++ b/db/rpc/server/userserver.go @@ -0,0 +1,29 @@ +// Code generated by goctl. DO NOT EDIT. +// goctl 1.7.2 +// Source: user.proto + +package server + +import ( + "context" + + "mongo.games.com/game/db/proto/user" + "mongo.games.com/game/db/rpc/logic" + "mongo.games.com/game/db/rpc/svc" +) + +type UserServer struct { + svcCtx *svc.ServiceContext + user.UnimplementedUserServerServer +} + +func NewUserServer(svcCtx *svc.ServiceContext) *UserServer { + return &UserServer{ + svcCtx: svcCtx, + } +} + +func (s *UserServer) Save(ctx context.Context, in *user.SaveReq) (*user.SaveRsp, error) { + l := logic.NewUserLogic(ctx, s.svcCtx) + return l.Save(in) +} diff --git a/db/rpc/svc/servicecontext.go b/db/rpc/svc/servicecontext.go new file mode 100644 index 0000000..3a54cee --- /dev/null +++ b/db/rpc/svc/servicecontext.go @@ -0,0 +1,97 @@ +package svc + +import ( + "fmt" + "reflect" + "strings" + + "go.mongodb.org/mongo-driver/mongo" + + "mongo.games.com/game/common" + mon "mongo.games.com/game/mongo" + "mongo.games.com/goserver/core/logger" +) + +// ServiceContext 服务上下文 +// 依赖注入 +type ServiceContext struct { +} + +func NewServiceContext() *ServiceContext { + + vp := common.GetViper("mgo", "json") + // mongo初始化 + conf := &mon.Config{} + err := vp.Unmarshal(conf) + if err != nil { + panic(fmt.Errorf("mongo config error: %v", err)) + } + mon.Init(conf) + + return &ServiceContext{} +} + +type TableName interface { + TableName() string +} + +// GetTableName 获取表名 +func GetTableName(model any) string { + if m, ok := model.(TableName); ok { + return m.TableName() + } + + t := reflect.TypeOf(model) + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + if t.Kind() != reflect.Struct { + panic("model must be a struct or a pointer to a struct") + } + + return strings.ToLower(t.Name()) +} + +// GetUserCollection 用户库 +func GetUserCollection[T any](platform string, model any, f func(database *mongo.Database, c *mongo.Collection) T) (T, error) { + c, err := mon.GetUserCollection(platform, GetTableName(model)) + if err != nil { + var z T + logger.Logger.Errorf("GetUserCollection error: %v", err) + return z, err + } + return f(c.Database.Database, c.Collection), nil +} + +// GetLogCollection 日志库 +func GetLogCollection[T any](platform string, model any, f func(database *mongo.Database, c *mongo.Collection) T) (T, error) { + c, err := mon.GetLogCollection(platform, GetTableName(model)) + if err != nil { + var z T + logger.Logger.Errorf("GetLogCollection error: %v", err) + return z, err + } + return f(c.Database.Database, c.Collection), nil +} + +// GetGlobalUserCollection 全局用户库 +func GetGlobalUserCollection[T any](model any, f func(database *mongo.Database, c *mongo.Collection) T) (T, error) { + c, err := mon.GetGlobalUserCollection(GetTableName(model)) + if err != nil { + var z T + logger.Logger.Errorf("GetGlobalUserCollection error: %v", err) + return z, err + } + return f(c.Database.Database, c.Collection), nil +} + +// GetGlobalLogCollection 全局日志库 +func GetGlobalLogCollection[T any](model any, f func(database *mongo.Database, c *mongo.Collection) T) (T, error) { + c, err := mon.GetGlobalLogCollection(GetTableName(model)) + if err != nil { + var z T + logger.Logger.Errorf("GetGlobalLogCollection error: %v", err) + return z, err + } + return f(c.Database.Database, c.Collection), nil +}