mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
refactor(backend): streamline Redis operations in file and share handling by utilizing handler functions for improved data management
This commit is contained in:
@@ -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
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user