package repositories import ( "context" "gorm.io/gorm" "tercul/models" ) // ContributionRepository defines CRUD methods specific to Contribution. type ContributionRepository interface { BaseRepository[models.Contribution] ListByUserID(ctx context.Context, userID uint) ([]models.Contribution, error) ListByReviewerID(ctx context.Context, reviewerID uint) ([]models.Contribution, error) ListByWorkID(ctx context.Context, workID uint) ([]models.Contribution, error) ListByTranslationID(ctx context.Context, translationID uint) ([]models.Contribution, error) ListByStatus(ctx context.Context, status string) ([]models.Contribution, error) } type contributionRepository struct { BaseRepository[models.Contribution] db *gorm.DB } // NewContributionRepository creates a new ContributionRepository. func NewContributionRepository(db *gorm.DB) ContributionRepository { return &contributionRepository{ BaseRepository: NewBaseRepositoryImpl[models.Contribution](db), db: db, } } // ListByUserID finds contributions by user ID func (r *contributionRepository) ListByUserID(ctx context.Context, userID uint) ([]models.Contribution, error) { var contributions []models.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) ([]models.Contribution, error) { var contributions []models.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) ([]models.Contribution, error) { var contributions []models.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) ([]models.Contribution, error) { var contributions []models.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) ([]models.Contribution, error) { var contributions []models.Contribution if err := r.db.WithContext(ctx).Where("status = ?", status).Find(&contributions).Error; err != nil { return nil, err } return contributions, nil }