From 8687b462ffbdc552337a045363959bc145c58cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 15 Sep 2022 16:22:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor(region):=E5=9F=BA=E6=9C=AC=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E8=A1=8C=E6=94=BF=E5=8C=BA=E5=88=92=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=9A=84=E8=BF=81=E7=A7=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/region.go | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/service/region.go b/service/region.go index 12d9b5f..76ba5b1 100644 --- a/service/region.go +++ b/service/region.go @@ -3,25 +3,38 @@ package service import ( "electricity_bill_calc/cache" "electricity_bill_calc/global" + "electricity_bill_calc/logger" "electricity_bill_calc/model" + "fmt" + "time" - "xorm.io/builder" + "github.com/samber/lo" + "go.uber.org/zap" ) -type _RegionService struct{} +type _RegionService struct { + l *zap.Logger +} -var RegionService _RegionService +var RegionService = _RegionService{ + l: logger.Named("Service", "Region"), +} func (_RegionService) FetchSubRegions(parent string) ([]model.Region, error) { + ctx, cancel := global.TimeoutContext(30 * time.Second) + defer cancel() if regions, _ := cache.RetreiveSearch[[]model.Region]("region", "parent", parent); regions != nil { return *regions, nil } regions := make([]model.Region, 0) - err := global.DBConn.Where(builder.Eq{"parent": parent}).Asc("code").Find(®ions) + err := global.DB.NewSelect().Model(®ions).Where("parent = ?", parent).Order("code asc").Scan(ctx) if err != nil { return make([]model.Region, 0), err } - cache.CacheSearch(regions, []string{"region"}, "region", "parent", parent) + relationNames := lo.Map(regions, func(r model.Region, index int) string { + return fmt.Sprintf("region:%s", r.Code) + }) + cache.CacheSearch(regions, relationNames, "region", "parent", parent) return regions, err } @@ -43,13 +56,16 @@ func (r _RegionService) FetchAllParentRegions(code string) ([]model.Region, erro } func (_RegionService) fetchRegion(code string) (*model.Region, error) { + ctx, cancel := global.TimeoutContext(30 * time.Second) + defer cancel() if cachedRegion, _ := cache.RetreiveSearch[model.Region]("region", code); cachedRegion != nil { return cachedRegion, nil } region := new(model.Region) - has, err := global.DBConn.ID(code).NoAutoCondition().Get(region) - if has { - cache.CacheSearch(region, []string{"region"}, "region", code) + err := global.DB.NewSelect().Model(®ion).WherePK(code).Scan(ctx) + if err != nil && region != nil { + relationName := fmt.Sprintf("region:%s", code) + cache.CacheSearch(region, []string{relationName}, "region", code) } - return _postProcessSingle(region, has, err) + return region, err }