53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package service
|
|
|
|
import (
|
|
"electricity_bill_calc/cache"
|
|
"electricity_bill_calc/global"
|
|
"electricity_bill_calc/model"
|
|
|
|
"xorm.io/builder"
|
|
)
|
|
|
|
type _RegionService struct{}
|
|
|
|
var RegionService _RegionService
|
|
|
|
func (_RegionService) FetchSubRegions(parent string) ([]model.Region, error) {
|
|
regions := make([]model.Region, 0)
|
|
err := global.DBConn.Where(builder.Eq{"parent": parent}).Asc("code").Find(®ions)
|
|
if err != nil {
|
|
return make([]model.Region, 0), err
|
|
}
|
|
return regions, err
|
|
}
|
|
|
|
func (r _RegionService) FetchAllParentRegions(code string) ([]model.Region, error) {
|
|
regions := make([]model.Region, 0)
|
|
region, err := r.fetchRegion(code)
|
|
if err != nil {
|
|
return regions, err
|
|
}
|
|
regions = append(regions, *region)
|
|
for region.Level > 1 {
|
|
region, err = r.fetchRegion(region.Parent)
|
|
if err != nil {
|
|
return make([]model.Region, 0), nil
|
|
}
|
|
regions = append(regions, *region)
|
|
}
|
|
return regions, nil
|
|
}
|
|
|
|
func (_RegionService) fetchRegion(code string) (*model.Region, error) {
|
|
cachedRegion, _ := cache.RetreiveData[model.Region]("region", code)
|
|
if cachedRegion != nil {
|
|
return cachedRegion, nil
|
|
}
|
|
region := new(model.Region)
|
|
has, err := global.DBConn.ID(code).NoAutoCondition().Get(region)
|
|
if has {
|
|
cache.CacheData(region, "region", code)
|
|
}
|
|
return _postProcessSingle(region, has, err)
|
|
}
|