69 lines
1.7 KiB
Go
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
|
|
}
|