package repository import ( "context" "with_you/internal/model" "gorm.io/gorm" ) type ExamRepository interface { ListByUserAndSemester(userID, semester string) ([]*model.Exam, error) DeleteByUserAndSemester(ctx context.Context, userID, semester string) error BatchCreate(ctx context.Context, exams []*model.Exam) error } type examRepository struct { db *gorm.DB } func NewExamRepository(db *gorm.DB) ExamRepository { return &examRepository{db: db} } func (r *examRepository) ListByUserAndSemester(userID, semester string) ([]*model.Exam, error) { var exams []*model.Exam err := r.db.Where("user_id = ? AND semester = ?", userID, semester). Order("created_at ASC"). Find(&exams).Error return exams, err } func (r *examRepository) DeleteByUserAndSemester(ctx context.Context, userID, semester string) error { return r.db.WithContext(ctx). Where("user_id = ? AND semester = ?", userID, semester). Delete(&model.Exam{}).Error } func (r *examRepository) BatchCreate(ctx context.Context, exams []*model.Exam) error { return r.db.WithContext(ctx).CreateInBatches(exams, 100).Error }