2019-04-22 02:59:20 +00:00

69 lines
1.7 KiB
Go

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
}