Add refund order
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package category
|
||||
|
||||
import (
|
||||
"enaklo-pos-be/internal/common/logger"
|
||||
"enaklo-pos-be/internal/common/mycontext"
|
||||
"enaklo-pos-be/internal/entity"
|
||||
"github.com/pkg/errors"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Service interface {
|
||||
Create(ctx mycontext.Context, category *entity.Category) (*entity.Category, error)
|
||||
GetByPartnerID(ctx mycontext.Context, partnerID int64) ([]*entity.Category, error)
|
||||
Update(ctx mycontext.Context, category *entity.Category) error
|
||||
Delete(ctx mycontext.Context, id int64) error
|
||||
GetByID(ctx mycontext.Context, id int64) (*entity.Category, error)
|
||||
}
|
||||
|
||||
type Repository interface {
|
||||
Create(ctx mycontext.Context, category *entity.Category) (*entity.Category, error)
|
||||
GetByPartnerID(ctx mycontext.Context, partnerID int64) ([]*entity.Category, error)
|
||||
Update(ctx mycontext.Context, category *entity.Category) error
|
||||
Delete(ctx mycontext.Context, id int64) error
|
||||
GetByID(ctx mycontext.Context, id int64) (*entity.Category, error)
|
||||
}
|
||||
|
||||
type categorySvc struct {
|
||||
repo Repository
|
||||
}
|
||||
|
||||
func New(repo Repository) Service {
|
||||
return &categorySvc{repo: repo}
|
||||
}
|
||||
|
||||
func (s *categorySvc) Create(ctx mycontext.Context, category *entity.Category) (*entity.Category, error) {
|
||||
existing, err := s.repo.GetByPartnerID(ctx, category.PartnerID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to fetch categories")
|
||||
}
|
||||
|
||||
for _, cat := range existing {
|
||||
if cat.Name == category.Name {
|
||||
return nil, errors.New("category name already exists for this partner")
|
||||
}
|
||||
}
|
||||
|
||||
newCategory, err := s.repo.Create(ctx, category)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to create category", zap.Error(err))
|
||||
return nil, errors.Wrap(err, "failed to create category")
|
||||
}
|
||||
|
||||
return newCategory, nil
|
||||
}
|
||||
|
||||
func (s *categorySvc) GetByPartnerID(ctx mycontext.Context, partnerID int64) ([]*entity.Category, error) {
|
||||
categories, err := s.repo.GetByPartnerID(ctx, partnerID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get categories by partner")
|
||||
}
|
||||
return categories, nil
|
||||
}
|
||||
|
||||
func (s *categorySvc) Update(ctx mycontext.Context, category *entity.Category) error {
|
||||
err := s.repo.Update(ctx, category)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to update category", zap.Error(err))
|
||||
return errors.Wrap(err, "failed to update category")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *categorySvc) Delete(ctx mycontext.Context, id int64) error {
|
||||
err := s.repo.Delete(ctx, id)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to delete category", zap.Error(err))
|
||||
return errors.Wrap(err, "failed to delete category")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *categorySvc) GetByID(ctx mycontext.Context, id int64) (*entity.Category, error) {
|
||||
category, err := s.repo.GetByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get category by ID")
|
||||
}
|
||||
return category, nil
|
||||
}
|
||||
Reference in New Issue
Block a user