package comment import ( "context" "tercul/internal/domain" ) // CommentCommands contains the command handlers for the comment aggregate. type CommentCommands struct { repo domain.CommentRepository } // NewCommentCommands creates a new CommentCommands handler. func NewCommentCommands(repo domain.CommentRepository) *CommentCommands { return &CommentCommands{repo: repo} } // CreateCommentInput represents the input for creating a new comment. type CreateCommentInput struct { Text string UserID uint WorkID *uint TranslationID *uint ParentID *uint } // CreateComment creates a new comment. func (c *CommentCommands) CreateComment(ctx context.Context, input CreateCommentInput) (*domain.Comment, error) { comment := &domain.Comment{ Text: input.Text, UserID: input.UserID, WorkID: input.WorkID, TranslationID: input.TranslationID, ParentID: input.ParentID, } err := c.repo.Create(ctx, comment) if err != nil { return nil, err } return comment, nil } // UpdateCommentInput represents the input for updating an existing comment. type UpdateCommentInput struct { ID uint Text string } // UpdateComment updates an existing comment. func (c *CommentCommands) UpdateComment(ctx context.Context, input UpdateCommentInput) (*domain.Comment, error) { comment, err := c.repo.GetByID(ctx, input.ID) if err != nil { return nil, err } comment.Text = input.Text err = c.repo.Update(ctx, comment) if err != nil { return nil, err } return comment, nil } // DeleteComment deletes a comment by ID. func (c *CommentCommands) DeleteComment(ctx context.Context, id uint) error { return c.repo.Delete(ctx, id) }