blog/internal/service/file_service.go

98 lines
2.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"Blog/internal/client"
"Blog/internal/consts"
"Blog/internal/model"
"Blog/internal/repository"
"context"
"time"
"github.com/google/uuid"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
var FileService *fileService = newFileService()
type fileService struct {
}
func newFileService() *fileService {
return &fileService{}
}
func (*fileService) GetFile(id string) (*model.UploadFile, error) {
ctx := context.Background()
var file *model.UploadFile = &model.UploadFile{}
var bytes []byte
err := client.RedisClient().Get(ctx, consts.REDIS_FILE+id).Scan(file)
//如果缓存不存在则查数据库并存入Redis
if err != nil || file.Id == "" {
// repository.FileRepository.Table(consts.TABLE_UPLOAD_FILE).Where("id = ?", id).First(&file)
file := repository.FileRepository().GetById(id)
bytes = file.Data
err = client.RedisClient().Set(ctx, consts.REDIS_FILE+id, file, time.Duration(0)).Err()
if err != nil {
logrus.Info(err)
}
err = client.RedisClient().Set(ctx, consts.REDIS_FILE_BYTES+id, bytes, time.Duration(0)).Err()
if err != nil {
logrus.Info(err)
}
return file, nil
}
bytes, err = client.RedisClient().Get(ctx, consts.REDIS_FILE_BYTES+id).Bytes()
file.Data = bytes
return file, err
}
func (*fileService) PageFiles(page int, itemsPerPage int) model.Page[model.UploadFile] {
var content []model.UploadFile
var totalElements int64
repository.FileRepository().Table(consts.TABLE_UPLOAD_FILE).Count(&totalElements)
repository.FileRepository().Table(consts.TABLE_UPLOAD_FILE).
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 model.Page[model.UploadFile]{TotalElements: totalElements, TotalPages: totalPages, Number: page, Content: content}
}
func (*fileService) SaveFile(fileName string, data []byte, uploader string) *model.UploadFile {
// extLastIndex := strings.LastIndex(fileName, ".")
// ext := fileName[extLastIndex:]
fileSize := int64(len(data))
fileId := uuid.NewString()
// fileIds = append(fileId, fileId+ext)
file := model.UploadFile{
Id: fileId,
FileName: fileName,
FileSize: fileSize,
CreateBy: uploader,
CreateTime: time.Now().UnixMilli(),
Data: data,
State: "1",
Del: 0,
}
err := repository.FileRepository().WGorm(func(tx *gorm.DB) error {
err2 := tx.Table(consts.TABLE_UPLOAD_FILE).Create(file).Error
return err2
})
if err != nil {
return nil
}
return &file
}