163 lines
3.9 KiB
Go
163 lines
3.9 KiB
Go
|
package v1
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
v1pb "go-common/app/interface/live/app-ucenter/api/http/v1"
|
||
|
"go-common/app/interface/live/app-ucenter/conf"
|
||
|
"go-common/app/interface/live/app-ucenter/dao"
|
||
|
"go-common/library/ecode"
|
||
|
"go-common/library/net/metadata"
|
||
|
"go-common/library/sync/errgroup"
|
||
|
)
|
||
|
|
||
|
// RoomService struct
|
||
|
type RoomService struct {
|
||
|
conf *conf.Config
|
||
|
// optionally add other properties here, such as dao
|
||
|
dao *dao.Dao
|
||
|
}
|
||
|
|
||
|
//NewRoomService init
|
||
|
func NewRoomService(c *conf.Config) (s *RoomService) {
|
||
|
s = &RoomService{
|
||
|
conf: c,
|
||
|
dao: dao.New(c),
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// GetInfo implementation
|
||
|
// 获取房间基本信息
|
||
|
// `method:"GET" midware:"auth"`
|
||
|
func (s *RoomService) GetInfo(ctx context.Context, req *v1pb.GetRoomInfoReq) (resp *v1pb.GetRoomInfoResp, err error) {
|
||
|
uid, ok := metadata.Value(ctx, metadata.Mid).(int64)
|
||
|
if uid <= 0 || !ok {
|
||
|
err = ecode.UidError
|
||
|
return
|
||
|
}
|
||
|
uidArr := make([]int64, 0)
|
||
|
uidArr = append(uidArr, uid)
|
||
|
resp = &v1pb.GetRoomInfoResp{}
|
||
|
resp.Uid = uid
|
||
|
resp.FullText = "V等级5级或UP等级10级才能开通粉丝勋章哦~加油!"
|
||
|
resp.OpenMedalLevel = dao.OpenFansMealLevel
|
||
|
resp.MaxLevel = 40
|
||
|
eg := errgroup.Group{}
|
||
|
eg.Go(func() (err error) {
|
||
|
room, err := s.dao.GetRoomInfosByUids(ctx, uidArr)
|
||
|
if err != nil {
|
||
|
err = ecode.CallRoomError
|
||
|
return
|
||
|
}
|
||
|
roomInfo := room[uid]
|
||
|
if roomInfo == nil {
|
||
|
return
|
||
|
}
|
||
|
LockStatus := 0
|
||
|
//if roomInfo.LockTill >= dao.PERMANENT_LOCK_TIME {
|
||
|
// LockStatus = 1
|
||
|
//}
|
||
|
resp.RoomId = roomInfo.RoomId
|
||
|
resp.Title = roomInfo.Title
|
||
|
resp.LiveStatus = roomInfo.LiveStatus
|
||
|
resp.AreaV2Id = roomInfo.AreaV2Id
|
||
|
resp.AreaV2Name = roomInfo.AreaV2Name
|
||
|
resp.LockTime = roomInfo.LockTill
|
||
|
resp.LockStatus = int64(LockStatus)
|
||
|
resp.ParentId = roomInfo.AreaV2ParentId
|
||
|
resp.ParentName = roomInfo.AreaV2ParentName
|
||
|
return
|
||
|
})
|
||
|
eg.Go(func() (err error) {
|
||
|
user, err := s.dao.GetUserInfo(ctx, uidArr)
|
||
|
if err != nil {
|
||
|
err = ecode.CallUserError
|
||
|
return
|
||
|
}
|
||
|
if user == nil {
|
||
|
err = ecode.UserNotFound
|
||
|
return
|
||
|
}
|
||
|
userInfo, ok := user[uid]
|
||
|
if !ok {
|
||
|
err = ecode.UserNotFound
|
||
|
return
|
||
|
}
|
||
|
resp.Face = userInfo.GetInfo().GetFace()
|
||
|
resp.Uname = userInfo.GetInfo().GetUname()
|
||
|
if userInfo.Exp != nil {
|
||
|
resp.MasterScore = userInfo.Exp.Rcost / 100
|
||
|
if userInfo.Exp.MasterLevel != nil {
|
||
|
masterLevel := userInfo.Exp.MasterLevel.Level
|
||
|
masterNextLevel := masterLevel + 1
|
||
|
if masterNextLevel > 40 {
|
||
|
masterNextLevel = 40
|
||
|
}
|
||
|
resp.MasterLevel = masterLevel
|
||
|
resp.MasterLevelColor = userInfo.Exp.MasterLevel.Color
|
||
|
resp.MasterNextLevel = masterNextLevel
|
||
|
if len(userInfo.Exp.MasterLevel.Next) >= 2 {
|
||
|
resp.MasterNextLevelScore = userInfo.Exp.MasterLevel.Next[1]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return
|
||
|
})
|
||
|
eg.Go(func() (err error) {
|
||
|
relation, err := s.dao.GetUserFc(ctx, uid)
|
||
|
if err != nil {
|
||
|
err = ecode.CallRelationError
|
||
|
return
|
||
|
}
|
||
|
resp.FcNum = relation.Fc
|
||
|
return
|
||
|
})
|
||
|
eg.Go(func() (err error) {
|
||
|
fansMedal, err := s.dao.GetFansMedalInfo(ctx, uid)
|
||
|
if err != nil {
|
||
|
err = ecode.CallFansMedalError
|
||
|
return
|
||
|
}
|
||
|
if fansMedal == nil {
|
||
|
return
|
||
|
}
|
||
|
resp.IsMedal = fansMedal.MasterStatus
|
||
|
resp.MedalName = fansMedal.MedalName
|
||
|
resp.MedalRenameStatus = fansMedal.RenameStatus
|
||
|
resp.MedalStatus = fansMedal.Status
|
||
|
return
|
||
|
})
|
||
|
eg.Go(func() (err error) {
|
||
|
identifyStatus, err := s.dao.GetIdentityStatus(ctx, uid)
|
||
|
if err != nil {
|
||
|
err = ecode.CallMainMemberError
|
||
|
return
|
||
|
}
|
||
|
resp.IdentifyStatus = int64(identifyStatus)
|
||
|
return
|
||
|
})
|
||
|
err = eg.Wait()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Create implementation
|
||
|
// 创建房间
|
||
|
// `method:"POST" midware:"auth"`
|
||
|
func (s *RoomService) Create(ctx context.Context, req *v1pb.CreateReq) (resp *v1pb.CreateResp, err error) {
|
||
|
uid, ok := metadata.Value(ctx, metadata.Mid).(int64)
|
||
|
if uid <= 0 || !ok {
|
||
|
err = ecode.UidError
|
||
|
return
|
||
|
}
|
||
|
resp = &v1pb.CreateResp{}
|
||
|
room, err := s.dao.CreateRoom(ctx, uid)
|
||
|
if err != nil {
|
||
|
err = ecode.CallRoomError
|
||
|
return
|
||
|
}
|
||
|
resp.RoomId = room.Roomid
|
||
|
return
|
||
|
}
|