Files
addrss.io/internal/controllers/api.go
2025-09-14 10:57:59 -04:00

52 lines
1013 B
Go

package controllers
import (
"addrss/pkg/postal"
"addrss/pkg/router"
)
type Api struct{}
func (a Api) AddRoutes() {
router.AddGet("/suggestions", suggestions).Anonymous()
router.AddGet("/parse", parse).Anonymous()
}
func suggestions(ctx *router.Context) {
address, err := ctx.Request.Query("address")
if err != nil {
ctx.Response.BadRequest(err)
}
var parsedSlice []map[string]any
expansions := postal.ExpandAddress(address.(string))
for i := 0; i < len(expansions); i++ {
parsed := parseAddress(expansions[i])
parsedSlice = append(parsedSlice, parsed)
}
ctx.Response.OK(parsedSlice)
}
func parse(ctx *router.Context) {
address, err := ctx.Request.Query("address")
if err != nil {
ctx.Response.BadRequest(err)
}
parsed := parseAddress(address.(string))
ctx.Response.OK(parsed)
}
func parseAddress(address string) map[string]any {
pa := postal.ParseAddress(address)
addr := map[string]any{}
for i := 0; i < len(pa); i++ {
addr[pa[i].Label] = pa[i].Value
}
return addr
}