update
This commit is contained in:
@@ -49,3 +49,37 @@ func (r *Repository) Delete(ctx context.Context, id uint64) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListFilter 文件列表过滤条件。
|
||||
type ListFilter struct {
|
||||
UploaderType string // 上传者类型(admin/ma),为空表示不限
|
||||
UploaderID uint64 // 上传者主键,0 表示不限
|
||||
Keyword string // 模糊匹配 origin_name 或 filename,为空表示不限
|
||||
Page int // 页码,从 1 开始
|
||||
Size int // 每页条数
|
||||
}
|
||||
|
||||
// List 分页查询文件,所有条件均为可选。返回列表、总数与错误。
|
||||
func (r *Repository) List(ctx context.Context, f ListFilter) ([]model.File, int64, error) {
|
||||
q := r.db.WithContext(ctx).Model(&model.File{})
|
||||
if f.UploaderType != "" {
|
||||
q = q.Where("uploader_type = ?", f.UploaderType)
|
||||
}
|
||||
if f.UploaderID != 0 {
|
||||
q = q.Where("uploader_id = ?", f.UploaderID)
|
||||
}
|
||||
if f.Keyword != "" {
|
||||
kw := "%" + f.Keyword + "%"
|
||||
q = q.Where("origin_name LIKE ? OR filename LIKE ?", kw, kw)
|
||||
}
|
||||
|
||||
var total int64
|
||||
if err := q.Count(&total).Error; err != nil {
|
||||
return nil, 0, errors.Wrap(50000, "count files", err)
|
||||
}
|
||||
var list []model.File
|
||||
if err := q.Order("id DESC").Offset((f.Page - 1) * f.Size).Limit(f.Size).Find(&list).Error; err != nil {
|
||||
return nil, 0, errors.Wrap(50000, "list files", err)
|
||||
}
|
||||
return list, total, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user