You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
7.6 KiB
256 lines
7.6 KiB
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)
|
|
}
|
|
|