package monetization import ( "context" "errors" "tercul/internal/domain" "tercul/internal/platform/log" ) // MonetizationCommands contains the command handlers for monetization. type MonetizationCommands struct { repo domain.MonetizationRepository } // NewMonetizationCommands creates a new MonetizationCommands handler. func NewMonetizationCommands(repo domain.MonetizationRepository) *MonetizationCommands { return &MonetizationCommands{repo: repo} } // AddMonetizationToWork adds a monetization to a work. func (c *MonetizationCommands) AddMonetizationToWork(ctx context.Context, workID uint, monetizationID uint) error { if workID == 0 || monetizationID == 0 { return errors.New("invalid work ID or monetization ID") } log.LogDebug("Adding monetization to work", log.F("work_id", workID), log.F("monetization_id", monetizationID)) return c.repo.AddMonetizationToWork(ctx, workID, monetizationID) } // RemoveMonetizationFromWork removes a monetization from a work. func (c *MonetizationCommands) RemoveMonetizationFromWork(ctx context.Context, workID uint, monetizationID uint) error { if workID == 0 || monetizationID == 0 { return errors.New("invalid work ID or monetization ID") } log.LogDebug("Removing monetization from work", log.F("work_id", workID), log.F("monetization_id", monetizationID)) return c.repo.RemoveMonetizationFromWork(ctx, workID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToAuthor(ctx context.Context, authorID uint, monetizationID uint) error { if authorID == 0 || monetizationID == 0 { return errors.New("invalid author ID or monetization ID") } log.LogDebug("Adding monetization to author", log.F("author_id", authorID), log.F("monetization_id", monetizationID)) return c.repo.AddMonetizationToAuthor(ctx, authorID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromAuthor(ctx context.Context, authorID uint, monetizationID uint) error { if authorID == 0 || monetizationID == 0 { return errors.New("invalid author ID or monetization ID") } log.LogDebug("Removing monetization from author", log.F("author_id", authorID), log.F("monetization_id", monetizationID)) return c.repo.RemoveMonetizationFromAuthor(ctx, authorID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToBook(ctx context.Context, bookID uint, monetizationID uint) error { if bookID == 0 || monetizationID == 0 { return errors.New("invalid book ID or monetization ID") } log.LogDebug("Adding monetization to book", log.F("book_id", bookID), log.F("monetization_id", monetizationID)) return c.repo.AddMonetizationToBook(ctx, bookID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromBook(ctx context.Context, bookID uint, monetizationID uint) error { if bookID == 0 || monetizationID == 0 { return errors.New("invalid book ID or monetization ID") } log.LogDebug("Removing monetization from book", log.F("book_id", bookID), log.F("monetization_id", monetizationID)) return c.repo.RemoveMonetizationFromBook(ctx, bookID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToPublisher(ctx context.Context, publisherID uint, monetizationID uint) error { if publisherID == 0 || monetizationID == 0 { return errors.New("invalid publisher ID or monetization ID") } log.LogDebug("Adding monetization to publisher", log.F("publisher_id", publisherID), log.F("monetization_id", monetizationID)) return c.repo.AddMonetizationToPublisher(ctx, publisherID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromPublisher(ctx context.Context, publisherID uint, monetizationID uint) error { if publisherID == 0 || monetizationID == 0 { return errors.New("invalid publisher ID or monetization ID") } log.LogDebug("Removing monetization from publisher", log.F("publisher_id", publisherID), log.F("monetization_id", monetizationID)) return c.repo.RemoveMonetizationFromPublisher(ctx, publisherID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToSource(ctx context.Context, sourceID uint, monetizationID uint) error { if sourceID == 0 || monetizationID == 0 { return errors.New("invalid source ID or monetization ID") } log.LogDebug("Adding monetization to source", log.F("source_id", sourceID), log.F("monetization_id", monetizationID)) return c.repo.AddMonetizationToSource(ctx, sourceID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromSource(ctx context.Context, sourceID uint, monetizationID uint) error { if sourceID == 0 || monetizationID == 0 { return errors.New("invalid source ID or monetization ID") } log.LogDebug("Removing monetization from source", log.F("source_id", sourceID), log.F("monetization_id", monetizationID)) return c.repo.RemoveMonetizationFromSource(ctx, sourceID, monetizationID) }