package sql import ( "context" "tercul/internal/domain" "tercul/internal/domain/contribution" "gorm.io/gorm" ) type contributionRepository struct { domain.BaseRepository[domain.Contribution] db *gorm.DB } // NewContributionRepository creates a new ContributionRepository. func NewContributionRepository(db *gorm.DB) contribution.ContributionRepository { return &contributionRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Contribution](db), db: db, } } // ListByUserID finds contributions by user ID func (r *contributionRepository) ListByUserID(ctx context.Context, userID uint) ([]domain.Contribution, error) { var contributions []domain.Contribution if err := r.db.WithContext(ctx).Where("user_id = ?", userID).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil } // ListByReviewerID finds contributions by reviewer ID func (r *contributionRepository) ListByReviewerID(ctx context.Context, reviewerID uint) ([]domain.Contribution, error) { var contributions []domain.Contribution if err := r.db.WithContext(ctx).Where("reviewer_id = ?", reviewerID).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil } // ListByWorkID finds contributions by work ID func (r *contributionRepository) ListByWorkID(ctx context.Context, workID uint) ([]domain.Contribution, error) { var contributions []domain.Contribution if err := r.db.WithContext(ctx).Where("work_id = ?", workID).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil } // ListByTranslationID finds contributions by translation ID func (r *contributionRepository) ListByTranslationID(ctx context.Context, translationID uint) ([]domain.Contribution, error) { var contributions []domain.Contribution if err := r.db.WithContext(ctx).Where("translation_id = ?", translationID).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil } // ListByStatus finds contributions by status func (r *contributionRepository) ListByStatus(ctx context.Context, status string) ([]domain.Contribution, error) { var contributions []domain.Contribution if err := r.db.WithContext(ctx).Where("status = ?", status).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil }