From 3a36a0c1b832fc7c9297c0139efa107a1183a773 Mon Sep 17 00:00:00 2001 From: poyrazK <83272398+PoyrazK@users.noreply.github.com> Date: Thu, 7 May 2026 21:19:39 +0300 Subject: [PATCH] fix: wrap lifecycle service errors with meaningful messages Return proper errors.Error type instead of raw repo errors to ensure httputil.Error() returns meaningful messages instead of generic "An unexpected error occurred". Fixes #472 --- internal/core/services/lifecycle_svc.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/internal/core/services/lifecycle_svc.go b/internal/core/services/lifecycle_svc.go index c447bcf94..100328770 100644 --- a/internal/core/services/lifecycle_svc.go +++ b/internal/core/services/lifecycle_svc.go @@ -39,7 +39,7 @@ func (s *LifecycleService) CreateRule(ctx context.Context, bucket string, prefix // 1. Verify bucket exists b, err := s.storageRepo.GetBucket(ctx, bucket) if err != nil { - return nil, err + return nil, errors.Wrap(errors.Internal, "failed to verify bucket", err) } // 2. Verify ownership (Implicitly handled by Authorize if we want to support shared buckets, @@ -65,7 +65,7 @@ func (s *LifecycleService) CreateRule(ctx context.Context, bucket string, prefix } if err := s.repo.Create(ctx, rule); err != nil { - return nil, err + return nil, errors.Wrap(errors.Internal, "failed to create lifecycle rule", err) } return rule, nil @@ -82,7 +82,7 @@ func (s *LifecycleService) ListRules(ctx context.Context, bucket string) ([]*dom // Verify bucket existence/ownership first b, err := s.storageRepo.GetBucket(ctx, bucket) if err != nil { - return nil, err + return nil, errors.Wrap(errors.Internal, "failed to verify bucket", err) } if userID != b.UserID { @@ -108,7 +108,7 @@ func (s *LifecycleService) DeleteRule(ctx context.Context, bucket string, ruleID // Verify bucket existence/ownership b, err := s.storageRepo.GetBucket(ctx, bucket) if err != nil { - return err + return errors.Wrap(errors.Internal, "failed to verify bucket", err) } if userID != b.UserID { return errors.New(errors.Forbidden, "you don't own this bucket") @@ -117,11 +117,14 @@ func (s *LifecycleService) DeleteRule(ctx context.Context, bucket string, ruleID // Verify rule belongs to bucket rule, err := s.repo.Get(ctx, id) if err != nil { - return err + return errors.Wrap(errors.Internal, "failed to get lifecycle rule", err) } if rule.BucketName != bucket { return errors.New(errors.InvalidInput, "rule does not belong to the specified bucket") } - return s.repo.Delete(ctx, id) + if err := s.repo.Delete(ctx, id); err != nil { + return errors.Wrap(errors.Internal, "failed to delete lifecycle rule", err) + } + return nil }