代码拉取完成,页面将自动刷新
package model
import (
	"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/cache"
	"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/util"
	"gorm.io/gorm"
	"strconv"
	"time"
)
// StoragePack 容量包模型
type StoragePack struct {
	// 表字段
	gorm.Model
	Name        string
	UserID      uint
	ActiveTime  *time.Time
	ExpiredTime *time.Time `gorm:"index:expired"`
	Size        uint64
}
// Create 创建容量包
func (pack *StoragePack) Create() (uint, error) {
	if err := DB.Create(pack).Error; err != nil {
		util.Log().Warning("无法插入离线下载记录, %s", err)
		return 0, err
	}
	return pack.ID, nil
}
// GetAvailablePackSize 返回给定用户当前可用的容量包总容量
func (user *User) GetAvailablePackSize() uint64 {
	var (
		total       uint64
		firstExpire *time.Time
		timeNow     = time.Now()
		ttl         int64
	)
	// 尝试从缓存中读取
	cacheKey := "pack_size_" + strconv.FormatUint(uint64(user.ID), 10)
	if total, ok := cache.Get(cacheKey); ok {
		return total.(uint64)
	}
	// 查找所有有效容量包
	packs := user.GetAvailableStoragePacks()
	// 计算总容量, 并找到其中最早的过期时间
	for _, v := range packs {
		total += v.Size
		if firstExpire == nil {
			firstExpire = v.ExpiredTime
			continue
		}
		if v.ExpiredTime != nil && firstExpire.After(*v.ExpiredTime) {
			firstExpire = v.ExpiredTime
		}
	}
	// 用最早的过期时间计算缓存TTL,并写入缓存
	if firstExpire != nil {
		ttl = firstExpire.Unix() - timeNow.Unix()
		if ttl > 0 {
			_ = cache.Set(cacheKey, total, int(ttl))
		}
	}
	return total
}
// GetAvailableStoragePacks 返回用户可用的容量包
func (user *User) GetAvailableStoragePacks() []StoragePack {
	var packs []StoragePack
	timeNow := time.Now()
	// 查找所有有效容量包
	DB.Where("expired_time > ? AND user_id = ?", timeNow, user.ID).Find(&packs)
	return packs
}
// GetExpiredStoragePack 获取已过期的容量包
func GetExpiredStoragePack() []StoragePack {
	var packs []StoragePack
	DB.Where("expired_time < ?", time.Now()).Find(&packs)
	return packs
}
// Delete 删除容量包
func (pack *StoragePack) Delete() error {
	return DB.Delete(&pack).Error
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
 马建仓 AI 助手
马建仓 AI 助手