package monetization import ( "context" "errors" "tercul/internal/domain" "tercul/internal/platform/log" "github.com/google/uuid" ) // 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 uuid.UUID, monetizationID uuid.UUID) error { if workID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid work ID or monetization ID") } log.FromContext(ctx).With("work_id", workID).With("monetization_id", monetizationID).Debug("Adding monetization to work") return c.repo.AddMonetizationToWork(ctx, workID, monetizationID) } // RemoveMonetizationFromWork removes a monetization from a work. func (c *MonetizationCommands) RemoveMonetizationFromWork(ctx context.Context, workID uuid.UUID, monetizationID uuid.UUID) error { if workID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid work ID or monetization ID") } log.FromContext(ctx).With("work_id", workID).With("monetization_id", monetizationID).Debug("Removing monetization from work") return c.repo.RemoveMonetizationFromWork(ctx, workID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToAuthor(ctx context.Context, authorID uuid.UUID, monetizationID uuid.UUID) error { if authorID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid author ID or monetization ID") } log.FromContext(ctx).With("author_id", authorID).With("monetization_id", monetizationID).Debug("Adding monetization to author") return c.repo.AddMonetizationToAuthor(ctx, authorID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromAuthor(ctx context.Context, authorID uuid.UUID, monetizationID uuid.UUID) error { if authorID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid author ID or monetization ID") } log.FromContext(ctx).With("author_id", authorID).With("monetization_id", monetizationID).Debug("Removing monetization from author") return c.repo.RemoveMonetizationFromAuthor(ctx, authorID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToBook(ctx context.Context, bookID uuid.UUID, monetizationID uuid.UUID) error { if bookID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid book ID or monetization ID") } log.FromContext(ctx).With("book_id", bookID).With("monetization_id", monetizationID).Debug("Adding monetization to book") return c.repo.AddMonetizationToBook(ctx, bookID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromBook(ctx context.Context, bookID uuid.UUID, monetizationID uuid.UUID) error { if bookID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid book ID or monetization ID") } log.FromContext(ctx).With("book_id", bookID).With("monetization_id", monetizationID).Debug("Removing monetization from book") return c.repo.RemoveMonetizationFromBook(ctx, bookID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToPublisher(ctx context.Context, publisherID uuid.UUID, monetizationID uuid.UUID) error { if publisherID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid publisher ID or monetization ID") } log.FromContext(ctx).With("publisher_id", publisherID).With("monetization_id", monetizationID).Debug("Adding monetization to publisher") return c.repo.AddMonetizationToPublisher(ctx, publisherID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromPublisher(ctx context.Context, publisherID uuid.UUID, monetizationID uuid.UUID) error { if publisherID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid publisher ID or monetization ID") } log.FromContext(ctx).With("publisher_id", publisherID).With("monetization_id", monetizationID).Debug("Removing monetization from publisher") return c.repo.RemoveMonetizationFromPublisher(ctx, publisherID, monetizationID) } func (c *MonetizationCommands) AddMonetizationToSource(ctx context.Context, sourceID uuid.UUID, monetizationID uuid.UUID) error { if sourceID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid source ID or monetization ID") } log.FromContext(ctx).With("source_id", sourceID).With("monetization_id", monetizationID).Debug("Adding monetization to source") return c.repo.AddMonetizationToSource(ctx, sourceID, monetizationID) } func (c *MonetizationCommands) RemoveMonetizationFromSource(ctx context.Context, sourceID uuid.UUID, monetizationID uuid.UUID) error { if sourceID == uuid.Nil || monetizationID == uuid.Nil { return errors.New("invalid source ID or monetization ID") } log.FromContext(ctx).With("source_id", sourceID).With("monetization_id", monetizationID).Debug("Removing monetization from source") return c.repo.RemoveMonetizationFromSource(ctx, sourceID, monetizationID) }