diff --git a/internal/db/models/region_country_dao.go b/internal/db/models/region_country_dao.go index b7430c43..1746c1a4 100644 --- a/internal/db/models/region_country_dao.go +++ b/internal/db/models/region_country_dao.go @@ -83,6 +83,7 @@ func (this *RegionCountryDAO) FindCountryIdWithDataId(dataId string) (int64, err } // 根据国家名查找国家ID +// TODO 加入缓存 func (this *RegionCountryDAO) FindCountryIdWithCountryName(countryName string) (int64, error) { return this.Query(). Where("JSON_CONTAINS(codes, :countryName)"). diff --git a/internal/db/models/region_province_dao.go b/internal/db/models/region_province_dao.go index 9871f69d..1ae91d51 100644 --- a/internal/db/models/region_province_dao.go +++ b/internal/db/models/region_province_dao.go @@ -35,7 +35,7 @@ func init() { } // 启用条目 -func (this *RegionProvinceDAO) EnableRegionProvince(id uint32) error { +func (this *RegionProvinceDAO) EnableRegionProvince(id int64) error { _, err := this.Query(). Pk(id). Set("state", RegionProvinceStateEnabled). @@ -44,7 +44,7 @@ func (this *RegionProvinceDAO) EnableRegionProvince(id uint32) error { } // 禁用条目 -func (this *RegionProvinceDAO) DisableRegionProvince(id uint32) error { +func (this *RegionProvinceDAO) DisableRegionProvince(id int64) error { _, err := this.Query(). Pk(id). Set("state", RegionProvinceStateDisabled). @@ -53,7 +53,7 @@ func (this *RegionProvinceDAO) DisableRegionProvince(id uint32) error { } // 查找启用中的条目 -func (this *RegionProvinceDAO) FindEnabledRegionProvince(id uint32) (*RegionProvince, error) { +func (this *RegionProvinceDAO) FindEnabledRegionProvince(id int64) (*RegionProvince, error) { result, err := this.Query(). Pk(id). Attr("state", RegionProvinceStateEnabled). @@ -65,7 +65,7 @@ func (this *RegionProvinceDAO) FindEnabledRegionProvince(id uint32) (*RegionProv } // 根据主键查找名称 -func (this *RegionProvinceDAO) FindRegionProvinceName(id uint32) (string, error) { +func (this *RegionProvinceDAO) FindRegionProvinceName(id int64) (string, error) { return this.Query(). Pk(id). Result("name"). @@ -81,6 +81,7 @@ func (this *RegionProvinceDAO) FindProvinceIdWithDataId(dataId string) (int64, e } // 根据省份名查找省份ID +// TODO 加入缓存 func (this *RegionProvinceDAO) FindProvinceIdWithProvinceName(provinceName string) (int64, error) { return this.Query(). Where("JSON_CONTAINS(codes, :provinceName)"). diff --git a/internal/rpc/services/service_ip_library.go b/internal/rpc/services/service_ip_library.go index 968ca4f4..b811f68a 100644 --- a/internal/rpc/services/service_ip_library.go +++ b/internal/rpc/services/service_ip_library.go @@ -178,11 +178,24 @@ func (this *IPLibraryService) LookupIPRegion(ctx context.Context, req *pb.Lookup if result == nil { return &pb.LookupIPRegionResponse{Region: nil}, nil } + + countryId, err := models.SharedRegionCountryDAO.FindCountryIdWithCountryName(result.Country) + if err != nil { + return nil, err + } + + provinceId, err := models.SharedRegionProvinceDAO.FindProvinceIdWithProvinceName(result.Province) + if err != nil { + return nil, err + } + return &pb.LookupIPRegionResponse{Region: &pb.IPRegion{ - Country: result.Country, - Region: result.Region, - Province: result.Province, - City: result.City, - Isp: result.ISP, + Country: result.Country, + Region: result.Region, + Province: result.Province, + City: result.City, + Isp: result.ISP, + CountryId: countryId, + ProvinceId: provinceId, }}, nil } diff --git a/internal/rpc/services/service_region_country.go b/internal/rpc/services/service_region_country.go index fa72527d..6fcc4a0f 100644 --- a/internal/rpc/services/service_region_country.go +++ b/internal/rpc/services/service_region_country.go @@ -47,3 +47,26 @@ func (this *RegionCountryService) FindAllEnabledRegionCountries(ctx context.Cont Countries: result, }, nil } + +// 查找单个国家信息 +func (this *RegionCountryService) FindEnabledRegionCountry(ctx context.Context, req *pb.FindEnabledRegionCountryRequest) (*pb.FindEnabledRegionCountryResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeNode) + if err != nil { + return nil, err + } + + country, err := models.SharedRegionCountryDAO.FindEnabledRegionCountry(req.CountryId) + if err != nil { + return nil, err + } + if country == nil { + return &pb.FindEnabledRegionCountryResponse{Country: nil}, nil + } + + return &pb.FindEnabledRegionCountryResponse{Country: &pb.RegionCountry{ + Id: int64(country.Id), + Name: country.Name, + Codes: country.DecodeCodes(), + }}, nil +} diff --git a/internal/rpc/services/service_region_province.go b/internal/rpc/services/service_region_province.go index cb1d54bb..403944ad 100644 --- a/internal/rpc/services/service_region_province.go +++ b/internal/rpc/services/service_region_province.go @@ -36,3 +36,27 @@ func (this *RegionProvinceService) FindAllEnabledRegionProvincesWithCountryId(ct Provinces: result, }, nil } + +// 查找单个省份信息 +func (this *RegionProvinceService) FindEnabledRegionProvince(ctx context.Context, req *pb.FindEnabledRegionProvinceRequest) (*pb.FindEnabledRegionProvinceResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeNode) + if err != nil { + return nil, err + } + province, err := models.SharedRegionProvinceDAO.FindEnabledRegionProvince(req.ProvinceId) + if err != nil { + return nil, err + } + if province == nil { + return &pb.FindEnabledRegionProvinceResponse{Province: nil}, nil + } + + return &pb.FindEnabledRegionProvinceResponse{ + Province: &pb.RegionProvince{ + Id: int64(province.Id), + Name: province.Name, + Codes: province.DecodeCodes(), + }, + }, nil +}