package sql import ( "context" "tercul/internal/domain" "tercul/internal/domain/work" "gorm.io/gorm" ) type monetizationRepository struct { domain.BaseRepository[domain.Monetization] db *gorm.DB } // NewMonetizationRepository creates a new MonetizationRepository. func NewMonetizationRepository(db *gorm.DB) domain.MonetizationRepository { return &monetizationRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Monetization](db), db: db, } } func (r *monetizationRepository) AddMonetizationToWork(ctx context.Context, workID uint, monetizationID uint) error { workRecord := &work.Work{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: workID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(workRecord).Association("Monetizations").Append(monetization) } func (r *monetizationRepository) RemoveMonetizationFromWork(ctx context.Context, workID uint, monetizationID uint) error { workRecord := &work.Work{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: workID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(workRecord).Association("Monetizations").Delete(monetization) } func (r *monetizationRepository) AddMonetizationToAuthor(ctx context.Context, authorID uint, monetizationID uint) error { author := &domain.Author{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: authorID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(author).Association("Monetizations").Append(monetization) } func (r *monetizationRepository) RemoveMonetizationFromAuthor(ctx context.Context, authorID uint, monetizationID uint) error { author := &domain.Author{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: authorID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(author).Association("Monetizations").Delete(monetization) } func (r *monetizationRepository) AddMonetizationToBook(ctx context.Context, bookID uint, monetizationID uint) error { book := &domain.Book{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: bookID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(book).Association("Monetizations").Append(monetization) } func (r *monetizationRepository) RemoveMonetizationFromBook(ctx context.Context, bookID uint, monetizationID uint) error { book := &domain.Book{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: bookID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(book).Association("Monetizations").Delete(monetization) } func (r *monetizationRepository) AddMonetizationToPublisher(ctx context.Context, publisherID uint, monetizationID uint) error { publisher := &domain.Publisher{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: publisherID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(publisher).Association("Monetizations").Append(monetization) } func (r *monetizationRepository) RemoveMonetizationFromPublisher(ctx context.Context, publisherID uint, monetizationID uint) error { publisher := &domain.Publisher{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: publisherID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(publisher).Association("Monetizations").Delete(monetization) } func (r *monetizationRepository) AddMonetizationToSource(ctx context.Context, sourceID uint, monetizationID uint) error { source := &domain.Source{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: sourceID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(source).Association("Monetizations").Append(monetization) } func (r *monetizationRepository) RemoveMonetizationFromSource(ctx context.Context, sourceID uint, monetizationID uint) error { source := &domain.Source{TranslatableModel: domain.TranslatableModel{BaseModel: domain.BaseModel{ID: sourceID}}} monetization := &domain.Monetization{BaseModel: domain.BaseModel{ID: monetizationID}} return r.db.WithContext(ctx).Model(source).Association("Monetizations").Delete(monetization) }