修改friend接口
This commit is contained in:
parent
6943458a0d
commit
24749bb718
@ -6,7 +6,30 @@ import (
|
|||||||
"go_dreamfactory/utils"
|
"go_dreamfactory/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (this *ApiComp) Agree_Check(session comm.IUserSession, req *pb.FriendAgreeReq) (result map[string]interface{}, code pb.ErrorCode) {
|
func (this *ApiComp) Agree_Check(session comm.IUserSession, req *pb.FriendAgreeReq) (chk map[string]interface{}, code pb.ErrorCode) {
|
||||||
|
chk = make(map[string]interface{})
|
||||||
|
var err error
|
||||||
|
self := &pb.DB_FriendData{UserId: session.GetUserId()}
|
||||||
|
|
||||||
|
//获取玩家自己好友数据
|
||||||
|
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
||||||
|
if self == nil || err != nil {
|
||||||
|
code = pb.ErrorCode_FriendSelfNoData
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//同意的好友
|
||||||
|
agreeIds := []string{}
|
||||||
|
for _, friendId := range req.FriendIds {
|
||||||
|
if _, ok := utils.Find(self.FriendIds, friendId); !ok {
|
||||||
|
//不在好友列表中就加入
|
||||||
|
agreeIds = append(agreeIds, friendId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chk["agreeIds"] = agreeIds
|
||||||
|
chk["self"] = self
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,39 +51,49 @@ func (this *ApiComp) Agree(session comm.IUserSession, chk map[string]interface{}
|
|||||||
session.SendMsg(string(this.module.GetType()), Friend_SubType_Agree, code, rsp)
|
session.SendMsg(string(this.module.GetType()), Friend_SubType_Agree, code, rsp)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
if v, ok := chk["self"]; !ok {
|
||||||
if self == nil || err != nil {
|
code = pb.ErrorCode_FriendTargetNoData
|
||||||
code = pb.ErrorCode_FriendSelfNoData
|
|
||||||
return
|
return
|
||||||
|
} else {
|
||||||
|
self = v.(*pb.DB_FriendData)
|
||||||
}
|
}
|
||||||
|
|
||||||
//将申请人加入到自己的好友列表中
|
if agreeIds, ok := chk["agreeIds"]; ok {
|
||||||
for _, userId := range req.FriendIds {
|
//将目标加入到自己的好友列表中
|
||||||
if _, ok := utils.Find(self.FriendIds, userId); !ok {
|
for _, userId := range agreeIds.([]string) {
|
||||||
self.FriendIds = append(self.FriendIds, userId)
|
if _, ok := utils.Find(self.FriendIds, userId); !ok {
|
||||||
|
if self.FriendIds == nil {
|
||||||
|
self.FriendIds = []string{}
|
||||||
|
}
|
||||||
|
self.FriendIds = append(self.FriendIds, userId)
|
||||||
|
}
|
||||||
|
|
||||||
|
//双向添加:将自己加入到申请人的好友列表中
|
||||||
|
target := &pb.DB_FriendData{}
|
||||||
|
err := this.module.model_friend.GetObj(userId, target)
|
||||||
|
if target == nil || err != nil {
|
||||||
|
code = pb.ErrorCode_FriendTargetNoData
|
||||||
|
|
||||||
|
}
|
||||||
|
if _, ok := utils.Find(target.FriendIds, self.UserId); !ok {
|
||||||
|
if target.FriendIds == nil {
|
||||||
|
target.FriendIds = []string{}
|
||||||
|
}
|
||||||
|
target.FriendIds = append(target.FriendIds, self.UserId)
|
||||||
|
}
|
||||||
|
err = this.module.model_friend.SetObj(target.UserId, target, false, true)
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
}
|
||||||
|
|
||||||
|
//将目标从申请列表中删除
|
||||||
|
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
|
||||||
|
optNum++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//更新
|
||||||
|
return this.module.model_friend.SetObj(self.UserId, self, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
//将自己加入到申请人的好友列表中
|
return nil
|
||||||
for _, userId := range req.FriendIds {
|
|
||||||
var target *pb.DB_FriendData
|
|
||||||
err2 := this.module.model_friend.GetObj(userId, target)
|
|
||||||
if target == nil || err2 != nil {
|
|
||||||
code = pb.ErrorCode_FriendTargetNoData
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if _, ok := utils.Find(target.FriendIds, self.UserId); !ok {
|
|
||||||
target.FriendIds = append(target.FriendIds, self.UserId)
|
|
||||||
}
|
|
||||||
this.module.model_friend.SetObj(target.UserId, target, false, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
//将申请人从申请列表中删除
|
|
||||||
for _, userId := range req.FriendIds {
|
|
||||||
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
|
|
||||||
optNum++
|
|
||||||
}
|
|
||||||
|
|
||||||
//更新
|
|
||||||
return this.module.model_friend.SetObj(self.UserId, self, false, true)
|
|
||||||
}
|
}
|
||||||
|
@ -8,38 +8,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (this *ApiComp) Apply_Check(session comm.IUserSession, req *pb.FriendApplyReq) (chk map[string]interface{}, code pb.ErrorCode) {
|
func (this *ApiComp) Apply_Check(session comm.IUserSession, req *pb.FriendApplyReq) (chk map[string]interface{}, code pb.ErrorCode) {
|
||||||
return
|
chk = make(map[string]interface{})
|
||||||
}
|
var err error
|
||||||
|
self := &pb.DB_FriendData{UserId: session.GetUserId()}
|
||||||
//好友申请
|
target := &pb.DB_FriendData{UserId: req.FriendId}
|
||||||
func (this *ApiComp) Apply(session comm.IUserSession, chk map[string]interface{}, req *pb.FriendApplyReq) (err error) {
|
|
||||||
var (
|
|
||||||
code pb.ErrorCode
|
|
||||||
self *pb.DB_FriendData
|
|
||||||
target *pb.DB_FriendData
|
|
||||||
rsp *pb.FriendApplyRsp
|
|
||||||
)
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
utils.TraceFunc(session.GetUserId(), string(this.module.GetType()), Friend_SubType_Apply, req, rsp)
|
|
||||||
}()
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if code == pb.ErrorCode_Success {
|
|
||||||
rsp = &pb.FriendApplyRsp{
|
|
||||||
UserId: session.GetUserId(),
|
|
||||||
FriendId: req.FriendId,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
session.SendMsg(string(this.module.GetType()), Friend_SubType_Apply, code, rsp)
|
|
||||||
}()
|
|
||||||
|
|
||||||
|
//获取玩家自己好友数据
|
||||||
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
||||||
if self == nil || err != nil {
|
if self == nil || err != nil {
|
||||||
code = pb.ErrorCode_FriendSelfNoData
|
code = pb.ErrorCode_FriendSelfNoData
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取好友数据
|
||||||
err = this.module.model_friend.GetObj(req.FriendId, target)
|
err = this.module.model_friend.GetObj(req.FriendId, target)
|
||||||
if target == nil || err != nil {
|
if target == nil || err != nil {
|
||||||
code = pb.ErrorCode_FriendTargetNoData
|
code = pb.ErrorCode_FriendTargetNoData
|
||||||
@ -92,12 +73,47 @@ func (this *ApiComp) Apply(session comm.IUserSession, chk map[string]interface{}
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chk["self"] = self
|
||||||
|
chk["target"] = target
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//好友申请
|
||||||
|
func (this *ApiComp) Apply(session comm.IUserSession, chk map[string]interface{}, req *pb.FriendApplyReq) (err error) {
|
||||||
|
var (
|
||||||
|
code pb.ErrorCode
|
||||||
|
target *pb.DB_FriendData
|
||||||
|
rsp *pb.FriendApplyRsp
|
||||||
|
)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
utils.TraceFunc(session.GetUserId(), string(this.module.GetType()), Friend_SubType_Apply, req, rsp)
|
||||||
|
}()
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if code == pb.ErrorCode_Success {
|
||||||
|
rsp = &pb.FriendApplyRsp{
|
||||||
|
UserId: session.GetUserId(),
|
||||||
|
FriendId: req.FriendId,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
session.SendMsg(string(this.module.GetType()), Friend_SubType_Apply, code, rsp)
|
||||||
|
}()
|
||||||
|
|
||||||
|
if v, ok := chk["target"]; !ok {
|
||||||
|
code = pb.ErrorCode_FriendTargetNoData
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
target = v.(*pb.DB_FriendData)
|
||||||
|
}
|
||||||
|
|
||||||
//将自己加入到目标用户的申请列表中
|
//将自己加入到目标用户的申请列表中
|
||||||
target.ApplyIds = append(target.ApplyIds, self.UserId)
|
if target.ApplyIds == nil {
|
||||||
err = this.module.model_friend.SetObj(req.FriendId, &pb.DB_FriendData{
|
target.ApplyIds = []string{}
|
||||||
UserId: req.FriendId,
|
}
|
||||||
ApplyIds: target.ApplyIds,
|
target.ApplyIds = append(target.ApplyIds, session.GetUserId())
|
||||||
}, false, true)
|
|
||||||
|
err = this.module.model_friend.SetObj(req.FriendId, target, false, true)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("firend Apply err:%v", err)
|
log.Errorf("firend Apply err:%v", err)
|
||||||
|
@ -7,6 +7,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (this *ApiComp) Refuse_Check(session comm.IUserSession, req *pb.FriendRefuseReq) (chk map[string]interface{}, code pb.ErrorCode) {
|
func (this *ApiComp) Refuse_Check(session comm.IUserSession, req *pb.FriendRefuseReq) (chk map[string]interface{}, code pb.ErrorCode) {
|
||||||
|
chk = make(map[string]interface{})
|
||||||
|
var err error
|
||||||
|
self := &pb.DB_FriendData{UserId: session.GetUserId()}
|
||||||
|
|
||||||
|
//获取玩家自己好友数据
|
||||||
|
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
||||||
|
if self == nil || err != nil {
|
||||||
|
code = pb.ErrorCode_FriendSelfNoData
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//拒绝的Ids
|
||||||
|
refuseIds := []string{}
|
||||||
|
for _, friendId := range req.FriendIds {
|
||||||
|
if _, ok := utils.Find(self.ApplyIds, friendId); ok {
|
||||||
|
refuseIds = append(refuseIds, friendId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chk["self"] = self
|
||||||
|
chk["refuseIds"] = refuseIds
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,18 +50,24 @@ func (this *ApiComp) Refuse(session comm.IUserSession, chk map[string]interface{
|
|||||||
session.SendMsg(string(this.module.GetType()), Friend_SubType_Refuse, code, rsp)
|
session.SendMsg(string(this.module.GetType()), Friend_SubType_Refuse, code, rsp)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err = this.module.model_friend.GetObj(session.GetUserId(), self)
|
if v, ok := chk["self"]; !ok {
|
||||||
if self == nil || err != nil {
|
code = pb.ErrorCode_FriendTargetNoData
|
||||||
code = pb.ErrorCode_FriendSelfNoData
|
|
||||||
return
|
return
|
||||||
}
|
} else {
|
||||||
|
self = v.(*pb.DB_FriendData)
|
||||||
|
|
||||||
//将申请人从申请列表中删除
|
if v, ok := chk["refuseIds"]; ok {
|
||||||
for _, userId := range req.FriendIds {
|
//将申请人从申请列表中删除
|
||||||
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
|
for _, userId := range v.([]string) {
|
||||||
optNum++
|
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
|
||||||
}
|
optNum++
|
||||||
|
}
|
||||||
|
//更新
|
||||||
|
if optNum > 0 {
|
||||||
|
return this.module.model_friend.SetObj(self.UserId, self, false, true)
|
||||||
|
}
|
||||||
|
|
||||||
//更新
|
}
|
||||||
return this.module.model_friend.SetObj(self.UserId, self, false, true)
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ type ModelFriend struct {
|
|||||||
|
|
||||||
func (this *ModelFriend) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
func (this *ModelFriend) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
err = this.Model_Comp.Init(service, module, comp, options)
|
err = this.Model_Comp.Init(service, module, comp, options)
|
||||||
this.Prefix = "friend"
|
this.TableName = "friend"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,9 +24,9 @@ DB组件也封装进来
|
|||||||
*/
|
*/
|
||||||
type Model_Comp struct {
|
type Model_Comp struct {
|
||||||
cbase.ModuleCompBase
|
cbase.ModuleCompBase
|
||||||
Redis redis.ISys
|
Redis redis.ISys
|
||||||
DB mgo.ISys
|
DB mgo.ISys
|
||||||
Prefix string //redis key前缀
|
TableName string //redis key前缀
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -98,8 +99,9 @@ func (this *Model_Comp) UpdateModelLogs(table string, uID string, where bson.M,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//设置缓存JSON格式数据
|
||||||
func (this *Model_Comp) SetObj(uid string, data proto.Message, isnew, islog bool) error {
|
func (this *Model_Comp) SetObj(uid string, data proto.Message, isnew, islog bool) error {
|
||||||
err := this.Redis.Set(fmt.Sprintf("%s:%s", this.Prefix, uid), data, 0)
|
err := this.Redis.Set(fmt.Sprintf("%s:%s", this.TableName, uid), data, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("set err:%v", err)
|
log.Errorf("set err:%v", err)
|
||||||
return err
|
return err
|
||||||
@ -107,9 +109,9 @@ func (this *Model_Comp) SetObj(uid string, data proto.Message, isnew, islog bool
|
|||||||
|
|
||||||
if islog {
|
if islog {
|
||||||
if isnew {
|
if isnew {
|
||||||
return this.InsertModelLogs(this.Prefix, uid, data)
|
return this.InsertModelLogs(this.TableName, uid, data)
|
||||||
} else {
|
} else {
|
||||||
return this.UpdateModelLogs(this.Prefix, uid, bson.M{"_id": uid}, data)
|
return this.UpdateModelLogs(this.TableName, uid, bson.M{"_id": uid}, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -118,7 +120,7 @@ func (this *Model_Comp) SetObj(uid string, data proto.Message, isnew, islog bool
|
|||||||
//更新缓存字段
|
//更新缓存字段
|
||||||
//isnew true insertlog , false updatelog
|
//isnew true insertlog , false updatelog
|
||||||
func (this *Model_Comp) Set(uid string, v map[string]interface{}, isnew, islog bool) error {
|
func (this *Model_Comp) Set(uid string, v map[string]interface{}, isnew, islog bool) error {
|
||||||
err := this.Redis.HMSet(fmt.Sprintf("%s:%s", this.Prefix, uid), v)
|
err := this.Redis.HMSet(fmt.Sprintf("%s:%s", this.TableName, uid), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("set err:%v", err)
|
log.Errorf("set err:%v", err)
|
||||||
return err
|
return err
|
||||||
@ -126,35 +128,57 @@ func (this *Model_Comp) Set(uid string, v map[string]interface{}, isnew, islog b
|
|||||||
|
|
||||||
if islog {
|
if islog {
|
||||||
if isnew {
|
if isnew {
|
||||||
return this.InsertModelLogs(this.Prefix, uid, v)
|
return this.InsertModelLogs(this.TableName, uid, v)
|
||||||
} else {
|
} else {
|
||||||
return this.UpdateModelLogs(this.Prefix, uid, bson.M{"_id": uid}, v)
|
return this.UpdateModelLogs(this.TableName, uid, bson.M{"uid": uid}, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Model_Comp) GetObj(uid string, v interface{}) error {
|
//获取缓存JSON数据
|
||||||
return this.Redis.Get(fmt.Sprintf("%s:%s", this.Prefix, uid), v)
|
func (this *Model_Comp) GetObj(uid string, v proto.Message) error {
|
||||||
|
err := this.Redis.Get(fmt.Sprintf("%s:%s", this.TableName, uid), v)
|
||||||
|
if err != nil {
|
||||||
|
if err == redis.RedisNil {
|
||||||
|
//query from mgo
|
||||||
|
err = this.DB.FindOne(core.SqlTable(this.TableName), bson.M{"_id": uid}).Decode(v)
|
||||||
|
if err != nil {
|
||||||
|
//no record
|
||||||
|
if err == mongo.ErrNoDocuments {
|
||||||
|
_, err = this.DB.InsertOne(core.SqlTable(this.TableName), v)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("insert err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//set cache
|
||||||
|
return this.SetObj(uid, v, true, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Errorf("get cache err: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取对象数据
|
//获取对象数据
|
||||||
func (this *Model_Comp) Get(uid string, v reflect.Type, fields ...string) ([]interface{}, error) {
|
func (this *Model_Comp) Get(uid string, v reflect.Type, fields ...string) ([]interface{}, error) {
|
||||||
return this.Redis.HMGet(fmt.Sprintf("%s:%s", this.Prefix, uid), v, fields...)
|
return this.Redis.HMGet(fmt.Sprintf("%s:%s", this.TableName, uid), v, fields...)
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取字段数据
|
//获取字段数据
|
||||||
func (this *Model_Comp) GetField(uid string, field string, v interface{}) error {
|
func (this *Model_Comp) GetField(uid string, field string, v interface{}) error {
|
||||||
return this.Redis.HGet(fmt.Sprintf("%s:%s", this.Prefix, uid), field, v)
|
return this.Redis.HGet(fmt.Sprintf("%s:%s", this.TableName, uid), field, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
//删除一条数据
|
//删除一条数据
|
||||||
func (this *Model_Comp) Del(uid string) error {
|
func (this *Model_Comp) Del(uid string) error {
|
||||||
err := this.Redis.HDel(fmt.Sprintf("%s:%s", this.Prefix, uid))
|
err := this.Redis.HDel(fmt.Sprintf("%s:%s", this.TableName, uid))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("del err:%v", err)
|
log.Errorf("del err:%v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.DeleteModelLogs(this.Prefix, uid, bson.M{"_id": uid})
|
return this.DeleteModelLogs(this.TableName, uid, bson.M{"_id": uid})
|
||||||
}
|
}
|
||||||
|
@ -39,11 +39,13 @@ func (this *Api_Comp) Register(c *engine.Context) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
err := this.module.modelUser.User_Create(&pb.DB_UserData{
|
err := this.module.modelUser.User_Create(&pb.DB_UserData{
|
||||||
Binduid: req.Account,
|
Binduid: req.Account,
|
||||||
|
Sid: req.Sid,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("create user err: %v", err)
|
log.Errorf("create user err: %v", err)
|
||||||
rsp.Code = pb.ErrorCode_SqlExecutionError
|
rsp.Code = pb.ErrorCode_SqlExecutionError
|
||||||
}
|
}
|
||||||
|
rsp.Account = req.Account
|
||||||
rsp.Code = pb.ErrorCode_Success
|
rsp.Code = pb.ErrorCode_Success
|
||||||
} else {
|
} else {
|
||||||
rsp.Code = pb.ErrorCode_ReqParameterError
|
rsp.Code = pb.ErrorCode_ReqParameterError
|
||||||
|
@ -3,7 +3,6 @@ package main
|
|||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go_dreamfactory/modules/dbservice"
|
|
||||||
"go_dreamfactory/modules/friend"
|
"go_dreamfactory/modules/friend"
|
||||||
"go_dreamfactory/modules/mail"
|
"go_dreamfactory/modules/mail"
|
||||||
"go_dreamfactory/modules/pack"
|
"go_dreamfactory/modules/pack"
|
||||||
@ -41,7 +40,7 @@ func main() {
|
|||||||
pack.NewModule(),
|
pack.NewModule(),
|
||||||
mail.NewModule(),
|
mail.NewModule(),
|
||||||
friend.NewModule(),
|
friend.NewModule(),
|
||||||
dbservice.NewModule(),
|
// dbservice.NewModule(),
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user