You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
package dao |
|
|
|
import ( |
|
"encoding/json" |
|
"strings" |
|
|
|
"go-common/app/interface/main/upload/model" |
|
"go-common/library/log" |
|
) |
|
|
|
// Buckets all bucket info from database. |
|
func (d *Dao) Buckets() (bucketMap map[string]*model.Bucket, err error) { |
|
var ( |
|
buckets []*model.Bucket |
|
limitMap map[string]map[string]*model.DirConfig |
|
) |
|
if err = d.orm.Table("bucket").Find(&buckets).Error; err != nil { |
|
log.Error("orm.Table(bucket) error(%v)", err) |
|
return |
|
} |
|
if limitMap, err = d.dirLimits(); err != nil { |
|
return |
|
} |
|
bucketMap = make(map[string]*model.Bucket) |
|
for _, b := range buckets { |
|
v, ok := limitMap[b.Name] |
|
if ok { |
|
b.DirLimit = v |
|
} |
|
bucketMap[b.Name] = b |
|
} |
|
return |
|
} |
|
|
|
// dirLimits directory limit from database. |
|
func (d *Dao) dirLimits() (limitMap map[string]map[string]*model.DirConfig, err error) { |
|
limits := make([]*model.DirLimit, 0) |
|
if err = d.orm.Table("dir_limit").Find(&limits).Error; err != nil { |
|
return |
|
} |
|
limitMap = make(map[string]map[string]*model.DirConfig) |
|
for _, l := range limits { |
|
var ( |
|
pic model.DirPicConfig |
|
rate model.DirRateConfig |
|
) |
|
if err = json.Unmarshal([]byte(l.DirPicConfig), &pic); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", l.DirPicConfig, err) |
|
err = nil |
|
continue |
|
} |
|
if pic.AllowType != "" { |
|
pic.AllowTypeSlice = strings.Split(pic.AllowType, ",") |
|
} |
|
if err = json.Unmarshal([]byte(l.DirRateConfig), &rate); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", l.DirRateConfig, err) |
|
err = nil |
|
continue |
|
} |
|
if _, ok := limitMap[l.BucketName]; !ok { |
|
limitMap[l.BucketName] = make(map[string]*model.DirConfig) |
|
} |
|
// NOTE empty dir is also in limit map |
|
l.Dir = strings.Trim(l.Dir, "/") |
|
limitMap[l.BucketName][l.Dir] = &model.DirConfig{Pic: pic, Rate: rate} |
|
} |
|
return |
|
}
|
|
|