package handler import ( "strconv" "health-ai/internal/api/middleware" "health-ai/internal/service" "health-ai/pkg/response" "github.com/gin-gonic/gin" ) type HealthHandler struct { healthService *service.HealthService } func NewHealthHandler() *HealthHandler { return &HealthHandler{ healthService: service.NewHealthService(), } } // GetHealthProfile 获取完整健康档案 // @Summary 获取完整健康档案 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=service.HealthProfileResponse} // @Router /api/user/health-profile [get] func (h *HealthHandler) GetHealthProfile(c *gin.Context) { userID := middleware.GetUserID(c) profile, err := h.healthService.GetHealthProfile(userID) if err != nil { response.Error(c, 500, err.Error()) return } response.Success(c, profile) } // GetBasicProfile 获取基础档案 // @Summary 获取基础档案 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=model.HealthProfile} // @Router /api/user/basic-profile [get] func (h *HealthHandler) GetBasicProfile(c *gin.Context) { userID := middleware.GetUserID(c) profile, err := h.healthService.GetBasicProfile(userID) if err != nil { response.Error(c, 404, err.Error()) return } response.Success(c, profile) } // GetLifestyle 获取生活习惯 // @Summary 获取生活习惯 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=model.LifestyleInfo} // @Router /api/user/lifestyle [get] func (h *HealthHandler) GetLifestyle(c *gin.Context) { userID := middleware.GetUserID(c) lifestyle, err := h.healthService.GetLifestyle(userID) if err != nil { response.Error(c, 404, err.Error()) return } response.Success(c, lifestyle) } // GetMedicalHistory 获取病史列表 // @Summary 获取病史列表 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=[]model.MedicalHistory} // @Router /api/user/medical-history [get] func (h *HealthHandler) GetMedicalHistory(c *gin.Context) { userID := middleware.GetUserID(c) history, err := h.healthService.GetMedicalHistory(userID) if err != nil { response.Error(c, 404, err.Error()) return } response.Success(c, history) } // GetFamilyHistory 获取家族病史列表 // @Summary 获取家族病史列表 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=[]model.FamilyHistory} // @Router /api/user/family-history [get] func (h *HealthHandler) GetFamilyHistory(c *gin.Context) { userID := middleware.GetUserID(c) history, err := h.healthService.GetFamilyHistory(userID) if err != nil { response.Error(c, 404, err.Error()) return } response.Success(c, history) } // GetAllergyRecords 获取过敏记录列表 // @Summary 获取过敏记录列表 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Success 200 {object} response.Response{data=[]model.AllergyRecord} // @Router /api/user/allergy-records [get] func (h *HealthHandler) GetAllergyRecords(c *gin.Context) { userID := middleware.GetUserID(c) records, err := h.healthService.GetAllergyRecords(userID) if err != nil { response.Error(c, 404, err.Error()) return } response.Success(c, records) } // DeleteMedicalHistory 删除病史记录 // @Summary 删除病史记录 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param id path int true "记录ID" // @Success 200 {object} response.Response // @Router /api/user/medical-history/{id} [delete] func (h *HealthHandler) DeleteMedicalHistory(c *gin.Context) { userID := middleware.GetUserID(c) id, err := strconv.ParseUint(c.Param("id"), 10, 32) if err != nil { response.BadRequest(c, "无效的ID") return } if err := h.healthService.DeleteMedicalHistory(userID, uint(id)); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "删除成功", nil) } // DeleteFamilyHistory 删除家族病史记录 // @Summary 删除家族病史记录 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param id path int true "记录ID" // @Success 200 {object} response.Response // @Router /api/user/family-history/{id} [delete] func (h *HealthHandler) DeleteFamilyHistory(c *gin.Context) { userID := middleware.GetUserID(c) id, err := strconv.ParseUint(c.Param("id"), 10, 32) if err != nil { response.BadRequest(c, "无效的ID") return } if err := h.healthService.DeleteFamilyHistory(userID, uint(id)); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "删除成功", nil) } // DeleteAllergyRecord 删除过敏记录 // @Summary 删除过敏记录 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param id path int true "记录ID" // @Success 200 {object} response.Response // @Router /api/user/allergy-records/{id} [delete] func (h *HealthHandler) DeleteAllergyRecord(c *gin.Context) { userID := middleware.GetUserID(c) id, err := strconv.ParseUint(c.Param("id"), 10, 32) if err != nil { response.BadRequest(c, "无效的ID") return } if err := h.healthService.DeleteAllergyRecord(userID, uint(id)); err != nil { response.Error(c, 500, err.Error()) return } response.SuccessWithMessage(c, "删除成功", nil) } // UpdateHealthProfileRequest 更新健康档案请求 type UpdateHealthProfileRequest struct { Name string `json:"name"` BirthDate string `json:"birth_date"` Gender string `json:"gender"` Height float64 `json:"height"` Weight float64 `json:"weight"` BloodType string `json:"blood_type"` Occupation string `json:"occupation"` MaritalStatus string `json:"marital_status"` Region string `json:"region"` } // UpdateHealthProfile 更新健康档案 // @Summary 更新健康档案 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body UpdateHealthProfileRequest true "健康档案信息" // @Success 200 {object} response.Response // @Router /api/user/health-profile [put] func (h *HealthHandler) UpdateHealthProfile(c *gin.Context) { userID := middleware.GetUserID(c) var req UpdateHealthProfileRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } profile, err := h.healthService.UpdateHealthProfile(userID, &service.UpdateHealthProfileInput{ Name: req.Name, BirthDate: req.BirthDate, Gender: req.Gender, Height: req.Height, Weight: req.Weight, BloodType: req.BloodType, Occupation: req.Occupation, MaritalStatus: req.MaritalStatus, Region: req.Region, }) if err != nil { response.Error(c, 500, err.Error()) return } response.Success(c, profile) } // UpdateLifestyleRequest 更新生活习惯请求 type UpdateLifestyleRequest struct { SleepTime string `json:"sleep_time"` WakeTime string `json:"wake_time"` SleepQuality string `json:"sleep_quality"` MealRegularity string `json:"meal_regularity"` DietPreference string `json:"diet_preference"` DailyWaterML int `json:"daily_water_ml"` ExerciseFrequency string `json:"exercise_frequency"` ExerciseType string `json:"exercise_type"` ExerciseDurationMin int `json:"exercise_duration_min"` IsSmoker *bool `json:"is_smoker"` AlcoholFrequency string `json:"alcohol_frequency"` } // UpdateLifestyle 更新生活习惯 // @Summary 更新生活习惯 // @Tags 健康档案 // @Accept json // @Produce json // @Param Authorization header string true "Bearer Token" // @Param request body UpdateLifestyleRequest true "生活习惯信息" // @Success 200 {object} response.Response // @Router /api/user/lifestyle [put] func (h *HealthHandler) UpdateLifestyle(c *gin.Context) { userID := middleware.GetUserID(c) var req UpdateLifestyleRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误: "+err.Error()) return } lifestyle, err := h.healthService.UpdateLifestyle(userID, &service.UpdateLifestyleInput{ SleepTime: req.SleepTime, WakeTime: req.WakeTime, SleepQuality: req.SleepQuality, MealRegularity: req.MealRegularity, DietPreference: req.DietPreference, DailyWaterML: req.DailyWaterML, ExerciseFrequency: req.ExerciseFrequency, ExerciseType: req.ExerciseType, ExerciseDurationMin: req.ExerciseDurationMin, IsSmoker: req.IsSmoker, AlcoholFrequency: req.AlcoholFrequency, }) if err != nil { response.Error(c, 500, err.Error()) return } response.Success(c, lifestyle) }