Files
video-factory/shortdrama/controller/region_pricing_controller.go
T
2026-07-14 11:49:30 +08:00

80 lines
2.0 KiB
Go

package controller
import (
"context"
"video-factory/shortdrama/dao"
"video-factory/shortdrama/model/dto"
"video-factory/shortdrama/model/entity"
)
type regionPricing struct{}
var RegionPricing = new(regionPricing)
func (c *regionPricing) List(ctx context.Context, req *dto.ListRegionPricingReq) (res *dto.ListRegionPricingRes, err error) {
list, err := dao.RegionPricing.List(ctx)
if err != nil {
return nil, err
}
return &dto.ListRegionPricingRes{List: list}, nil
}
func (c *regionPricing) Save(ctx context.Context, req *dto.SaveRegionPricingReq) (res *struct{}, err error) {
return nil, dao.RegionPricing.Save(ctx, &entity.RegionPricing{
Id: req.Id,
Province: req.Province,
Region: req.Region,
Protected: req.Protected,
Price: req.Price,
MaxCustomers: req.MaxCustomers,
})
}
func (c *regionPricing) Cascades(ctx context.Context, req *struct{}) (res *dto.ListRegionCascadesRes, err error) {
list, err := dao.RegionPricing.List(ctx)
if err != nil {
return nil, err
}
provinceMap := make(map[string]*dto.RegionCascade)
for _, p := range list {
prov := p.Province
if prov == "" {
prov = p.Region
}
pc, ok := provinceMap[prov]
if !ok {
pc = &dto.RegionCascade{Province: prov}
provinceMap[prov] = pc
}
city := p.Region
found := false
for _, c := range pc.Cities {
if c == city {
found = true
break
}
}
if !found {
pc.Cities = append(pc.Cities, city)
}
}
result := make([]*dto.RegionCascade, 0, len(provinceMap))
for _, pc := range provinceMap {
result = append(result, pc)
}
return &dto.ListRegionCascadesRes{List: result}, nil
}
func (c *regionPricing) Delete(ctx context.Context, req *struct{ Id int64 }) (res *struct{}, err error) {
return nil, dao.RegionPricing.Delete(ctx, req.Id)
}
func (c *regionPricing) Regions(ctx context.Context, req *struct{}) (res *dto.ListRegionsRes, err error) {
regions, err := dao.RegionPricing.ListRegions(ctx)
if err != nil {
return nil, err
}
return &dto.ListRegionsRes{Regions: regions}, nil
}