package repositories import ( "context" "gorm.io/gorm" "tercul/internal/models" ) // MonetizationRepository defines CRUD methods specific to Monetization. type MonetizationRepository interface { BaseRepository[models.Monetization] ListByWorkID(ctx context.Context, workID uint) ([]models.Monetization, error) ListByTranslationID(ctx context.Context, translationID uint) ([]models.Monetization, error) ListByBookID(ctx context.Context, bookID uint) ([]models.Monetization, error) } type monetizationRepository struct { BaseRepository[models.Monetization] db *gorm.DB } // NewMonetizationRepository creates a new MonetizationRepository. func NewMonetizationRepository(db *gorm.DB) MonetizationRepository { return &monetizationRepository{ BaseRepository: NewBaseRepositoryImpl[models.Monetization](db), db: db, } } // ListByWorkID finds monetizations by work ID func (r *monetizationRepository) ListByWorkID(ctx context.Context, workID uint) ([]models.Monetization, error) { var monetizations []models.Monetization if err := r.db.WithContext(ctx).Where("work_id = ?", workID).Find(&monetizations).Error; err != nil { return nil, err } return monetizations, nil } // ListByTranslationID finds monetizations by translation ID func (r *monetizationRepository) ListByTranslationID(ctx context.Context, translationID uint) ([]models.Monetization, error) { var monetizations []models.Monetization if err := r.db.WithContext(ctx).Where("translation_id = ?", translationID).Find(&monetizations).Error; err != nil { return nil, err } return monetizations, nil } // ListByBookID finds monetizations by book ID func (r *monetizationRepository) ListByBookID(ctx context.Context, bookID uint) ([]models.Monetization, error) { var monetizations []models.Monetization if err := r.db.WithContext(ctx).Where("book_id = ?", bookID).Find(&monetizations).Error; err != nil { return nil, err } return monetizations, nil }