syntax = "v1"

type (
		// District tree | 地址树，层级结构
		// swagger:model DistrictTree
	DistrictTree {
		// Tree | 树
		Tree []*DistrictInfo `json:"tree"`
	}

		// District request | 地址请求参数
		// swagger:parameters GetDistrictTree
	DistrictReq {
		BaseID

		// Code | 地址编码
		Code string `json:"code,optional" form:"code,optional"`
	}

		// Get District List | 获取地址列表，单级机构，children为空
		// swagger:parameters GetDistrictList
	GetDistrictListReq {
		BaseID
		*Pagination

		// Name | 地区名称模糊匹配 (like)
		Name string `json:"name,optional" form:"name,optional"`

		// Province code | 省级行政编号，表示该地区归属
		Province string `json:"province,optional" form:"province,optional"`

		// City | 地级行政编号，表示该地区归属
		City string `json:"city,optional" form:"city,optional"`

		// Area | 县级行政编号，表示该地区归属
		Area string `json:"area,optional" form:"area,optional"`

		// Street or Town | 乡级行政编号，表示该地区归属
		Street string `json:"street,optional" form:"street,optional"`

		// Level | 地区级别 1-省、自治区、直辖市 2-地级市、地区、自治州、盟 3-市辖区、县级市、县 4-乡镇
		Level uint32 `json:"level,optional" form:"level,optional"`
	}

		// Get District Children | 获取子级地址列表，单级机构，children为空
		// swagger:parameters GetDistrictChildren
	GetDistrictChildrenReq {
		// Parent Code | 父级Code，若为空，则查询level为1的列表
		ParentCode string `json:"parentCode,optional" form:"parentCode,optional"`
	}

		// District name request | 地址名称请求参数
		// swagger:parameters GetDistrictName
	GetDistrictNameReq {
		// Code | 地址编码
		Code string `json:"code,optional" form:"code,optional"`

		// Separator | 分隔符，默认为空字符串
		Separator string `json:"sep,optional" form:"sep,optional"`
	}

		// District name response | 地址名称回复
	GetDistrictNameResp {
		// Code | 地址编码
		Code string `json:"code"`

		// Name | 地址名称（拼接后）
		Name string `json:"name"`

		// Name List | 地址名称列表，逐级，不拼接
		NameList []string `json:"nameList"`
	}
)

@server(
	group: district
	prefix: /api/district
)
service api {
	// get district tree | 获取地址树，整棵树
	@handler getDistrictTree
	get /tree (DistrictReq) returns (DistrictTree)

	// get district list | 获取地址列表
	@handler getDistrictList
	get /list (GetDistrictListReq) returns ([]*DistrictInfo)

	// get district children | 获取子级地址列表
	@handler getDistrictChildren
	get /children (GetDistrictChildrenReq) returns ([]*DistrictInfo)

	// get district name list | 获取地址名
	@handler getDistrictName
	get /name (GetDistrictNameReq) returns (GetDistrictNameResp)
}