refactor(backend): streamline Redis operations in file and share handling by utilizing handler functions for improved data management

This commit is contained in:
keven1024
2026-04-06 12:05:00 +08:00
parent 1298bf79d3
commit 499b931c04
4 changed files with 37 additions and 46 deletions

View File

@@ -120,7 +120,7 @@ func VaildateShare(c *echo.Context) error {
}
}
// download_nums 必须放在创建token的时候减掉不然多线程下载会导致多次减掉
err = models.SetRedisShareInfo(r.ShareId, func(shareInfo *models.RedisShareInfo) *models.RedisShareInfo {
_, err = models.SetRedisShareInfo(r.ShareId, func(shareInfo *models.RedisShareInfo) *models.RedisShareInfo {
shareInfo.ViewNum -= 1
return shareInfo
})
@@ -130,7 +130,7 @@ func VaildateShare(c *echo.Context) error {
// 统计分享数
currentDate := time.Now().Format("2006-01-02")
err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
_, err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
stat.DownloadNum += 1
return stat
})

View File

@@ -13,7 +13,6 @@ import (
"time"
"github.com/labstack/echo/v5"
"github.com/spf13/cast"
)
func CreateUploadTask(c *echo.Context) error {
@@ -78,38 +77,33 @@ func CreateUploadTask(c *echo.Context) error {
for r.FileSize/ChunkSize > 1000 {
ChunkSize *= 2
}
uploadTaskExpire := cast.ToInt64(u.GetEnvWithDefault("upload.remove_expire", "2")) * 3600
newFileInfo := models.RedisFileInfo{
FileType: models.FileTypeInit,
FileInfo: models.FileInfo{
redisFileInfo, err := models.SetRedisFileInfo(fileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
fileInfo.FileType = models.FileTypeInit
fileInfo.FileInfo = models.FileInfo{
FileSize: r.FileSize,
MimeType: r.MimeType,
FileHash: r.FileHash,
ChunkSize: ChunkSize,
},
CreatedAt: time.Now().Unix(),
Expire: uploadTaskExpire,
}
err = models.SetRedisFileInfo(fileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
return &newFileInfo
}
return fileInfo
})
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
err = s.SetFileRemoveTask(fileId, time.Duration(uploadTaskExpire)*time.Second)
err = s.SetFileRemoveTask(fileId, time.Duration(redisFileInfo.Expire)*time.Second)
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
return utils.HTTPSuccessHandler(c, map[string]any{
"size": newFileInfo.FileSize,
"mime_type": newFileInfo.MimeType,
"hash": newFileInfo.FileHash,
"type": newFileInfo.FileType,
"expire": newFileInfo.Expire,
"size": redisFileInfo.FileSize,
"mime_type": redisFileInfo.MimeType,
"hash": redisFileInfo.FileHash,
"type": redisFileInfo.FileType,
"expire": redisFileInfo.Expire,
"id": fileId,
"chunk_size": newFileInfo.ChunkSize,
"chunk_size": redisFileInfo.ChunkSize,
})
}
@@ -235,7 +229,7 @@ func FinishUploadTask(c *echo.Context) error {
}
// 更新文件信息
err = models.SetRedisFileInfo(r.FileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
fileInfo, err = models.SetRedisFileInfo(r.FileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
fileInfo.FileType = models.FileTypeUpload
return fileInfo
})
@@ -244,7 +238,7 @@ func FinishUploadTask(c *echo.Context) error {
}
// 统计
currentDate := time.Now().Format("2006-01-02")
err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
_, err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
stat.FileSize += fileInfo.FileSize
stat.FileNum += 1
return stat

View File

@@ -73,16 +73,16 @@ func CreateShareInfo(c *echo.Context) error {
password = hash
}
err = models.SetRedisShareInfo(id, models.RedisShareInfo{
Data: r.Data,
Type: r.Type,
CreatedAt: time.Now().Unix(),
Owner: owner,
ViewNum: r.Config.ViewNum,
Password: password,
// NotifyEmail: r.Config.NotifyEmail,
FileName: r.FileName,
ExpireAt: ExpireTime.Unix(),
_, err = models.SetRedisShareInfo(id, func(shareInfo *models.RedisShareInfo) *models.RedisShareInfo {
shareInfo.Data = r.Data
shareInfo.Type = r.Type
shareInfo.CreatedAt = time.Now().Unix()
shareInfo.Owner = owner
shareInfo.ViewNum = r.Config.ViewNum
shareInfo.Password = password
shareInfo.FileName = r.FileName
shareInfo.ExpireAt = ExpireTime.Unix()
return shareInfo
})
if err != nil {
return utils.HTTPErrorHandler(c, err)
@@ -128,7 +128,7 @@ func CreateShareInfo(c *echo.Context) error {
// 统计分享数
currentDate := time.Now().Format("2006-01-02")
err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
_, err = models.SetRedisStat(currentDate, func(stat *models.StatData) *models.StatData {
stat.ShareNum += 1
return stat
})

View File

@@ -7,8 +7,6 @@ import (
"pkg/services"
u "pkg/utils"
"time"
"github.com/spf13/cast"
)
type GenStandardFileReturn struct {
@@ -48,21 +46,20 @@ func GenStandardFile(filePath string, mimeType string) (GenStandardFileReturn, e
if err := os.Rename(filePath, newPath); err != nil {
return GenStandardFileReturn{}, err
}
expire := cast.ToInt64(u.GetEnvWithDefault("upload.remove_expire", "2")) * 3600
err = services.SetFileRemoveTask(fileId, time.Duration(expire)*time.Second)
if err != nil {
return GenStandardFileReturn{}, err
}
if err := models.SetRedisFileInfo(fileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
redisFileInfo, err := models.SetRedisFileInfo(fileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo {
fileInfo.FileInfo = models.FileInfo{
FileSize: fileSize,
FileHash: fileHash,
MimeType: mimeType,
},
FileType: models.FileTypeUpload,
CreatedAt: time.Now().Unix(),
Expire: expire,
}); err != nil {
}
fileInfo.FileType = models.FileTypeUpload
return fileInfo
})
if err != nil {
return GenStandardFileReturn{}, err
}
err = services.SetFileRemoveTask(fileId, time.Duration(redisFileInfo.Expire)*time.Second)
if err != nil {
return GenStandardFileReturn{}, err
}
return GenStandardFileReturn{