package repository import "health-ai/internal/model" // UserRepository 用户数据访问接口 type UserRepository interface { Create(user *model.User) error GetByID(id uint) (*model.User, error) GetByPhone(phone string) (*model.User, error) GetByEmail(email string) (*model.User, error) Update(user *model.User) error UpdateSurveyStatus(userID uint, completed bool) error } // HealthProfileRepository 健康档案数据访问接口 type HealthProfileRepository interface { Create(profile *model.HealthProfile) error GetByUserID(userID uint) (*model.HealthProfile, error) Update(profile *model.HealthProfile) error Upsert(profile *model.HealthProfile) error } // LifestyleRepository 生活习惯数据访问接口 type LifestyleRepository interface { Create(lifestyle *model.LifestyleInfo) error GetByUserID(userID uint) (*model.LifestyleInfo, error) Update(lifestyle *model.LifestyleInfo) error Upsert(lifestyle *model.LifestyleInfo) error } // MedicalHistoryRepository 病史数据访问接口 type MedicalHistoryRepository interface { Create(history *model.MedicalHistory) error GetByHealthProfileID(healthProfileID uint) ([]model.MedicalHistory, error) Update(history *model.MedicalHistory) error Delete(id uint) error BatchCreate(histories []model.MedicalHistory) error } // ConstitutionRepository 体质测评数据访问接口 type ConstitutionRepository interface { CreateAssessment(assessment *model.ConstitutionAssessment) error GetLatestByUserID(userID uint) (*model.ConstitutionAssessment, error) GetHistoryByUserID(userID uint, limit int) ([]model.ConstitutionAssessment, error) GetQuestions() ([]model.QuestionBank, error) CreateAnswers(answers []model.AssessmentAnswer) error } // ConversationRepository 对话数据访问接口 type ConversationRepository interface { Create(conversation *model.Conversation) error GetByID(id uint) (*model.Conversation, error) GetByUserID(userID uint) ([]model.Conversation, error) Delete(id uint) error AddMessage(message *model.Message) error GetMessages(conversationID uint, limit int) ([]model.Message, error) } // ProductRepository 产品数据访问接口 type ProductRepository interface { GetByID(id uint) (*model.Product, error) GetByCategory(category string) ([]model.Product, error) GetByConstitution(constitutionType string) ([]model.Product, error) SearchByKeyword(keyword string) ([]model.Product, error) GetAll(page, pageSize int) ([]model.Product, int64, error) }