61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package service
|
||
|
||
import (
|
||
"blog/internal/consts"
|
||
"blog/internal/model/admin"
|
||
"blog/internal/model/vo"
|
||
"blog/third_party/database"
|
||
"context"
|
||
"log"
|
||
"time"
|
||
)
|
||
|
||
type fileService struct {
|
||
}
|
||
|
||
var FileService fileService
|
||
|
||
func (*fileService) GetFile(id string) (vo.CommonFiles, error) {
|
||
ctx := context.Background()
|
||
var file vo.CommonFiles
|
||
var bytes []byte
|
||
err := database.RedisTemplate.Get(ctx, consts.REDIS_FILE+id).Scan(&file)
|
||
//如果缓存不存在,则查数据库并存入Redis
|
||
if err != nil || file.Id == "" {
|
||
database.GormTemplate.Table("common_files").Where("id = ?", id).First(&file)
|
||
bytes = file.Data
|
||
err = database.RedisTemplate.Set(ctx, consts.REDIS_FILE+id, &file, time.Duration(0)).Err()
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
err = database.RedisTemplate.Set(ctx, consts.REDIS_FILE_BYTES+id, bytes, time.Duration(0)).Err()
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
return file, nil
|
||
}
|
||
bytes, err = database.RedisTemplate.Get(ctx, consts.REDIS_FILE_BYTES+id).Bytes()
|
||
file.Data = bytes
|
||
return file, err
|
||
}
|
||
|
||
func (*fileService) PageSysFiles(page int, itemsPerPage int) vo.Page[admin.SysFile] {
|
||
var content []admin.SysFile
|
||
var totalElements int64
|
||
database.GormTemplate.Table("common_files").Count(&totalElements)
|
||
database.GormTemplate.Table("common_files").
|
||
Where("del != ?", 1).
|
||
Offset((page - 1) * itemsPerPage).
|
||
Limit(itemsPerPage).
|
||
Order("create_time DESC").
|
||
Find(&content)
|
||
|
||
pre := int(totalElements) % itemsPerPage
|
||
if pre > 0 {
|
||
pre = 1
|
||
}
|
||
var totalPages int = int(totalElements)/itemsPerPage + pre
|
||
|
||
return vo.Page[admin.SysFile]{TotalElements: totalElements, TotalPages: totalPages, Number: page, Content: content}
|
||
}
|