查询当前登录用户排名,

This commit is contained in:
chy
2025-06-10 09:50:23 +08:00
parent 2819b9e9c2
commit 81c2769b92
22 changed files with 505 additions and 33 deletions

4
.gitignore vendored
View File

@ -16,4 +16,6 @@ manifest/output/
temp/
temp.yaml
bin
arenax
arenax
*/*/config.yaml
*/config.yaml

48
api/game/v1/game.go Normal file
View File

@ -0,0 +1,48 @@
package v1
import "github.com/gogf/gf/v2/frame/g"
type ListReq struct {
g.Meta `path:"/game" method:"get" tags:"Game" summary:"获取游戏列表"`
Page int `json:"page" dc:"页数"`
Size int `json:"size" dc:"每页数量"`
}
type ListRes struct {
List interface{} `json:"list" dc:"游戏列表"`
Total int `json:"total" dc:"总数"`
}
type CreateReq struct {
g.Meta `path:"/game" method:"post" tags:"Game" summary:"创建游戏"`
GameID int64 `json:"gameId" v:"required#游戏ID不能为空" dc:"游戏ID"`
GameName string `json:"gameName" v:"required#游戏名称不能为空" dc:"游戏名称"`
GameCode string `json:"gameCode" v:"required#游戏代号不能为空" dc:"游戏代号"`
Avatar string `json:"avatar" dc:"游戏图标"`
}
type CreateRes struct {
Success bool `json:"success" dc:"是否成功"`
}
type UpdateReq struct {
g.Meta `path:"/game" method:"put" tags:"Game" summary:"更新游戏"`
GameID int64 `json:"gameId" v:"required#游戏ID不能为空" dc:"游戏ID"`
GameName string `json:"gameName" v:"required#游戏名称不能为空" dc:"游戏名称"`
GameCode string `json:"gameCode" v:"required#游戏代号不能为空" dc:"游戏代号"`
Avatar string `json:"avatar" dc:"游戏图标"`
Id int64 `json:"id" v:"required#游戏ID不能为空" dc:"ID"`
}
type UpdateRes struct {
Success bool `json:"success" dc:"是否成功"`
}
type DeleteReq struct {
g.Meta `path:"/game/{id}" method:"delete" tags:"Game" summary:"删除游戏"`
ID int64 `json:"Id" v:"required#ID不能为空" dc:"ID"`
}
type DeleteRes struct {
Success bool `json:"success" dc:"是否成功"`
}

View File

@ -2,17 +2,17 @@ package v1
import "github.com/gogf/gf/v2/frame/g"
type ListReq struct {
}
type RankingReq struct {
g.Meta `path:"/task/ranking" method:"get" tags:"Task" summary:"任务排行榜"`
StoreId int `json:"storeId" v:"required#请选择店铺" dc:"门店id"`
Page int `json:"page" dc:"页数"`
Size int `json:"size" dc:"条数"`
Type int `json:"type" v:"required#请选择排行榜类型" dc:"排行榜类型"`
}
type RankingRes struct {
}
type ListReq struct {
}
type ListRes struct {
List interface{} `json:"list"`
Total int `json:"total"`
}

View File

@ -8,10 +8,12 @@ import (
"server/internal/controller/admin"
"server/internal/controller/auth"
"server/internal/controller/feedback"
"server/internal/controller/game"
"server/internal/controller/merchant"
"server/internal/controller/reward"
"server/internal/controller/rewardType"
"server/internal/controller/role"
"server/internal/controller/task"
"server/internal/controller/upload"
"server/internal/controller/user"
"server/internal/controller/wx"
@ -44,6 +46,8 @@ var (
feedback.NewV1(),
user.NewV1(),
reward.NewV1(),
task.NewV1(),
game.NewV1(),
)
})
})

View File

@ -10,7 +10,7 @@ import (
func (c *ControllerV1) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) {
out, err := service.Game().DeleteGame(ctx, &model.DeleteGameIn{GameId: req.GameID})
out, err := service.Game().DeleteGame(ctx, &model.DeleteGameIn{Id: req.ID})
if err != nil {
return nil, err
}

View File

@ -9,7 +9,8 @@ import (
)
func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) {
out, err := service.Game().GameList(ctx, &model.GameListIn{})
out, err := service.Game().GameList(ctx, &model.GameListIn{req.Page, req.Size})
if err != nil {
return nil, err
}

View File

@ -14,6 +14,7 @@ func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.U
GameName: req.GameName,
GameCode: req.GameCode,
Avatar: req.Avatar,
Id: req.Id,
})
if err != nil {
return nil, err

View File

@ -10,11 +10,14 @@ import (
func (c *ControllerV1) Ranking(ctx context.Context, req *v1.RankingReq) (res *v1.RankingRes, err error) {
//operatorId := g.RequestFromCtx(ctx).GetCtxVar("id").Int()
operatorId := 4
out, err := service.Task().UserTaskRankingList(ctx, &model.UserTaskRankingIn{
Page: req.Page,
Size: req.Size,
StoreId: req.StoreId,
Type: req.Type,
Page: req.Page,
Size: req.Size,
StoreId: req.StoreId,
Type: req.Type,
OperatorId: operatorId,
})
if err != nil {

View File

@ -21,9 +21,10 @@ type GamesDao struct {
// GamesColumns defines and stores column names for the table games.
type GamesColumns struct {
Id string //
GameId string // 腾讯游戏 id
GameName string // 游戏名称
GameaCode string // 游戏代号
GameCode string // 游戏代号
Avatar string // 图标
CreatedAt string // 创建时间
UpdatedAt string // 更新时间
@ -32,9 +33,10 @@ type GamesColumns struct {
// gamesColumns holds the columns for the table games.
var gamesColumns = GamesColumns{
Id: "id",
GameId: "game_id",
GameName: "game_name",
GameaCode: "gamea_code",
GameCode: "game_code",
Avatar: "avatar",
CreatedAt: "created_at",
UpdatedAt: "updated_at",

View File

@ -13,9 +13,10 @@ import (
// TasksDao is the data access object for the table tasks.
type TasksDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns TasksColumns // columns contains all the column names of Table for convenient usage.
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns TasksColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// TasksColumns defines and stores column names for the table tasks.
@ -37,11 +38,12 @@ var tasksColumns = TasksColumns{
}
// NewTasksDao creates and returns a new DAO object for table data access.
func NewTasksDao() *TasksDao {
func NewTasksDao(handlers ...gdb.ModelHandler) *TasksDao {
return &TasksDao{
group: "default",
table: "tasks",
columns: tasksColumns,
group: "default",
table: "tasks",
columns: tasksColumns,
handlers: handlers,
}
}
@ -67,7 +69,11 @@ func (dao *TasksDao) Group() string {
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *TasksDao) Ctx(ctx context.Context) *gdb.Model {
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.

View File

@ -13,9 +13,10 @@ import (
// UserTasksDao is the data access object for the table user_tasks.
type UserTasksDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns UserTasksColumns // columns contains all the column names of Table for convenient usage.
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns UserTasksColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// UserTasksColumns defines and stores column names for the table user_tasks.
@ -29,6 +30,7 @@ type UserTasksColumns struct {
UpdatedAt string // 更新时间
CompletedAt string // 任务完成时间
DeletedAt string // 软删除时间戳
StoreId string // 门店 id
}
// userTasksColumns holds the columns for the table user_tasks.
@ -42,14 +44,16 @@ var userTasksColumns = UserTasksColumns{
UpdatedAt: "updated_at",
CompletedAt: "completed_at",
DeletedAt: "deleted_at",
StoreId: "store_id",
}
// NewUserTasksDao creates and returns a new DAO object for table data access.
func NewUserTasksDao() *UserTasksDao {
func NewUserTasksDao(handlers ...gdb.ModelHandler) *UserTasksDao {
return &UserTasksDao{
group: "default",
table: "user_tasks",
columns: userTasksColumns,
group: "default",
table: "user_tasks",
columns: userTasksColumns,
handlers: handlers,
}
}
@ -75,7 +79,11 @@ func (dao *UserTasksDao) Group() string {
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *UserTasksDao) Ctx(ctx context.Context) *gdb.Model {
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.

149
internal/logic/game/game.go Normal file
View File

@ -0,0 +1,149 @@
package game
import (
"context"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
)
type sGame struct {
}
func New() service.IGame {
return &sGame{}
}
func init() {
service.RegisterGame(New())
}
func (s *sGame) GameList(ctx context.Context, in *model.GameListIn) (out *model.GameListOut, err error) {
list := make([]model.Game, 0)
var total int
err = dao.Games.Ctx(ctx).Page(in.Page, in.Size).ScanAndCount(&list, &total, false)
if err != nil {
return nil, ecode.Fail.Sub("游戏列表获取失败")
}
return &model.GameListOut{
List: list,
Total: total,
}, nil
}
func (s *sGame) CreateGame(ctx context.Context, in *model.AddGameIn) (out *model.AddGameOut, err error) {
// 判断游戏是否存在
exist, err := dao.Games.Ctx(ctx).Where(do.Games{GameId: in.GameId}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("新增游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏ID已存在")
}
exist, err = dao.Games.Ctx(ctx).Where(do.Games{GameName: in.GameName}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("新增游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏名称已存在")
}
exist, err = dao.Games.Ctx(ctx).Where(do.Games{GameCode: in.GameCode}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("新增游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏编码已存在")
}
_, err = dao.Games.Ctx(ctx).Insert(do.Games{
GameId: in.GameId,
GameName: in.GameName,
GameCode: in.GameCode,
Avatar: in.Avatar,
})
if err != nil {
return nil, ecode.Fail.Sub("新增游戏失败")
}
return &model.AddGameOut{Success: true}, nil
}
func (s *sGame) UpdateGame(ctx context.Context, in *model.UpdateGameIn) (out *model.UpdateGameOut, err error) {
// 判断游戏是否存在
exist, err := dao.Games.Ctx(ctx).Where(do.Games{Id: in.Id}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("修改游戏异常")
}
if !exist {
return nil, ecode.Params.Sub("该游戏不存在")
}
exist, err = dao.Games.Ctx(ctx).Where(do.Games{GameId: in.GameId}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("修改游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏ID已存在")
}
exist, err = dao.Games.Ctx(ctx).Where(do.Games{GameName: in.GameName}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("修改游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏名称已存在")
}
exist, err = dao.Games.Ctx(ctx).Where(do.Games{GameCode: in.GameCode}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("修改游戏异常")
}
if exist {
return nil, ecode.Params.Sub("游戏编码已存在")
}
_, err = dao.Games.Ctx(ctx).Where(do.Games{Id: in.Id}).Update(do.Games{
GameId: in.GameId,
GameName: in.GameName,
GameCode: in.GameCode,
Avatar: in.Avatar,
})
if err != nil {
return nil, ecode.Fail.Sub("修改游戏失败")
}
return &model.UpdateGameOut{Success: true}, nil
}
func (s *sGame) DeleteGame(ctx context.Context, in *model.DeleteGameIn) (out *model.DeleteGameOut, err error) {
// 判断是否存在
exist, err := dao.Games.Ctx(ctx).Where(do.Games{Id: in.Id}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("删除该游戏异常")
}
if !exist {
return nil, ecode.Params.Sub("游戏不存在")
}
_, err = dao.Games.Ctx(ctx).Delete(do.Games{Id: in.Id})
if err != nil {
return nil, ecode.Fail.Sub("删除游戏失败")
}
return &model.DeleteGameOut{Success: true}, nil
}

View File

@ -7,6 +7,7 @@ package logic
import (
_ "server/internal/logic/admin"
_ "server/internal/logic/feedback"
_ "server/internal/logic/game"
_ "server/internal/logic/merchant"
_ "server/internal/logic/merchantAdmin"
_ "server/internal/logic/reward"
@ -14,6 +15,7 @@ import (
_ "server/internal/logic/role"
_ "server/internal/logic/store"
_ "server/internal/logic/storeAdmin"
_ "server/internal/logic/task"
_ "server/internal/logic/upload"
_ "server/internal/logic/user"
)

129
internal/logic/task/task.go Normal file
View File

@ -0,0 +1,129 @@
package task
import (
"context"
"fmt"
"server/internal/dao"
"server/internal/model"
"server/internal/service"
"server/utility/ecode"
"sort"
"time"
)
type sTask struct{}
func New() service.ITask {
return &sTask{}
}
func init() {
service.RegisterTask(New())
}
func (s *sTask) UserTaskRankingList(ctx context.Context, in *model.UserTaskRankingIn) (out *model.UserTaskRankingOut, err error) {
// 判断排行类型
var start, end time.Time
if in.Type == 1 {
// 日
now := time.Now()
// 当天开始时间
start = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
// 当天结束时间
end = time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location())
fmt.Println("开始时间:", start)
fmt.Println("结束时间:", end)
} else if in.Type == 2 {
// 周
now := time.Now()
loc := now.Location()
weekday := int(now.Weekday())
if weekday == 0 { // 周日是0
weekday = 7
}
// 本周开始时间(周一 00:00:00
start = time.Date(now.Year(), now.Month(), now.Day()-weekday+1, 0, 0, 0, 0, loc)
// 本周结束时间(周日 23:59:59
end = time.Date(now.Year(), now.Month(), now.Day()-weekday+7, 23, 59, 59, 0, loc)
} else if in.Type == 3 {
// 月
now := time.Now()
loc := now.Location()
// 本月开始时间1号 00:00:00
start = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, loc)
// 下月1号
nextMonth := start.AddDate(0, 1, 0)
// 本月结束时间(本月最后一天 23:59:59
end = nextMonth.Add(-time.Second)
} else {
return nil, ecode.Params.Sub("排行方式错误")
}
m := dao.UserTasks.Ctx(ctx)
// 构建查询条件
if in.Page == 0 {
in.Page = 1
}
if in.Size == 0 {
in.Size = 10
}
if in.StoreId > 0 {
m = m.Where(dao.UserTasks.Columns().StoreId, in.StoreId)
}
list := make([]model.UserTaskRankingArgs, 0)
var total int
// SELECT `uid`,`nickname` FROM `user` ORDER BY `uid` asc
err = m.Page(in.Page, in.Size).LeftJoin(dao.Users.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`user_id`", dao.Users.Table(), dao.UserTasks.Table())).
Fields("username,avatar,count(*) num").Where(dao.UserTasks.Columns().Status, 3).
WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id").
ScanAndCount(&list, &total, false)
if err != nil {
return nil, ecode.Fail.Sub("查询排行榜失败")
}
// 判断登录查询当前任务完成数量,排名
var completedDay, rankingDay int
var loginUserRanking []model.LoginUserRanking
if in.OperatorId != 0 {
err := dao.UserTasks.Ctx(ctx).Fields("count(*) num").Where(dao.UserTasks.Columns().UserId, in.OperatorId).Where(dao.UserTasks.Columns().Status, 3).
WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id").
Scan(&completedDay)
if err != nil {
return nil, ecode.Fail.Sub("查询当前登录用户完成数失败")
}
err = dao.UserTasks.Ctx(ctx).Fields("user_id,count(*) num").Where(dao.UserTasks.Columns().Status, 3).
WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id").
Scan(&loginUserRanking)
if err != nil {
return nil, ecode.Fail.Sub("查询当前登录用户排名失败")
}
// 查找当前登录用户排名
index := sort.Search(len(loginUserRanking), func(i int) bool {
return loginUserRanking[i].Num >= completedDay
})
//for index, ranking := range loginUserRanking {
// if ranking.UserId == in.OperatorId {
// rankingDay = index + 1
// break
// }
//}
rankingDay = index + 1
}
return &model.UserTaskRankingOut{
List: list,
Total: total,
CompletedDay: completedDay,
RankingDay: rankingDay,
}, nil
}

View File

@ -31,7 +31,7 @@ func Auth(r *ghttp.Request) {
ctx := r.GetCtx()
if token == "" {
glog.Infof(ctx, "未登录用户访问: %s %s", r.URL.Path, r.Method)
r.SetCtxVar("permission", "guest")
r.SetCtxVar("role", "guest")
} else {
if !strings.HasPrefix(token, "Bearer ") {
Exit(r, ecode.InvalidOperation.Sub("无效的token格式"))

View File

@ -12,9 +12,10 @@ import (
// Games is the golang structure of table games for DAO operations like Where/Data.
type Games struct {
g.Meta `orm:"table:games, do:true"`
Id interface{} //
GameId interface{} // 腾讯游戏 id
GameName interface{} // 游戏名称
GameaCode interface{} // 游戏代号
GameCode interface{} // 游戏代号
Avatar interface{} // 图标
CreatedAt *gtime.Time // 创建时间
UpdatedAt *gtime.Time // 更新时间

View File

@ -21,4 +21,5 @@ type UserTasks struct {
UpdatedAt *gtime.Time // 更新时间
CompletedAt *gtime.Time // 任务完成时间
DeletedAt *gtime.Time // 软删除时间戳
StoreId interface{} // 门店 id
}

View File

@ -10,9 +10,10 @@ import (
// Games is the golang structure for table games.
type Games struct {
Id int64 `json:"id" orm:"id" description:""` //
GameId int64 `json:"gameId" orm:"game_id" description:"腾讯游戏 id"` // 腾讯游戏 id
GameName string `json:"gameName" orm:"game_name" description:"游戏名称"` // 游戏名称
GameaCode string `json:"gameaCode" orm:"gamea_code" description:"游戏代号"` // 游戏代号
GameCode string `json:"gameCode" orm:"game_code" description:"游戏代号"` // 游戏代号
Avatar string `json:"avatar" orm:"avatar" description:"图标"` // 图标
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间

View File

@ -19,4 +19,5 @@ type UserTasks struct {
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
StoreId int64 `json:"storeId" orm:"store_id" description:"门店 id"` // 门店 id
}

57
internal/model/game.go Normal file
View File

@ -0,0 +1,57 @@
package model
type Game struct {
GameId int64 `json:"gameId" orm:"game_id"` // 腾讯游戏 id
GameName string `json:"gameName" orm:"game_name"` // 游戏名称
GameCode string `json:"gameCode" orm:"game_code"` // 游戏代号
Avatar string `json:"avatar" orm:"avatar"` // 图标
}
// GameListIn 游戏列表入参
type GameListIn struct {
Page int `json:"page"`
Size int `json:"size"`
}
// GameListOut 游戏列表出参
type GameListOut struct {
List interface{} `json:"list" dc:"游戏列表"`
Total int `json:"total" dc:"总数"`
}
// AddGameIn 新增游戏入参
type AddGameIn struct {
GameName string `json:"gameName"`
GameCode string `json:"gameCode"`
Avatar string `json:"avatar"`
GameId int64 `json:"gameId"`
}
// AddGameOut 新增游戏出参
type AddGameOut struct {
Success bool `json:"success" dc:"是否成功"`
}
// UpdateGameIn 更新游戏入参
type UpdateGameIn struct {
GameName string `json:"gameName"`
GameCode string `json:"gameCode"`
Avatar string `json:"avatar"`
GameId int64 `json:"gameId"`
Id int64 `json:"id"`
}
// UpdateGameOut 更新游戏出参
type UpdateGameOut struct {
Success bool `json:"success" dc:"是否成功"`
}
// DeleteGameIn 删除游戏入参
type DeleteGameIn struct {
Id int64 `json:"Id"`
}
// DeleteGameOut 删除游戏出参
type DeleteGameOut struct {
Success bool `json:"success" dc:"是否成功"`
}

View File

@ -0,0 +1,48 @@
package model
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
type UserTaskRanking struct {
g.Meta `orm:"table:task"`
Id int `orm:"column:id" json:"id"` //
UserId int `orm:"column:user_id" json:"userId"` // 用户 id
TaskId int `orm:"column:task_id" json:"taskId"` // 任务 id
Status int `orm:"column:status" json:"status"` // 状态 1:待完成 2:完成
SerialNumber string `orm:"column:serial_number" json:"serialNumber"` // 流水号
StoreId int `orm:"column:store_id" json:"storeId"` // 门店 id
CreatedAt *gtime.Time `orm:"column:created_at" json:"createdAt"`
UpdatedAt *gtime.Time `orm:"column:updated_at" json:"updatedAt"`
CompletedAT *gtime.Time `orm:"column:completed_at" json:"completedAt"`
DeletedAt *gtime.Time `orm:"column:deleted_at" json:"deletedAt"`
}
// UserTaskRankingIn 任务排行榜入参
type UserTaskRankingIn struct {
Page int
Size int
StoreId int
Type int // 排行榜类型 1:日 2:周 3
OperatorId int
}
// UserTaskRankingOut 用户排行榜出参
type UserTaskRankingOut struct {
List []UserTaskRankingArgs
Total int
CompletedDay int
RankingDay int
}
type UserTaskRankingArgs struct {
UserName string `orm:"username" json:"username"`
Avatar string `orm:"avatar" json:"avatar"`
Total int `orm:"num" json:"num"`
}
type LoginUserRanking struct {
UserId int `orm:"user_id" json:"user_id"`
Num int `orm:"num" json:"num"`
}

View File

@ -41,6 +41,10 @@ func init() {
// 游客
{
// 任务
enforcer.AddPolicy("guest", "/x/task/ranking", "GET", "获取排行榜")
// 游戏列表
enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表")
}
// 用户
{
@ -98,6 +102,10 @@ func init() {
enforcer.AddPolicy("admin", "/x/reward/system", "GET", "管理员获取系统奖励列表")
enforcer.AddPolicy("admin", "/x/reward/system/*", "DELETE", "管理员删除系统单个奖励")
enforcer.AddPolicy("admin", "/x/reward/system", "PUT", "管理员修改单个系统奖励")
enforcer.AddPolicy("admin", "/x/game", "POST", "管理员创建门店奖励")
enforcer.AddPolicy("admin", "/x/game/*", "DELETE", "管理员删除门店单个奖励")
enforcer.AddPolicy("admin", "/x/game", "PUT", "管理员修改单个门店奖励")
}
instance = &myCasbin{Enforcer: enforcer}