@@ -15,6 +15,176 @@ import (
"github.com/gofiber/fiber/v2"
)
// PageResource 分页查询当前用户长短效套餐
func PageResource ( c * fiber . Ctx ) error {
authCtx , err := auth . GetAuthCtx ( c ) . PermitUser ( )
if err != nil {
return err
}
req := new ( PageResourceReq )
if err := c . BodyParser ( req ) ; err != nil {
return err
}
short := q . ResourceShort . As ( q . Resource . Short . Name ( ) )
long := q . ResourceLong . As ( q . Resource . Long . Name ( ) )
do := q . Resource . Where ( q . Resource . UserID . Eq ( authCtx . User . ID ) )
if req . ResourceNo != nil && * req . ResourceNo != "" {
do = do . Where ( q . Resource . ResourceNo . Eq ( * req . ResourceNo ) )
}
if req . Active != nil {
do = do . Where ( q . Resource . Active . Is ( * req . Active ) )
}
if req . ResourceType != nil {
do = do . Where ( q . Resource . Type . Eq ( * req . ResourceType ) )
}
if req . Type != nil {
if req . ResourceType != nil {
switch m . ResourceType ( * req . ResourceType ) {
case m . ResourceTypeShort :
do = do . Where ( short . Type . Eq ( * req . Type ) )
case m . ResourceTypeLong :
do = do . Where ( long . Type . Eq ( * req . Type ) )
}
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( * req . Type ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( * req . Type ) ,
) )
}
}
if req . CreateAfter != nil {
do = do . Where ( q . Resource . CreatedAt . Gte ( req . CreateAfter . UTC ( ) ) )
}
if req . CreateBefore != nil {
do = do . Where ( q . Resource . CreatedAt . Lte ( req . CreateBefore . UTC ( ) ) )
}
if req . ExpireAfter != nil {
if req . ResourceType != nil {
switch m . ResourceType ( * req . ResourceType ) {
case m . ResourceTypeShort :
do = do . Where ( short . ExpireAt . Gte ( req . ExpireAfter . UTC ( ) ) )
case m . ResourceTypeLong :
do = do . Where ( long . ExpireAt . Gte ( req . ExpireAfter . UTC ( ) ) )
}
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . ExpireAt . Gte ( req . ExpireAfter . UTC ( ) ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . ExpireAt . Gte ( req . ExpireAfter . UTC ( ) ) ,
) )
}
}
if req . ExpireBefore != nil {
if req . ResourceType != nil {
switch m . ResourceType ( * req . ResourceType ) {
case m . ResourceTypeShort :
do = do . Where ( short . ExpireAt . Lte ( req . ExpireBefore . UTC ( ) ) )
case m . ResourceTypeLong :
do = do . Where ( long . ExpireAt . Lte ( req . ExpireBefore . UTC ( ) ) )
}
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . ExpireAt . Lte ( req . ExpireBefore . UTC ( ) ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . ExpireAt . Lte ( req . ExpireBefore . UTC ( ) ) ,
) )
}
}
if req . Status != nil {
now := time . Now ( ) . UTC ( )
switch * req . Status {
case 1 :
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Gte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . GtCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Gte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . GtCol ( long . Used ) ,
) )
case 2 :
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . LteCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . LteCol ( long . Used ) ,
) )
}
}
resource , err := q . Resource . Where ( do ) .
Joins ( q . Resource . Short , q . Resource . Long ) .
Order ( q . Resource . CreatedAt . Desc ( ) ) .
Offset ( req . GetOffset ( ) ) .
Limit ( req . GetLimit ( ) ) .
Find ( )
if err != nil {
return err
}
var total int64
if len ( resource ) < req . GetLimit ( ) {
total = int64 ( len ( resource ) + req . GetOffset ( ) )
} else {
total , err = q . Resource .
Joins ( q . Resource . Short , q . Resource . Long ) .
Where ( do ) .
Count ( )
if err != nil {
return err
}
}
return c . JSON ( core . PageResp {
Total : int ( total ) ,
Page : req . GetPage ( ) ,
Size : req . GetSize ( ) ,
List : resource ,
} )
}
type PageResourceReq struct {
core . PageReq
ResourceNo * string ` json:"resource_no" `
Active * bool ` json:"active" `
ResourceType * int ` json:"resource_type" ` // 1 - 短效动态, 2 - 长效动态
Type * int ` json:"type" ` // 1 - 包时, 2 - 包量
CreateAfter * time . Time ` json:"create_after" `
CreateBefore * time . Time ` json:"create_before" `
ExpireAfter * time . Time ` json:"expire_after" `
ExpireBefore * time . Time ` json:"expire_before" `
Status * int ` json:"status" ` // 0 - 全部, 1 - 有效, 2 - 过期
}
// PageResourceShort 分页查询当前用户短效套餐
func PageResourceShort ( c * fiber . Ctx ) error {
// 检查权限
@@ -209,6 +379,148 @@ type PageResourceLongReq struct {
Status * int ` json:"status" ` // 0 - 全部, 1 - 有效, 2 - 过期
}
// PageResourceByAdmin 分页查询全部长短效套餐
func PageResourceByAdmin ( c * fiber . Ctx ) error {
_ , err := auth . GetAuthCtx ( c ) . PermitAdmin ( core . ScopeResourceRead )
if err != nil {
return err
}
var req PageResourceByAdminReq
if err = g . Validator . ParseBody ( c , & req ) ; err != nil {
return err
}
short := q . ResourceShort . As ( "Short" )
long := q . ResourceLong . As ( "Long" )
do := q . Resource . Where ( )
if req . UserPhone != nil {
do = do . Where ( q . User . As ( "User" ) . Phone . Eq ( * req . UserPhone ) )
}
if req . ResourceNo != nil {
do = do . Where ( q . Resource . ResourceNo . Eq ( * req . ResourceNo ) )
}
if req . Active != nil {
do = do . Where ( q . Resource . Active . Is ( * req . Active ) )
}
if req . ResourceType != nil {
do = do . Where ( q . Resource . Type . Eq ( * req . ResourceType ) )
}
if req . Mode != nil {
if req . ResourceType != nil {
switch m . ResourceType ( * req . ResourceType ) {
case m . ResourceTypeShort :
do = do . Where ( short . Type . Eq ( * req . Mode ) )
case m . ResourceTypeLong :
do = do . Where ( long . Type . Eq ( * req . Mode ) )
}
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( * req . Mode ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( * req . Mode ) ,
) )
}
}
if req . CreatedAtStart != nil {
do = do . Where ( q . Resource . CreatedAt . Gte ( req . CreatedAtStart . UTC ( ) ) )
}
if req . CreatedAtEnd != nil {
do = do . Where ( q . Resource . CreatedAt . Lte ( req . CreatedAtEnd . UTC ( ) ) )
}
if req . Expired != nil {
now := time . Now ( ) . UTC ( )
if * req . Expired {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . LteCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . LteCol ( long . Used ) ,
) )
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Gt ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . GtCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Gt ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . GtCol ( long . Used ) ,
) )
}
}
list , total , err := q . Resource .
Joins ( q . Resource . User , q . Resource . Short , q . Resource . Long , q . Resource . Short . Sku , q . Resource . Long . Sku ) .
Select (
q . Resource . ALL ,
q . User . As ( "User" ) . Phone . As ( "User__phone" ) ,
q . User . As ( "User" ) . Name . As ( "User__name" ) ,
short . Type . As ( "Short__type" ) ,
short . Live . As ( "Short__live" ) ,
short . Quota . As ( "Short__quota" ) ,
short . Used . As ( "Short__used" ) ,
short . Daily . As ( "Short__daily" ) ,
short . LastAt . As ( "Short__last_at" ) ,
short . ExpireAt . As ( "Short__expire_at" ) ,
q . ProductSku . As ( "Short__Sku" ) . Name . As ( "Short__Sku__name" ) ,
long . Type . As ( "Long__type" ) ,
long . Live . As ( "Long__live" ) ,
long . Quota . As ( "Long__quota" ) ,
long . Used . As ( "Long__used" ) ,
long . Daily . As ( "Long__daily" ) ,
long . LastAt . As ( "Long__last_at" ) ,
long . ExpireAt . As ( "Long__expire_at" ) ,
q . ProductSku . As ( "Long__Sku" ) . Name . As ( "Long__Sku__name" ) ,
) .
Where ( do ) .
Order ( q . Resource . CreatedAt . Desc ( ) ) .
FindByPage ( req . GetOffset ( ) , req . GetLimit ( ) )
if err != nil {
return err
}
return c . JSON ( core . PageResp {
List : list ,
Total : int ( total ) ,
Page : req . GetPage ( ) ,
Size : req . GetSize ( ) ,
} )
}
type PageResourceByAdminReq struct {
core . PageReq
UserPhone * string ` json:"user_phone" form:"user_phone" `
ResourceNo * string ` json:"resource_no" form:"resource_no" `
Active * bool ` json:"active" form:"active" `
ResourceType * int ` json:"resource_type" form:"resource_type" `
Mode * int ` json:"mode" form:"mode" `
CreatedAtStart * time . Time ` json:"created_at_start" form:"created_at_start" `
CreatedAtEnd * time . Time ` json:"created_at_end" form:"created_at_end" `
Expired * bool ` json:"expired" form:"expired" `
}
// PageResourceShortByAdmin 分页查询全部短效套餐
func PageResourceShortByAdmin ( c * fiber . Ctx ) error {
_ , err := auth . GetAuthCtx ( c ) . PermitAdmin ( core . ScopeResourceShortRead )
@@ -393,6 +705,145 @@ type PageResourceLongByAdminReq struct {
Expired * bool ` json:"expired" form:"expired" `
}
// PageResourceOfUserByAdmin 分页查询指定用户的长短效套餐
func PageResourceOfUserByAdmin ( c * fiber . Ctx ) error {
_ , err := auth . GetAuthCtx ( c ) . PermitAdmin ( core . ScopeResourceReadOfUser )
if err != nil {
return err
}
var req PageResourceOfUserByAdminReq
if err = g . Validator . ParseBody ( c , & req ) ; err != nil {
return err
}
short := q . ResourceShort . As ( "Short" )
long := q . ResourceLong . As ( "Long" )
do := q . Resource . Where ( q . Resource . UserID . Eq ( req . UserID ) )
if req . ResourceNo != nil {
do = do . Where ( q . Resource . ResourceNo . Eq ( * req . ResourceNo ) )
}
if req . Active != nil {
do = do . Where ( q . Resource . Active . Is ( * req . Active ) )
}
if req . ResourceType != nil {
do = do . Where ( q . Resource . Type . Eq ( * req . ResourceType ) )
}
if req . Mode != nil {
if req . ResourceType != nil {
switch m . ResourceType ( * req . ResourceType ) {
case m . ResourceTypeShort :
do = do . Where ( short . Type . Eq ( * req . Mode ) )
case m . ResourceTypeLong :
do = do . Where ( long . Type . Eq ( * req . Mode ) )
}
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( * req . Mode ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( * req . Mode ) ,
) )
}
}
if req . CreatedAtStart != nil {
do = do . Where ( q . Resource . CreatedAt . Gte ( req . CreatedAtStart . UTC ( ) ) )
}
if req . CreatedAtEnd != nil {
do = do . Where ( q . Resource . CreatedAt . Lte ( req . CreatedAtEnd . UTC ( ) ) )
}
if req . Expired != nil {
now := time . Now ( ) . UTC ( )
if * req . Expired {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . LteCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Lte ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . LteCol ( long . Used ) ,
) )
} else {
do = do . Where ( q . Resource . Where (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeTime ) ) ,
short . ExpireAt . Gt ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeShort ) ) ,
short . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
short . Quota . GtCol ( short . Used ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeTime ) ) ,
long . ExpireAt . Gt ( now ) ,
) . Or (
q . Resource . Type . Eq ( int ( m . ResourceTypeLong ) ) ,
long . Type . Eq ( int ( m . ResourceModeQuota ) ) ,
long . Quota . GtCol ( long . Used ) ,
) )
}
}
list , total , err := q . Resource .
Joins ( q . Resource . User , q . Resource . Short , q . Resource . Long , q . Resource . Short . Sku , q . Resource . Long . Sku ) .
Select (
q . Resource . ALL ,
q . User . As ( "User" ) . Phone . As ( "User__phone" ) ,
q . User . As ( "User" ) . Name . As ( "User__name" ) ,
short . Type . As ( "Short__type" ) ,
short . Live . As ( "Short__live" ) ,
short . Quota . As ( "Short__quota" ) ,
short . Used . As ( "Short__used" ) ,
short . Daily . As ( "Short__daily" ) ,
short . LastAt . As ( "Short__last_at" ) ,
short . ExpireAt . As ( "Short__expire_at" ) ,
q . ProductSku . As ( "Short__Sku" ) . Name . As ( "Short__Sku__name" ) ,
long . Type . As ( "Long__type" ) ,
long . Live . As ( "Long__live" ) ,
long . Quota . As ( "Long__quota" ) ,
long . Used . As ( "Long__used" ) ,
long . Daily . As ( "Long__daily" ) ,
long . LastAt . As ( "Long__last_at" ) ,
long . ExpireAt . As ( "Long__expire_at" ) ,
q . ProductSku . As ( "Long__Sku" ) . Name . As ( "Long__Sku__name" ) ,
) .
Where ( do ) .
Order ( q . Resource . CreatedAt . Desc ( ) ) .
FindByPage ( req . GetOffset ( ) , req . GetLimit ( ) )
if err != nil {
return err
}
return c . JSON ( core . PageResp {
List : list ,
Total : int ( total ) ,
Page : req . GetPage ( ) ,
Size : req . GetSize ( ) ,
} )
}
type PageResourceOfUserByAdminReq struct {
core . PageReq
UserID int32 ` json:"user_id" validate:"required" `
ResourceNo * string ` json:"resource_no" `
Active * bool ` json:"active" `
ResourceType * int ` json:"resource_type" `
Mode * int ` json:"mode" `
CreatedAtStart * time . Time ` json:"created_at_start" `
CreatedAtEnd * time . Time ` json:"created_at_end" `
Expired * bool ` json:"expired" `
}
// PageResourceShortOfUserByAdmin 分页查询指定用户的短效套餐
func PageResourceShortOfUserByAdmin ( c * fiber . Ctx ) error {
_ , err := auth . GetAuthCtx ( c ) . PermitAdmin ( core . ScopeResourceShortReadOfUser )