package category import ( "context" "tercul/internal/domain" "github.com/google/uuid" ) // CategoryCommands contains the command handlers for the category aggregate. type CategoryCommands struct { repo domain.CategoryRepository } // NewCategoryCommands creates a new CategoryCommands handler. func NewCategoryCommands(repo domain.CategoryRepository) *CategoryCommands { return &CategoryCommands{repo: repo} } // CreateCategoryInput represents the input for creating a new category. type CreateCategoryInput struct { Name string Description string ParentID *uuid.UUID } // CreateCategory creates a new category. func (c *CategoryCommands) CreateCategory(ctx context.Context, input CreateCategoryInput) (*domain.Category, error) { category := &domain.Category{ Name: input.Name, Description: input.Description, ParentID: input.ParentID, } err := c.repo.Create(ctx, category) if err != nil { return nil, err } return category, nil } // UpdateCategoryInput represents the input for updating an existing category. type UpdateCategoryInput struct { ID uuid.UUID Name string Description string ParentID *uuid.UUID } // UpdateCategory updates an existing category. func (c *CategoryCommands) UpdateCategory(ctx context.Context, input UpdateCategoryInput) (*domain.Category, error) { category, err := c.repo.GetByID(ctx, input.ID) if err != nil { return nil, err } category.Name = input.Name category.Description = input.Description category.ParentID = input.ParentID err = c.repo.Update(ctx, category) if err != nil { return nil, err } return category, nil } // DeleteCategory deletes a category by ID. func (c *CategoryCommands) DeleteCategory(ctx context.Context, id uuid.UUID) error { return c.repo.Delete(ctx, id) }