42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
|
|
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
|
||
|
|
}
|