62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package services
|
|
|
|
import (
|
|
"ai_scheduler/internal/biz/support"
|
|
"ai_scheduler/internal/config"
|
|
errorcode "ai_scheduler/internal/data/error"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type SupportService struct {
|
|
cfg *config.Config
|
|
addressIngester map[string]support.AddressIngester
|
|
addressIngestHyt *support.HytAddressIngester
|
|
}
|
|
|
|
func NewSupportService(cfg *config.Config, addressIngestHyt *support.HytAddressIngester) *SupportService {
|
|
s := &SupportService{
|
|
cfg: cfg,
|
|
addressIngester: map[string]support.AddressIngester{
|
|
"hyt": addressIngestHyt,
|
|
},
|
|
}
|
|
return s
|
|
}
|
|
|
|
type AddressIngestReq struct {
|
|
Text string `json:"text"` // 待提取文本
|
|
}
|
|
|
|
// AddressIngest 收获地址提取
|
|
func (s *SupportService) AddressIngest(c *fiber.Ctx) error {
|
|
platform := c.Params("platform")
|
|
ingester, ok := s.addressIngester[platform]
|
|
if !ok {
|
|
return errorcode.ParamErrf("unsupported platform: %s", platform)
|
|
}
|
|
|
|
// 鉴权
|
|
if err := ingester.Auth(c); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 解析请求参数 body
|
|
req := AddressIngestReq{}
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return errorcode.ParamErrf("invalid request body: %v", err)
|
|
}
|
|
// 必要参数校验
|
|
if req.Text == "" {
|
|
return errorcode.ParamErrf("missing required fields")
|
|
}
|
|
|
|
// 执行提取
|
|
res, err := ingester.Ingest(c.Context(), req.Text)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(res)
|
|
}
|