diff --git a/client/location.go b/client/location.go index 7fc3474..2e8d30e 100644 --- a/client/location.go +++ b/client/location.go @@ -17,6 +17,7 @@ func GetLocation() Location { return Location{} } +// GetLocationByCode ... func (l Location) GetLocationByCode(payload model.LocationRequestPayload) (*model.ResponseLocationAddress, error) { msg, err := natsio.GetServer().Request(subject.Location.GetLocationByCode, toBytes(payload)) if err != nil { @@ -36,3 +37,70 @@ func (l Location) GetLocationByCode(payload model.LocationRequestPayload) (*mode } return r.Data, nil } + +// GetProvincesByCodes ... ... +func (l Location) GetProvincesByCodes(p model.ProvinceRequestPayload) (*model.LocationProvinceResponse, error) { + msg, err := natsio.GetServer().Request(subject.Location.GetProvincesByCodes, toBytes(p)) + if err != nil { + return nil, err + } + + var r struct { + Data *model.LocationProvinceResponse `json:"data"'` + Error string `json:"error"` + } + + if err := json.Unmarshal(msg.Data, &r); err != nil { + return nil, err + } + + if r.Error != "" { + return nil, errors.New(r.Error) + } + return r.Data, nil +} + +// GetDistrictsByCodes ... +func (l Location) GetDistrictsByCodes(p model.DistrictRequestPayload) (*model.LocationDistrictResponse, error) { + msg, err := natsio.GetServer().Request(subject.Location.GetDistrictsByCodes, toBytes(p)) + if err != nil { + return nil, err + } + var r struct { + Data *model.LocationDistrictResponse `json:"data"` + Error string `json:"error"` + } + + if err := json.Unmarshal(msg.Data, &r); err != nil { + return nil, err + } + + if r.Error != "" { + return nil, errors.New(r.Error) + } + + return r.Data, nil +} + +// GetWardsByCodes ... +func (l Location) GetWardsByCodes(p model.WardRequestPayload) (*model.LocationWardResponse, error) { + msg, err := natsio.GetServer().Request(subject.Location.GetWardsByCodes, toBytes(p)) + if err != nil { + return nil, err + } + + var r struct { + Data *model.LocationWardResponse `json:"data"` + Error string `json:"error"` + } + + if err := json.Unmarshal(msg.Data, &r); err != nil { + return nil, err + } + + if r.Error != "" { + return nil, errors.New(r.Error) + } + + return r.Data, nil +} diff --git a/model/location_request.go b/model/location_request.go index e6781ca..0d55d1d 100644 --- a/model/location_request.go +++ b/model/location_request.go @@ -6,3 +6,18 @@ type LocationRequestPayload struct { District int `json:"district"` Ward int `json:"ward"` } + +// ProvinceRequestPayload ... +type ProvinceRequestPayload struct { + Codes []int `json:"Codes"` +} + +// DistrictRequestPayload ... +type DistrictRequestPayload struct { + Codes []int `json:"Codes"` +} + +// WardRequestPayload ... +type WardRequestPayload struct { + Codes []int `json:"Codes"` +} diff --git a/model/location_response.go b/model/location_response.go index 436d1f7..49e3cbd 100644 --- a/model/location_response.go +++ b/model/location_response.go @@ -26,3 +26,18 @@ type LocationWard struct { Name string `json:"name"` Code int `json:"code"` } + +// LocationProvinceResponse ... +type LocationProvinceResponse struct { + Province []LocationProvince `json:"province"` +} + +// LocationDistrictResponse ... +type LocationDistrictResponse struct { + District []LocationDistrict `json:"district"` +} + +// LocationWardResponse ... +type LocationWardResponse struct { + Ward []LocationWard `json:"ward"` +} diff --git a/subject/location.go b/subject/location.go index 1989df3..22141ad 100644 --- a/subject/location.go +++ b/subject/location.go @@ -7,7 +7,13 @@ func getLocationValue(val string) string { } var Location = struct { - GetLocationByCode string + GetLocationByCode string + GetProvincesByCodes string + GetDistrictsByCodes string + GetWardsByCodes string }{ - GetLocationByCode: getLocationValue("get_location_warehouse"), + GetLocationByCode: getLocationValue("get_location_warehouse"), + GetProvincesByCodes: getLocationValue("get_provinces_warehouse"), + GetDistrictsByCodes: getLocationValue("get_districts_warehouse"), + GetWardsByCodes: getLocationValue("get_wards_warehouse"), }