package service import ( "photowall/internal/model" "gorm.io/gorm" ) type RegionService struct { db *gorm.DB } func NewRegionService(db *gorm.DB) *RegionService { return &RegionService{db: db} } // ListByParent 根据父级ID查子地区;parentID=0 查国家 func (s *RegionService) ListByParent(parentID uint) ([]model.Region, error) { var list []model.Region err := s.db.Where("parent_id = ?", parentID).Order("sort_order, name").Find(&list).Error return list, err } // ListCountries 查所有国家 func (s *RegionService) ListCountries() ([]model.Region, error) { var list []model.Region err := s.db.Where("level = ?", model.LevelCountry).Order("sort_order, name").Find(&list).Error return list, err } // GetPath 获取某地区的完整路径(国家->省->县) func (s *RegionService) GetPath(regionID uint) ([]model.Region, error) { var r model.Region if err := s.db.First(&r, regionID).Error; err != nil { return nil, err } path := []model.Region{r} cur := r for cur.ParentID != 0 { var parent model.Region if err := s.db.First(&parent, cur.ParentID).Error; err != nil { break } // 插到前面 path = append([]model.Region{parent}, path...) cur = parent } return path, nil } // Search 按名称搜索地区(用于快速定位) func (s *RegionService) Search(keyword string, limit int) ([]model.Region, error) { if limit <= 0 { limit = 20 } var list []model.Region err := s.db.Where("name LIKE ? OR name_en LIKE ?", "%"+keyword+"%", "%"+keyword+"%"). Order("level, sort_order, name").Limit(limit).Find(&list).Error return list, err } // BatchCreate 平台管理员批量录入地区(导入完整行政区划数据用) func (s *RegionService) BatchCreate(regions []model.Region) error { if len(regions) == 0 { return nil } return s.db.CreateInBatches(regions, 100).Error }