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.
71 lines
2.5 KiB
71 lines
2.5 KiB
package impl
|
|
|
|
import (
|
|
"health-ai/internal/database"
|
|
"health-ai/internal/model"
|
|
)
|
|
|
|
type ConstitutionRepository struct{}
|
|
|
|
func NewConstitutionRepository() *ConstitutionRepository {
|
|
return &ConstitutionRepository{}
|
|
}
|
|
|
|
// GetQuestions 获取所有问卷题目
|
|
func (r *ConstitutionRepository) GetQuestions() ([]model.QuestionBank, error) {
|
|
var questions []model.QuestionBank
|
|
err := database.DB.Order("constitution_type, order_num").Find(&questions).Error
|
|
return questions, err
|
|
}
|
|
|
|
// GetQuestionsByType 获取指定体质类型的问题
|
|
func (r *ConstitutionRepository) GetQuestionsByType(constitutionType string) ([]model.QuestionBank, error) {
|
|
var questions []model.QuestionBank
|
|
err := database.DB.Where("constitution_type = ?", constitutionType).Order("order_num").Find(&questions).Error
|
|
return questions, err
|
|
}
|
|
|
|
// CreateAssessment 创建体质测评记录
|
|
func (r *ConstitutionRepository) CreateAssessment(assessment *model.ConstitutionAssessment) error {
|
|
return database.DB.Create(assessment).Error
|
|
}
|
|
|
|
// GetLatestAssessment 获取用户最新的体质测评结果
|
|
func (r *ConstitutionRepository) GetLatestAssessment(userID uint) (*model.ConstitutionAssessment, error) {
|
|
var assessment model.ConstitutionAssessment
|
|
err := database.DB.Where("user_id = ?", userID).Order("assessed_at DESC").First(&assessment).Error
|
|
return &assessment, err
|
|
}
|
|
|
|
// GetAssessmentHistory 获取用户的体质测评历史
|
|
func (r *ConstitutionRepository) GetAssessmentHistory(userID uint, limit int) ([]model.ConstitutionAssessment, error) {
|
|
var assessments []model.ConstitutionAssessment
|
|
query := database.DB.Where("user_id = ?", userID).Order("assessed_at DESC")
|
|
if limit > 0 {
|
|
query = query.Limit(limit)
|
|
}
|
|
err := query.Find(&assessments).Error
|
|
return assessments, err
|
|
}
|
|
|
|
// GetAssessmentByID 根据ID获取测评记录
|
|
func (r *ConstitutionRepository) GetAssessmentByID(id uint) (*model.ConstitutionAssessment, error) {
|
|
var assessment model.ConstitutionAssessment
|
|
err := database.DB.First(&assessment, id).Error
|
|
return &assessment, err
|
|
}
|
|
|
|
// CreateAnswers 批量创建问卷答案
|
|
func (r *ConstitutionRepository) CreateAnswers(answers []model.AssessmentAnswer) error {
|
|
if len(answers) == 0 {
|
|
return nil
|
|
}
|
|
return database.DB.Create(&answers).Error
|
|
}
|
|
|
|
// GetAnswersByAssessmentID 获取测评的所有答案
|
|
func (r *ConstitutionRepository) GetAnswersByAssessmentID(assessmentID uint) ([]model.AssessmentAnswer, error) {
|
|
var answers []model.AssessmentAnswer
|
|
err := database.DB.Where("assessment_id = ?", assessmentID).Find(&answers).Error
|
|
return answers, err
|
|
}
|
|
|