fix: Code for category

This commit is contained in:
2026-06-27 19:35:53 +05:00
parent 46add88fd5
commit 148d1fb841
14 changed files with 127 additions and 64 deletions

View File

@@ -25,6 +25,7 @@ type CategoryRepository interface {
// CategoryInput carries the mutable fields of a category.
type CategoryInput struct {
ParentID *uuid.UUID
Code string
Name string
Description string
}
@@ -39,13 +40,17 @@ func NewCategoryService(repo CategoryRepository) *CategoryService {
return &CategoryService{repo: repo}
}
// Create validates the parent (if any) and stores a new category.
// Create validates the code and parent (if any) and stores a new category.
func (s *CategoryService) Create(ctx context.Context, in CategoryInput) (domain.Category, error) {
if !domain.ValidSlug(in.Code) {
return domain.Category{}, fmt.Errorf("%w: code must be a slug (lowercase latin letters, digits, and dashes)", domain.ErrValidation)
}
if err := s.ensureParentExists(ctx, in.ParentID); err != nil {
return domain.Category{}, err
}
return s.repo.Create(ctx, domain.Category{
ParentID: in.ParentID,
Code: in.Code,
Name: in.Name,
Description: in.Description,
})
@@ -61,8 +66,11 @@ func (s *CategoryService) List(ctx context.Context, parentID *uuid.UUID) ([]doma
return s.repo.List(ctx, parentID)
}
// Update validates the parent change (existence + no cycles) and stores it.
// Update validates the code and parent change (existence + no cycles) and stores it.
func (s *CategoryService) Update(ctx context.Context, id uuid.UUID, in CategoryInput) (domain.Category, error) {
if !domain.ValidSlug(in.Code) {
return domain.Category{}, fmt.Errorf("%w: code must be a slug (lowercase latin letters, digits, and dashes)", domain.ErrValidation)
}
if _, err := s.repo.GetByID(ctx, id); err != nil {
return domain.Category{}, err
}
@@ -75,6 +83,7 @@ func (s *CategoryService) Update(ctx context.Context, id uuid.UUID, in CategoryI
return s.repo.Update(ctx, domain.Category{
ID: id,
ParentID: in.ParentID,
Code: in.Code,
Name: in.Name,
Description: in.Description,
})