package v1 import ( "git.lzcwy.cn/zhengchiliu/zt-closet-backend/internal/dto" "git.lzcwy.cn/zhengchiliu/zt-closet-backend/internal/middleware" "git.lzcwy.cn/zhengchiliu/zt-closet-backend/internal/service" "git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/app" "git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/errcode" "github.com/gin-gonic/gin" ) // AIRecommendHandler AI 穿搭推荐相关接口。 type AIRecommendHandler struct { svc *service.AIRecommendService } // NewAIRecommendHandler 创建 AI 推荐 handler。 func NewAIRecommendHandler() *AIRecommendHandler { return &AIRecommendHandler{svc: service.NewAIRecommendService()} } // Submit 提交 AI 穿搭推荐任务(异步)。 // 立即返回 task_id,不等待大模型;生成在前端断开后仍会继续,结果通过 Status 轮询获取。 func (h *AIRecommendHandler) Submit(c *gin.Context) { response := app.NewResponse(c) userID, ok := middleware.GetUserID(c.Request.Context()) if !ok { response.ToErrorResponse(errcode.Unauthorized) return } var request dto.AIRecommendCreateRequest if err := c.ShouldBindJSON(&request); err != nil { response.ToErrorResponse(errcode.InvalidParams.WithDetails(err.Error())) return } out, e := h.svc.Submit(c.Request.Context(), userID, &request) if e != nil { response.ToErrorResponse(e) return } response.ToResponse(out) } // Status 查询 AI 穿搭推荐任务的状态与结果。 func (h *AIRecommendHandler) Status(c *gin.Context) { response := app.NewResponse(c) userID, ok := middleware.GetUserID(c.Request.Context()) if !ok { response.ToErrorResponse(errcode.Unauthorized) return } var request dto.AIRecommendStatusRequest if err := c.ShouldBindQuery(&request); err != nil { response.ToErrorResponse(errcode.InvalidParams.WithDetails(err.Error())) return } out, e := h.svc.Status(c.Request.Context(), userID, &request) if e != nil { response.ToErrorResponse(e) return } response.ToResponse(out) } // Save 保存 AI 推荐穿搭到我的搭配。 func (h *AIRecommendHandler) Save(c *gin.Context) { response := app.NewResponse(c) userID, ok := middleware.GetUserID(c.Request.Context()) if !ok { response.ToErrorResponse(errcode.Unauthorized) return } var request dto.AIRecommendSaveRequest if err := c.ShouldBindJSON(&request); err != nil { response.ToErrorResponse(errcode.InvalidParams.WithDetails(err.Error())) return } if e := h.svc.Save(c.Request.Context(), userID, &request); e != nil { response.ToErrorResponse(e) return } response.ToResponse(nil) }