121 lines
3.0 KiB
Go
121 lines
3.0 KiB
Go
package example
|
|
|
|
import (
|
|
"context"
|
|
|
|
"kra/internal/biz/example"
|
|
"kra/internal/data/model"
|
|
"kra/internal/data/query"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type fileUploadRepo struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewFileUploadRepo 创建文件上传仓储
|
|
func NewFileUploadRepo(db *gorm.DB) example.FileUploadRepo {
|
|
return &fileUploadRepo{db: db}
|
|
}
|
|
|
|
func (r *fileUploadRepo) Create(ctx context.Context, file *example.FileUpload) error {
|
|
m := toFileUploadModel(file)
|
|
return r.db.WithContext(ctx).Create(m).Error
|
|
}
|
|
|
|
func (r *fileUploadRepo) Update(ctx context.Context, file *example.FileUpload) error {
|
|
return r.db.WithContext(ctx).Model(&model.ExaFileUploadAndDownload{}).
|
|
Where("id = ?", file.ID).
|
|
Updates(map[string]any{
|
|
"name": file.Name,
|
|
"class_id": file.ClassId,
|
|
}).Error
|
|
}
|
|
|
|
func (r *fileUploadRepo) Delete(ctx context.Context, id uint) error {
|
|
return r.db.WithContext(ctx).Unscoped().
|
|
Where("id = ?", id).
|
|
Delete(&model.ExaFileUploadAndDownload{}).Error
|
|
}
|
|
|
|
func (r *fileUploadRepo) FindByID(ctx context.Context, id uint) (*example.FileUpload, error) {
|
|
f := query.ExaFileUploadAndDownload
|
|
m, err := f.WithContext(ctx).Where(f.ID.Eq(int64(id))).First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return toFileUploadBiz(m), nil
|
|
}
|
|
|
|
func (r *fileUploadRepo) FindByKey(ctx context.Context, key string) (*example.FileUpload, error) {
|
|
f := query.ExaFileUploadAndDownload
|
|
m, err := f.WithContext(ctx).Where(f.Key.Eq(key)).First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return toFileUploadBiz(m), nil
|
|
}
|
|
|
|
func (r *fileUploadRepo) List(ctx context.Context, req *example.FileUploadSearchReq) ([]*example.FileUpload, int64, error) {
|
|
f := query.ExaFileUploadAndDownload
|
|
q := f.WithContext(ctx)
|
|
|
|
if req.Keyword != "" {
|
|
q = q.Where(f.Name.Like("%" + req.Keyword + "%"))
|
|
}
|
|
if req.ClassId > 0 {
|
|
q = q.Where(f.ClassID.Eq(int64(req.ClassId)))
|
|
}
|
|
|
|
total, err := q.Count()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
offset := (req.Page - 1) * req.PageSize
|
|
list, err := q.Order(f.ID.Desc()).Offset(offset).Limit(req.PageSize).Find()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
result := make([]*example.FileUpload, len(list))
|
|
for i, m := range list {
|
|
result[i] = toFileUploadBiz(m)
|
|
}
|
|
return result, total, nil
|
|
}
|
|
|
|
func (r *fileUploadRepo) BatchCreate(ctx context.Context, files []*example.FileUpload) error {
|
|
models := make([]*model.ExaFileUploadAndDownload, len(files))
|
|
for i, f := range files {
|
|
models[i] = toFileUploadModel(f)
|
|
}
|
|
return r.db.WithContext(ctx).Create(&models).Error
|
|
}
|
|
|
|
// 转换函数
|
|
func toFileUploadModel(f *example.FileUpload) *model.ExaFileUploadAndDownload {
|
|
return &model.ExaFileUploadAndDownload{
|
|
ID: int64(f.ID),
|
|
Name: f.Name,
|
|
ClassID: int64(f.ClassId),
|
|
URL: f.Url,
|
|
Tag: f.Tag,
|
|
Key: f.Key,
|
|
}
|
|
}
|
|
|
|
func toFileUploadBiz(m *model.ExaFileUploadAndDownload) *example.FileUpload {
|
|
return &example.FileUpload{
|
|
ID: uint(m.ID),
|
|
Name: m.Name,
|
|
ClassId: int(m.ClassID),
|
|
Url: m.URL,
|
|
Tag: m.Tag,
|
|
Key: m.Key,
|
|
CreatedAt: m.CreatedAt,
|
|
UpdatedAt: m.UpdatedAt,
|
|
}
|
|
}
|