优化与代理服务的密钥存储与传递方式;更新套餐,账单查询对长效套餐的支持,新增长效套餐分页查询接口
This commit is contained in:
@@ -53,7 +53,7 @@ func ListBill(c *fiber.Ctx) error {
|
||||
|
||||
bills, err := q.Bill.Where(do).
|
||||
Preload(q.Bill.Resource, q.Bill.Trade, q.Bill.Refund).
|
||||
Preload(q.Bill.Resource.Short).
|
||||
Preload(q.Bill.Resource.Short, q.Bill.Resource.Long).
|
||||
Order(q.Bill.CreatedAt.Desc()).
|
||||
Offset(req.GetOffset()).
|
||||
Limit(req.GetLimit()).
|
||||
|
||||
@@ -2,6 +2,7 @@ package handlers
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base32"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"log/slog"
|
||||
auth2 "platform/web/auth"
|
||||
@@ -44,7 +45,16 @@ func OnlineProxy(c *fiber.Ctx) (err error) {
|
||||
|
||||
// 创建代理
|
||||
var ip = c.Context().RemoteIP()
|
||||
var secret = rand.Text()
|
||||
|
||||
var secretBytes = make([]byte, 16)
|
||||
if _, err := rand.Read(secretBytes); err != nil {
|
||||
return err
|
||||
}
|
||||
var secret = base32.StdEncoding.
|
||||
WithPadding(base32.NoPadding).
|
||||
EncodeToString(secretBytes)
|
||||
|
||||
slog.Debug("生成随机密钥", "ip", ip, "secret", secret)
|
||||
var proxy = &m.Proxy{
|
||||
Name: req.Name,
|
||||
Version: int32(req.Version),
|
||||
@@ -53,7 +63,7 @@ func OnlineProxy(c *fiber.Ctx) (err error) {
|
||||
Secret: secret,
|
||||
Status: 1,
|
||||
}
|
||||
err = q.Proxy.
|
||||
err = q.Proxy.Debug().
|
||||
Clauses(clause.OnConflict{
|
||||
UpdateAll: true,
|
||||
Columns: []clause.Column{
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
// region ListResourceShort
|
||||
// region 查询套餐
|
||||
|
||||
type ListResourceShortReq struct {
|
||||
core.PageReq
|
||||
@@ -28,7 +28,6 @@ type ListResourceShortReq struct {
|
||||
ExpireBefore *time.Time `json:"expire_before"`
|
||||
}
|
||||
|
||||
// ListResourceShort 获取套餐列表
|
||||
func ListResourceShort(c *fiber.Ctx) error {
|
||||
// 检查权限
|
||||
authContext, err := auth.Protect(c, []auth.PayloadType{auth.PayloadUser}, []string{})
|
||||
@@ -43,8 +42,10 @@ func ListResourceShort(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
// 查询套餐列表
|
||||
do := q.Resource.
|
||||
Where(q.Resource.UserID.Eq(authContext.Payload.Id))
|
||||
do := q.Resource.Where(
|
||||
q.Resource.UserID.Eq(authContext.Payload.Id),
|
||||
q.Resource.Type.Eq(int32(resource2.TypeShort)),
|
||||
)
|
||||
if req.ResourceNo != nil && *req.ResourceNo != "" {
|
||||
do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
||||
}
|
||||
@@ -67,7 +68,7 @@ func ListResourceShort(c *fiber.Ctx) error {
|
||||
do.Where(q.ResourceShort.As(q.Resource.Short.Name()).Expire.Lte(orm.LocalDateTime(*req.ExpireBefore)))
|
||||
}
|
||||
|
||||
resource, err := q.Resource.Where(do).
|
||||
resource, err := q.Resource.Debug().Where(do).
|
||||
Joins(q.Resource.Short).
|
||||
Order(q.Resource.CreatedAt.Desc()).
|
||||
Offset(req.GetOffset()).
|
||||
@@ -97,42 +98,136 @@ func ListResourceShort(c *fiber.Ctx) error {
|
||||
})
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region AllResource
|
||||
|
||||
type AllResourceReq struct {
|
||||
type ListResourceLongReq struct {
|
||||
core.PageReq
|
||||
ResourceNo *string `json:"resource_no"`
|
||||
Active *bool `json:"active"`
|
||||
Type *int `json:"type"`
|
||||
CreateAfter *time.Time `json:"create_after"`
|
||||
CreateBefore *time.Time `json:"create_before"`
|
||||
ExpireAfter *time.Time `json:"expire_after"`
|
||||
ExpireBefore *time.Time `json:"expire_before"`
|
||||
}
|
||||
|
||||
func AllResource(c *fiber.Ctx) error {
|
||||
func ListResourceLong(c *fiber.Ctx) error {
|
||||
// 检查权限
|
||||
authContext, err := auth.Protect(c, []auth.PayloadType{auth.PayloadUser}, []string{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 解析请求参数
|
||||
req := new(ListResourceLongReq)
|
||||
if err := c.BodyParser(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 查询套餐列表
|
||||
short := q.ResourceShort.As(q.Resource.Short.Name())
|
||||
do := q.Resource.
|
||||
Joins(q.Resource.Short).
|
||||
do := q.Resource.Where(
|
||||
q.Resource.UserID.Eq(authContext.Payload.Id),
|
||||
q.Resource.Type.Eq(int32(resource2.TypeLong)),
|
||||
)
|
||||
if req.ResourceNo != nil && *req.ResourceNo != "" {
|
||||
do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
||||
}
|
||||
if req.Active != nil {
|
||||
do.Where(q.Resource.Active.Is(*req.Active))
|
||||
}
|
||||
if req.Type != nil {
|
||||
do.Where(q.ResourceLong.As(q.Resource.Long.Name()).Type.Eq(int32(*req.Type)))
|
||||
}
|
||||
if req.CreateAfter != nil {
|
||||
do.Where(q.Resource.CreatedAt.Gte(orm.LocalDateTime(*req.CreateAfter)))
|
||||
}
|
||||
if req.CreateBefore != nil {
|
||||
do.Where(q.Resource.CreatedAt.Lte(orm.LocalDateTime(*req.CreateBefore)))
|
||||
}
|
||||
if req.ExpireAfter != nil {
|
||||
do.Where(q.ResourceLong.As(q.Resource.Long.Name()).Expire.Gte(orm.LocalDateTime(*req.ExpireAfter)))
|
||||
}
|
||||
if req.ExpireBefore != nil {
|
||||
do.Where(q.ResourceLong.As(q.Resource.Long.Name()).Expire.Lte(orm.LocalDateTime(*req.ExpireBefore)))
|
||||
}
|
||||
|
||||
resource, err := q.Resource.Debug().Where(do).
|
||||
Joins(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.
|
||||
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 AllResourceReq struct {
|
||||
}
|
||||
|
||||
func AllActiveResource(c *fiber.Ctx) error {
|
||||
// 检查权限
|
||||
authCtx, err := auth.NewProtect(c).Payload(auth.PayloadUser).Do()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 查询套餐列表
|
||||
var now = time.Now()
|
||||
|
||||
var short = q.ResourceShort.As(q.Resource.Short.Name())
|
||||
var long = q.ResourceLong.As(q.Resource.Long.Name())
|
||||
resources, err := q.Resource.
|
||||
Joins(
|
||||
q.Resource.Short,
|
||||
q.Resource.Long,
|
||||
).
|
||||
Where(
|
||||
q.Resource.UserID.Eq(authContext.Payload.Id),
|
||||
q.Resource.UserID.Eq(authCtx.Payload.Id),
|
||||
q.Resource.Active.Is(true),
|
||||
q.Resource.Where(
|
||||
short.Type.Eq(int32(resource2.ModeTime)),
|
||||
short.Expire.Gte(orm.LocalDateTime(time.Now())),
|
||||
q.Resource.Type.Eq(int32(resource2.TypeShort)),
|
||||
q.ResourceShort.As(q.Resource.Short.Name()).Where(
|
||||
short.Type.Eq(int32(resource2.ModeTime)),
|
||||
short.Expire.Gte(orm.LocalDateTime(now)),
|
||||
q.ResourceShort.As(q.Resource.Short.Name()).
|
||||
Where(short.DailyLast.Lt(orm.LocalDateTime(u.Today()))).
|
||||
Or(short.DailyLimit.GtCol(short.DailyUsed)),
|
||||
).Or(
|
||||
short.Type.Eq(int32(resource2.ModeCount)),
|
||||
short.Quota.GtCol(short.Used),
|
||||
),
|
||||
).Or(
|
||||
short.Type.Eq(int32(resource2.ModeCount)),
|
||||
short.Quota.GtCol(short.Used),
|
||||
q.Resource.Type.Eq(int32(resource2.TypeLong)),
|
||||
q.ResourceLong.As(q.Resource.Long.Name()).Where(
|
||||
long.Type.Eq(int32(resource2.ModeTime)),
|
||||
long.Expire.Gte(orm.LocalDateTime(now)),
|
||||
q.ResourceLong.As(q.Resource.Long.Name()).
|
||||
Where(long.DailyLast.Lt(orm.LocalDateTime(u.Today()))).
|
||||
Or(long.DailyLimit.GtCol(long.DailyUsed)),
|
||||
).Or(
|
||||
long.Type.Eq(int32(resource2.ModeCount)),
|
||||
long.Quota.GtCol(long.Used),
|
||||
),
|
||||
),
|
||||
q.Resource.Where(
|
||||
short.DailyLast.Lt(orm.LocalDateTime(u.Today())),
|
||||
).Or(
|
||||
short.DailyUsed.LtCol(short.DailyLimit),
|
||||
),
|
||||
)
|
||||
|
||||
resources, err := do.Debug().
|
||||
).
|
||||
Order(q.Resource.CreatedAt.Desc()).
|
||||
Find()
|
||||
if err != nil {
|
||||
@@ -144,7 +239,7 @@ func AllResource(c *fiber.Ctx) error {
|
||||
|
||||
// endregion
|
||||
|
||||
// region CreateResource
|
||||
// region 创建套餐
|
||||
|
||||
type CreateResourceReq struct {
|
||||
s.CreateResourceSerializer
|
||||
@@ -229,7 +324,7 @@ func CompleteCreateResource(c *fiber.Ctx) error {
|
||||
|
||||
// 完成创建套餐
|
||||
var now = time.Now()
|
||||
err = s.Resource.CompleteResource(req.TradeNo, now, nil)
|
||||
err = s.Resource.CompleteResource(req.TradeNo, now)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user