经验系统修复

pull/701/head
miaowuawa 1 year ago
parent 5ce73d6007
commit e7686d597f

@ -51,6 +51,7 @@ type UserProfile struct {
CreatedOn int64 `json:"created_on"`
TweetsCount int `json:"tweets_count"`
Experience int `json:"experience"`
Level int `json:"level"`
}
func (t RelationTyp) String() string {

@ -0,0 +1,27 @@
// Copyright 2023 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package core
import (
"github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr"
)
// UserLevelService 用户等级服务接口
type UserLevelService interface {
// GetLevelByExperience 根据经验值获取用户等级
GetLevelByExperience(experience int) (*dbr.UserLevel, error)
// GetAllLevels 获取所有等级配置
GetAllLevels() ([]*dbr.UserLevel, error)
// CreateLevel 创建等级配置
CreateLevel(level *dbr.UserLevel) (*dbr.UserLevel, error)
// UpdateLevel 更新等级配置
UpdateLevel(level *dbr.UserLevel) error
// DeleteLevel 删除等级配置
DeleteLevel(level int) error
}

@ -0,0 +1,53 @@
// Copyright 2023 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package dbr
import (
"gorm.io/gorm"
)
// UserLevel 用户等级配置模型
type UserLevel struct {
Level int `gorm:"column:level;primaryKey" json:"level"` // 等级
MinExperience int `gorm:"column:min_experience" json:"min_experience"` // 最小经验值
MaxExperience int `gorm:"column:max_experience" json:"max_experience"` // 最大经验值
Name string `gorm:"column:name" json:"name"` // 等级名称
Description string `gorm:"column:description" json:"description"` // 等级描述
}
// TableName 指定表名映射
func (u *UserLevel) TableName() string {
return "p_user_level"
}
// GetByExperience 根据经验值获取等级
func (u *UserLevel) GetByExperience(db *gorm.DB, experience int) (*UserLevel, error) {
var level UserLevel
err := db.Where("min_experience <= ? AND max_experience >= ?", experience, experience).First(&level).Error
return &level, err
}
// GetAll 获取所有等级配置
func (u *UserLevel) GetAll(db *gorm.DB) ([]*UserLevel, error) {
var levels []*UserLevel
err := db.Order("level ASC").Find(&levels).Error
return levels, err
}
// Create 创建等级配置
func (u *UserLevel) Create(db *gorm.DB) (*UserLevel, error) {
err := db.Create(&u).Error
return u, err
}
// Update 更新等级配置
func (u *UserLevel) Update(db *gorm.DB) error {
return db.Model(&UserLevel{}).Where("level = ?", u.Level).Save(u).Error
}
// Delete 删除等级配置
func (u *UserLevel) Delete(db *gorm.DB) error {
return db.Where("level = ?", u.Level).Delete(&UserLevel{}).Error
}

@ -26,6 +26,7 @@ type User struct {
Balance int64 `json:"balance"`
IsAdmin bool `json:"is_admin"`
Experience int `gorm:"-" json:"experience"`
Level int `gorm:"-" json:"level"`
}
type UserFormated struct {
@ -38,6 +39,7 @@ type UserFormated struct {
IsFriend bool `json:"is_friend"`
IsFollowing bool `json:"is_following"`
Experience int `json:"experience"`
Level int `json:"level"`
}
func (u *User) Format() *UserFormated {
@ -50,6 +52,7 @@ func (u *User) Format() *UserFormated {
Avatar: u.Avatar,
IsAdmin: u.IsAdmin,
Experience: u.Experience,
Level: u.Level,
}
}

@ -42,6 +42,7 @@ type dataSrv struct {
core.TrendsManageServantA
core.UserManageService
core.UserMetricServantA
core.UserLevelService
core.ContactManageService
core.FollowingManageService
core.UserRelationService
@ -62,12 +63,14 @@ func NewDataService() (core.DataService, core.VersionInfo) {
pvs := security.NewPhoneVerifyService()
tms := newTweetMetricServentA(db)
ums := newUserMetricServentA(db)
uls := newUserLevelService(db)
cms := newCommentMetricServentA(db)
cis := cache.NewEventCacheIndexSrv(tms)
ds := &dataSrv{
TweetMetricServantA: tms,
CommentMetricServantA: cms,
UserMetricServantA: ums,
UserLevelService: uls,
WalletService: newWalletService(db),
MessageService: newMessageService(db),
TopicService: newTopicService(db),
@ -77,7 +80,7 @@ func NewDataService() (core.DataService, core.VersionInfo) {
CommentService: newCommentService(db),
CommentManageService: newCommentManageService(db),
TrendsManageServantA: newTrendsManageServentA(db),
UserManageService: newUserManageService(db, ums),
UserManageService: newUserManageService(db, ums, uls),
ContactManageService: newContactManageService(db),
FollowingManageService: newFollowingManageService(db),
UserRelationService: newUserRelationService(db),

@ -0,0 +1,54 @@
// Copyright 2023 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package jinzhu
import (
"github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr"
"gorm.io/gorm"
)
var (
_ core.UserLevelService = (*userLevelSrv)(nil)
)
// userLevelSrv 实现用户等级服务接口
type userLevelSrv struct {
db *gorm.DB
}
// newUserLevelService 创建用户等级服务实例
func newUserLevelService(db *gorm.DB) core.UserLevelService {
return &userLevelSrv{
db: db,
}
}
// GetLevelByExperience 根据经验值获取用户等级
func (s *userLevelSrv) GetLevelByExperience(experience int) (*dbr.UserLevel, error) {
level := &dbr.UserLevel{}
return level.GetByExperience(s.db, experience)
}
// GetAllLevels 获取所有等级配置
func (s *userLevelSrv) GetAllLevels() ([]*dbr.UserLevel, error) {
level := &dbr.UserLevel{}
return level.GetAll(s.db)
}
// CreateLevel 创建等级配置
func (s *userLevelSrv) CreateLevel(level *dbr.UserLevel) (*dbr.UserLevel, error) {
return level.Create(s.db)
}
// UpdateLevel 更新等级配置
func (s *userLevelSrv) UpdateLevel(level *dbr.UserLevel) error {
return level.Update(s.db)
}
// DeleteLevel 删除等级配置
func (s *userLevelSrv) DeleteLevel(level int) error {
return (&dbr.UserLevel{Level: level}).Delete(s.db)
}

@ -22,6 +22,7 @@ var (
type userManageSrv struct {
db *gorm.DB
ums core.UserMetricServantA
uls core.UserLevelService
_userProfileJoins string
_userProfileWhere string
@ -32,10 +33,11 @@ type userRelationSrv struct {
db *gorm.DB
}
func newUserManageService(db *gorm.DB, ums core.UserMetricServantA) core.UserManageService {
func newUserManageService(db *gorm.DB, ums core.UserMetricServantA, uls core.UserLevelService) core.UserManageService {
return &userManageSrv{
db: db,
ums: ums,
uls: uls,
_userProfileJoins: fmt.Sprintf("LEFT JOIN %s m ON %s.id=m.user_id", _userMetric_, _user_),
_userProfileWhere: fmt.Sprintf("%s.username=? AND %s.is_del=0", _user_, _user_),
_userProfileColumns: []string{
@ -72,6 +74,16 @@ func (s *userManageSrv) GetUserByID(id int64) (*ms.User, error) {
return nil, err
}
user.Experience = metric.Experience
// 获取用户等级
level, err := s.uls.GetLevelByExperience(user.Experience)
if err == nil {
user.Level = level.Level
} else {
// 默认等级为1
user.Level = 1
}
return user, nil
}
@ -88,6 +100,16 @@ func (s *userManageSrv) GetUserByUsername(username string) (*ms.User, error) {
return user, nil
}
user.Experience = metric.Experience
// 获取用户等级
level, err := s.uls.GetLevelByExperience(user.Experience)
if err == nil {
user.Level = level.Level
} else {
// 默认等级为1
user.Level = 1
}
return user, nil
}
@ -97,6 +119,18 @@ func (s *userManageSrv) UserProfileByName(username string) (res *cs.UserProfile,
Where(s._userProfileWhere, username).
Select(s._userProfileColumns).
First(&res).Error
if err == nil && res != nil {
// 获取用户等级
level, err := s.uls.GetLevelByExperience(res.Experience)
if err == nil {
res.Level = level.Level
} else {
// 默认等级为1
res.Level = 1
}
}
return
}
@ -116,6 +150,15 @@ func (s *userManageSrv) GetUserByPhone(phone string) ([]*ms.User, error) {
metric, err := s.ums.GetUserMetric(u.ID)
if err == nil {
u.Experience = metric.Experience
// 获取用户等级
level, err := s.uls.GetLevelByExperience(u.Experience)
if err == nil {
u.Level = level.Level
} else {
// 默认等级为1
u.Level = 1
}
}
}
@ -136,6 +179,15 @@ func (s *userManageSrv) GetUsersByIDs(ids []int64) ([]*ms.User, error) {
metric, err := s.ums.GetUserMetric(u.ID)
if err == nil {
u.Experience = metric.Experience
// 获取用户等级
level, err := s.uls.GetLevelByExperience(u.Experience)
if err == nil {
u.Level = level.Level
} else {
// 默认等级为1
u.Level = 1
}
}
}
@ -166,6 +218,15 @@ func (s *userManageSrv) GetUsersByKeyword(keyword string) ([]*ms.User, error) {
metric, err := s.ums.GetUserMetric(u.ID)
if err == nil {
u.Experience = metric.Experience
// 获取用户等级
level, err := s.uls.GetLevelByExperience(u.Experience)
if err == nil {
u.Level = level.Level
} else {
// 默认等级为1
u.Level = 1
}
}
}

@ -0,0 +1,8 @@
package web
type UserCheckInResp struct {
// CheckInCount 签到次数
CheckInExp int `json:"check_in_exp"`
// CheckInDays 签到天数
CheckInDays int `json:"check_in_days"`
}

@ -43,6 +43,7 @@ type UserInfoResp struct {
Followings int64 `json:"followings"`
TweetsCount int `json:"tweets_count"`
Experience int `json:"experience"`
Level int `json:"level"`
}
type GetMessagesReq struct {

@ -79,6 +79,7 @@ func (s *coreSrv) GetUserInfo(req *web.UserInfoReq) (*web.UserInfoResp, error) {
Followings: followings,
TweetsCount: user.TweetsCount,
Experience: user.Experience,
Level: user.Level,
}
if user.Phone != "" && len(user.Phone) == 11 {
resp.Phone = user.Phone[0:3] + "****" + user.Phone[7:]

@ -0,0 +1,4 @@
package v1
type CheckInActivitity struct {
}

@ -0,0 +1,2 @@
-- 删除用户等级表
DROP TABLE IF EXISTS `p_user_level`;

@ -0,0 +1,21 @@
-- 创建用户等级表
CREATE TABLE IF NOT EXISTS `p_user_level` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`level` int(11) NOT NULL COMMENT '等级',
`min_experience` int(11) NOT NULL COMMENT '最小经验值',
`max_experience` int(11) NOT NULL COMMENT '最大经验值',
`created_on` int(11) NOT NULL DEFAULT 0,
`updated_on` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_level` (`level`),
UNIQUE KEY `idx_min_experience` (`min_experience`),
UNIQUE KEY `idx_max_experience` (`max_experience`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户等级配置表';
-- 插入初始等级数据
INSERT INTO `p_user_level` (`level`, `min_experience`, `max_experience`, `created_on`, `updated_on`) VALUES
(1, 0, 100, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(2, 101, 300, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(3, 301, 600, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(4, 601, 1000, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(5, 1001, 1500, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
Loading…
Cancel
Save