package handler import ( "health-ai/internal/api/middleware" "health-ai/internal/service" "health-ai/pkg/response" "github.com/gin-gonic/gin" ) type SurveyHandler struct { surveyService *service.SurveyService } func NewSurveyHandler() *SurveyHandler { return &SurveyHandler{ surveyService: service.NewSurveyService(), } } // GetStatus 获取调查完成状态 // @Summary 获取调查完成状态 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=service.SurveyStatusResponse} // @Router /api/survey/status [get] func (h *SurveyHandler) GetStatus(c *gin.Context) { userID := middleware.GetUserID(c) status, err := h.surveyService.GetStatus(userID) if err != nil { response.Error(c, 500, err.Error()) return } response.Success(c, status) } // SubmitBasicInfo 提交基础信息 // @Summary 提交基础信息 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.BasicInfoRequest true "基础信息" // @Success 200 {object} response.Response // @Router /api/survey/basic-info [post] func (h *SurveyHandler) SubmitBasicInfo(c *gin.Context) { userID := middleware.GetUserID(c) var req service.BasicInfoRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitBasicInfo(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "基础信息保存成功", nil) } // SubmitLifestyle 提交生活习惯 // @Summary 提交生活习惯 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.LifestyleRequest true "生活习惯" // @Success 200 {object} response.Response // @Router /api/survey/lifestyle [post] func (h *SurveyHandler) SubmitLifestyle(c *gin.Context) { userID := middleware.GetUserID(c) var req service.LifestyleRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitLifestyle(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "生活习惯保存成功", nil) } // SubmitMedicalHistory 提交病史(单条) // @Summary 提交病史 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.MedicalHistoryRequest true "病史信息" // @Success 200 {object} response.Response // @Router /api/survey/medical-history [post] func (h *SurveyHandler) SubmitMedicalHistory(c *gin.Context) { userID := middleware.GetUserID(c) var req service.MedicalHistoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitMedicalHistory(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "病史记录添加成功", nil) } // SubmitBatchMedicalHistory 批量提交病史 // @Summary 批量提交病史(覆盖式) // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.BatchMedicalHistoryRequest true "病史列表" // @Success 200 {object} response.Response // @Router /api/survey/medical-history/batch [post] func (h *SurveyHandler) SubmitBatchMedicalHistory(c *gin.Context) { userID := middleware.GetUserID(c) var req service.BatchMedicalHistoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitBatchMedicalHistory(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "病史记录保存成功", nil) } // SubmitFamilyHistory 提交家族病史(单条) // @Summary 提交家族病史 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.FamilyHistoryRequest true "家族病史" // @Success 200 {object} response.Response // @Router /api/survey/family-history [post] func (h *SurveyHandler) SubmitFamilyHistory(c *gin.Context) { userID := middleware.GetUserID(c) var req service.FamilyHistoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitFamilyHistory(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "家族病史记录添加成功", nil) } // SubmitBatchFamilyHistory 批量提交家族病史 // @Summary 批量提交家族病史(覆盖式) // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.BatchFamilyHistoryRequest true "家族病史列表" // @Success 200 {object} response.Response // @Router /api/survey/family-history/batch [post] func (h *SurveyHandler) SubmitBatchFamilyHistory(c *gin.Context) { userID := middleware.GetUserID(c) var req service.BatchFamilyHistoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitBatchFamilyHistory(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "家族病史保存成功", nil) } // SubmitAllergy 提交过敏信息(单条) // @Summary 提交过敏信息 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.AllergyRequest true "过敏信息" // @Success 200 {object} response.Response // @Router /api/survey/allergy [post] func (h *SurveyHandler) SubmitAllergy(c *gin.Context) { userID := middleware.GetUserID(c) var req service.AllergyRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitAllergy(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "过敏信息添加成功", nil) } // SubmitBatchAllergy 批量提交过敏信息 // @Summary 批量提交过敏信息(覆盖式) // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body service.BatchAllergyRequest true "过敏信息列表" // @Success 200 {object} response.Response // @Router /api/survey/allergy/batch [post] func (h *SurveyHandler) SubmitBatchAllergy(c *gin.Context) { userID := middleware.GetUserID(c) var req service.BatchAllergyRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } if err := h.surveyService.SubmitBatchAllergy(userID, &req); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "过敏信息保存成功", nil) } // CompleteSurvey 完成调查 // @Summary 完成健康调查 // @Tags 健康调查 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response // @Router /api/survey/complete [post] func (h *SurveyHandler) CompleteSurvey(c *gin.Context) { userID := middleware.GetUserID(c) if err := h.surveyService.CompleteSurvey(userID); err != nil { response.Error(c, 400, err.Error()) return } response.SuccessWithMessage(c, "健康调查已完成", nil) }