Files

66 lines
1.8 KiB
Go
Raw Permalink Normal View History

package repository
import (
"context"
"with_you/internal/model"
"gorm.io/gorm"
)
type GradeRepository interface {
ListByUser(userID string) ([]*model.Grade, error)
DeleteByUser(ctx context.Context, userID string) error
BatchCreate(ctx context.Context, grades []*model.Grade) error
GetLatestGpaSummary(userID string) (*model.GpaSummary, error)
SaveGpaSummary(ctx context.Context, summary *model.GpaSummary) error
DeleteGpaSummaryByUser(ctx context.Context, userID string) error
}
type gradeRepository struct {
db *gorm.DB
}
func NewGradeRepository(db *gorm.DB) GradeRepository {
return &gradeRepository{db: db}
}
func (r *gradeRepository) ListByUser(userID string) ([]*model.Grade, error) {
var grades []*model.Grade
err := r.db.Where("user_id = ?", userID).
Order("term DESC, created_at ASC").
Find(&grades).Error
return grades, err
}
func (r *gradeRepository) DeleteByUser(ctx context.Context, userID string) error {
return r.db.WithContext(ctx).
Where("user_id = ?", userID).
Delete(&model.Grade{}).Error
}
func (r *gradeRepository) BatchCreate(ctx context.Context, grades []*model.Grade) error {
return r.db.WithContext(ctx).CreateInBatches(grades, 100).Error
}
func (r *gradeRepository) GetLatestGpaSummary(userID string) (*model.GpaSummary, error) {
var summary model.GpaSummary
err := r.db.Where("user_id = ?", userID).
Order("updated_at DESC").
First(&summary).Error
if err != nil {
return nil, err
}
return &summary, nil
}
func (r *gradeRepository) SaveGpaSummary(ctx context.Context, summary *model.GpaSummary) error {
return r.db.WithContext(ctx).Save(summary).Error
}
func (r *gradeRepository) DeleteGpaSummaryByUser(ctx context.Context, userID string) error {
return r.db.WithContext(ctx).
Where("user_id = ?", userID).
Delete(&model.GpaSummary{}).Error
}