Commit Graph
31 Commits
Author SHA1 Message Date
nutcas3 66ebf2c573 refactor: Extract carrier setup logic into separate file and remove unnecessary comments
- Move SetupCarriers method from selection_integration.go to new setup_carriers.go file
- Remove redundant comments from SelectionIntegration struct and methods
- Clean up inline comments in RunDemo method while preserving functionality
2026-05-01 23:27:24 +03:00
nutcas3 ae8b7bdce1 feat: Refactor profile handlers into modular core components with simplified operations
- Split profile_handlers.go into profile_handlers_core.go, profile_handlers_management_core.go, and profile_handlers_management_delete.go
- Simplify OrderProfileHandlerWithRepo with ICCID/IMSI-only validation and "downloaded" state
- Remove webhook and message queue notifications from order handler
- Add UpdateProfileHandler with state validation for downloaded/activated/deactivated/expired
- Add DeleteProfileHandler with existence
2026-05-01 23:26:41 +03:00
nutcas3 95c29d3c95 feat: Add carrier selection integration layer with multi-carrier setup, HTTP server, and demo capabilities
- Add SelectionIntegration struct with manager, selection service, handler, and SMDP service fields
- Add NewSelectionIntegration constructor with default manager config and 30s health checks
- Add SetupCarriers with AT&T, Verizon, T-Mobile DE, and Orange FR configurations
- Add StartServer method with health endpoint and 30s read/write timeouts
- Add StartHealthChecking wrapper for background
2026-05-01 20:39:53 +03:00
nutcas3 720ecb80bd feat: Add carrier selection handler with optimal selection, analytics, and performance monitoring endpoints
- Add SelectionHandler struct with manager and logger fields
- Add NewSelectionHandler constructor with info-level logging
- Add SelectOptimalCarrier endpoint with criteria validation and scoring
- Add SelectCarrier endpoint using default selection criteria
- Add GetSelectionHistory endpoint with carrier ID path parameter
- Add UpdateLearning endpoint with performance feedback validation
- Add GetSelectionAnalytics endpoint with carrier stats
2026-05-01 20:35:51 +03:00
nutcas3 afeffa0d4e feat: Add intelligent carrier selection service with scoring, recommendations, and analytics
- Add SelectionService struct with manager, handler, and logger fields
- Add NewSelectionService constructor with info-level logging
- Add IntelligentCarrierSelection method with comprehensive criteria evaluation
- Add IntelligentSelectionRequest with region, profile type, urgency, and cost sensitivity
- Add UserPreferences and BusinessContext structs for selection customization
- Add IntelligentSelectionResponse with selected
2026-05-01 20:30:02 +03:00
nutcas3 a5acfa142f feat: Add SM-DP+ manager with multi-carrier load balancing, health checking, and profile operations
- Add DefaultManagerConfig with 30s health checks, 3 retries, and circuit breaker configuration
- Add CarrierConfig struct with ES2 settings, MCC/MNC, priority, and feature support
- Add ToCarrier method converting CarrierConfig to Carrier with metrics and capabilities
- Add HealthChecker with periodic carrier health monitoring and status evaluation
- Add LoadBalancer with weighted round-robin, least
2026-05-01 20:11:02 +03:00
nutcas3 3954e947b1 feat: Add SM-DP+ service layer with multi-carrier management and profile download operations
- Add SMDPService struct with manager, repository, and logger fields
- Add NewSMDPService constructor with default config and background health checking
- Add InitializeDefaultCarriers with AT&T, Verizon, and T-Mobile DE configurations
- Add DownloadProfile method with context support and request logging
- Add GetOptimalCarrier wrapping SelectCarrier for best carrier selection
- Add GetCarrierHealth returning
2026-05-01 20:02:32 +03:00
nutcas3 83736a1d56 feat: Add SM-DP+ integration layer with multi-carrier system initialization and route registration
- Add SMDPIntegration struct with service, handler, repository, and logger fields
- Add NewSMDPIntegration constructor with default carrier initialization
- Add InitializeSystem method with carrier health logging and status tracking
- Add RegisterRoutes method with profile, carrier, health, and metrics endpoints
- Add healthHandler with carrier health status aggregation and degraded state detection
- Add metricsHandler
2026-05-01 20:02:18 +03:00
nutcas3 d9af8db6b4 feat: Add SM-DP+ handler with multi-carrier management and profile operations
- Add SMDPHandler struct with manager field and NewSMDPHandler constructor
- Add AddCarrier endpoint with JSON binding and carrier configuration support
- Add RemoveCarrier endpoint with carrier ID parameter validation
- Add DownloadProfile endpoint with 30-second timeout and context cancellation
- Add GetCarrierStatus endpoint returning all carriers with timestamp
- Add GetProfileStatus endpoint with EID/ICCID validation
2026-05-01 20:01:55 +03:00
nutcas3 5db8818b85 refactor: Rename handler package to handlers in carrier-connector
- Rename internal/handler directory to internal/handlers
- Update handler import path in main.go and routes.go
2026-05-01 19:48:44 +03:00
nutcas3 dd346a7484 refactor: Update Rust version to 1.95, add SSRF protection to ES2 client, and fix CLI API endpoint paths
- Change rust-version from "1.94" to "1.95" in workspace Cargo.toml
- Add validateURL method to ES2Client with private IP blocking and domain whitelisting
- Add SSRF validation to DownloadProfile and GetProfileStatus endpoints
- Add slices, errors, net, and url imports to es2/client.go
- Update CLI charging API endpoints from /v1 to /api/v1 prefix
- Fix DeductCredit response handling to use nil
2026-05-01 00:41:57 +03:00
nutcas3 cd392894df refactor: Replace manual map copy with maps.Copy in carrier-connector message queue
- Add maps import to mq.go
- Replace manual for loop copying payload map with maps.Copy in PublishProfileEvent
- Simplify map merging logic while maintaining same functionality
2026-04-29 13:23:41 +03:00
nutcas3 609bdb16fa feat: Set repository root as working directory for Goose migrations in carrier-connector
- Add filepath import for path manipulation
- Calculate repository root path relative to carrier-connector location (../../)
- Set cmd.Dir to repository root before executing Goose command
- Add comment explaining directory change to locate migrations folder
- Ensure migrations can be found from carrier-connector's nested location
2026-04-29 04:21:19 +03:00
nutcas3 76d7661443 feat: Add automatic Goose migration execution on startup in carrier-connector PostgresProfileStore
- Add os/exec import for running external commands
- Implement runMigrations function to execute goose postgres migrations
- Call runMigrations in NewPostgresProfileStore before returning store instance
- Update function comment to reflect automatic migration execution on startup
- Add error handling and output capture for migration failures
2026-04-29 02:57:41 +03:00
nutcas3 a8381e6b8f refactor: Remove inline schema creation from PostgresProfileStore in favor of centralized migration system
- Remove AutoMigrate call for profileRow from NewPostgresProfileStore
- Update function comment to reference migration system (make db-migrate) instead of inline schema creation
- Add note that esim_profiles table is created by migration system
- Remove error handling for AutoMigrate execution
2026-04-29 02:55:13 +03:00
nutcas3 d74ac722c4 test: Add unit tests for service discovery and message queue with integration test skips
- Add discovery_test.go with Service and ServiceDiscovery struct tests
- Add integration test placeholders for service registration, discovery, deregistration, and health checks
- Add mq_test.go with Message serialization and profile event tests
- Add integration test placeholders for RabbitMQ connectivity, queue declaration, and publish/consume flow
- Add github.com/stretchr/testify v1.11.1 to carrier-connector dependencies
2026-04-25 06:59:03 +03:00
nutcas3 6b2a38b51b feat: Add RabbitMQ message queue integration for profile event publishing in carrier-connector
- Add github.com/rabbitmq/amqp091-go v1.11.0 dependency to go.mod
- Add messageQueue parameter to OrderProfileHandlerWithRepo and DeleteProfileHandlerWithRepo
- Add PublishProfileEvent calls for profile.downloaded and profile.deleted events with goroutines
- Add message queue initialization in main.go with RABBITMQ_URL environment variable
- Add profile-events queue declaration with error handling and fallback
- Add messageQueue parameter to setupRoutes
2026-04-25 06:50:13 +03:00
nutcas3 0ea496b627 feat: Add RabbitMQ message queue integration with profile event publishing
- Add mq package with MessageQueue struct containing connection, channel, and url fields
- Add Message struct with Type, Payload, and Timestamp fields
- Add NewMessageQueue constructor with RABBITMQ_URL environment variable and amqp://guest:guest@localhost:5672/ default
- Add Close method to cleanup channel and connection resources
- Add DeclareQueue method with durable queue configuration
- Add Publish method with 5-second context
2026-04-25 06:49:21 +03:00
nutcas3 6cf546712b refactor: Replace interface{} with any type alias across codebase
- Replace interface{} with any in api_integration_test.go makeRequest method and test response maps
- Replace interface{} with any in logging.go WithField method and all logging function signatures
- Replace interface{} with any in middleware etag.go sync.Map.Range callback
- Replace interface{} with any in middleware redis_ratelimit.go RedisClientInterface and result parsing
- Replace interface{} with any in middleware redis_ratelimit_
2026-04-25 06:31:02 +03:00
nutcas3 2d891cdb2a feat: Add webhook notifications to carrier connector profile operations
- Add webhookClient parameter to OrderProfileHandlerWithRepo and DeleteProfileHandlerWithRepo
- Add SendDownloadFailed webhook notification on profile order failure with error details
- Add SendProfileDownloaded webhook notification on successful profile download with IMSI, profileType, and status
- Add SendProfileDeleted webhook notification on profile deletion with executionStatus and statusMessage
- Add webhook package import
2026-04-25 05:47:14 +03:00
nutcas3 b983e226f6 feat: Add webhook client for carrier connector profile event notifications to API server
- Add WebhookClient struct with httpClient (10s timeout), webhookURL, and apiKey fields
- Add WebhookEvent struct with event_type, timestamp, profile_iccid, and data fields
- Add event type constants (profile.downloaded, activated, deactivated, deleted, status_changed, download.failed)
- Add SendNotification method with JSON marshaling, Bearer token auth, and error handling for 4xx/5xx responses
- Add helper
2026-04-25 05:41:18 +03:00
nutcas3 23da0f834f feat: Add thread-safe in-memory cache implementation for carrier connector profile repository
- Add CachedProfileStore wrapper with configurable TTL and automatic cleanup
- Add cacheEntry struct with profile data and expiration timestamp
- Add Get method with cache-first lookup and automatic cache population on miss
- Add cache invalidation on Create, UpdateState, and Delete operations
- Add background cleanup goroutine with ticker running at TTL/2 interval
- Add manual Invalidate and InvalidateAll methods for cache
2026-04-25 05:40:49 +03:00
nutcas3 c43709d40d feat: Add exponential backoff retry logic to ES2 client HTTP requests
- Add maxRetries (3) and retryDelay (1s) fields to ES2Client struct
- Add retryableError helper to identify retryable errors (network errors, 5xx, 429)
- Add executeWithRetry method with exponential backoff and context cancellation support
- Replace direct httpClient.Do calls with executeWithRetry in all ES2 operations
- Update error messages to indicate retry attempts ("after retries")
- Add math package import for exponential backoff calculation
2026-04-25 05:40:34 +03:00
nutcas3 8e40a54d8b feat: Add liveness and readiness health check endpoints with database connectivity validation
- Add Ping method to PostgresProfileStore to check database connection status
- Add Ping method to ProfileRepository interface
- Add /api/v1/health/live endpoint for liveness checks (always returns alive if service is running)
- Add /api/v1/health/ready endpoint for readiness checks with database connectivity validation
- Add readinessHandler that returns SERVICE_UNAVAILABLE status when database ping fails
2026-04-25 03:23:01 +03:00
nutcas3 d27eb871e3 feat: Add DatabaseConfig to carrier-connector config and remove InMemoryProfileStore implementation for Postgres migration
- Add DatabaseConfig struct with DSN field for Postgres connection string
- Add package documentation comments for ES2Config/DatabaseConfig/LoadES2Config
- Normalize ES2Config field alignment for BaseURL/APIKey/InsecureSkipVerify/FunctionalityRequesterID
- Remove InMemoryProfileStore struct and all methods (Create/Get/List/UpdateState/Delete) from profile.go
- Remove sync package import
2026-04-24 08:59:44 +03:00
nutcas3 cb8b6c4d96 feat: Add PostgresProfileStore repository with GORM-based persistence for eSIM profile lifecycle management
- Add profileRow struct with ICCID/EID/IMSI/MCC/MNC/ProfileType/State/TenantID/ActivationCode/CreatedAt/UpdatedAt fields mapped to esim_profiles table with indexes on EID/IMSI/State/TenantID
- Add NewPostgresProfileStore with DSN validation, GORM connection setup with Warn logging, and AutoMigrate for esim_profiles schema
- Add Create/Get/List/UpdateState/Delete methods implementing ProfileRepository interface with
2026-04-24 08:59:09 +03:00
nutcas3 d27709222e feat: Add carrier-connector handler package with carrier info, connectivity check, and shared types for GSMA ES2+ profile management
- Add handlers package with GetCarrierInfoHandler returning static carrier name/mcc/mnc/smdpUrl/supported/lastChecked from environment config
- Add CheckConnectivityHandler with ES2+ GetProfileStatus probe using synthetic EID/ICCID and smdpConnected/checkedAt/error response
- Add ProfileOrder struct with EID/ICCID/IMSI/K/OPc/MCC/MNC/ProfileType/ConfirmationCode fields
2026-04-24 08:50:22 +03:00
nutcas3 5f6d58a0b7 feat: Add profile handlers with repository integration for eSIM profile lifecycle management via ES2+ protocol
- Add OrderProfileHandlerWithRepo with ICCID/IMSI/K/OPc validation, ES2+ DownloadProfile call, and Profile creation with ICCID/EID/IMSI/MCC/MNC/ProfileType/State/TenantID persistence
- Add GetProfileHandlerWithRepo with repository.Get/ES2+ GetProfileStatus calls and merged response with state/imsi/tenantId/createdAt/updatedAt/executionStatus/profileState/statusMessage fields
- Add ListProfilesHandlerWithRepo with pagination support, page/limit query
2026-04-24 08:49:54 +03:00
nutcas3 8acba8b1e5 feat: Add ProfileRepository interface with in-memory implementation for eSIM profile storage and CRUD operations
- Add Profile struct with ICCID/EID/IMSI/MCC/MNC/ProfileType/State/TenantID/ActivationCode/CreatedAt/UpdatedAt fields
- Add ListFilter struct with TenantID/State/Limit/Offset fields for query filtering
- Add ProfileRepository interface with Create/Get/List/UpdateState/Delete methods
- Add InMemoryProfileStore with sync.RWMutex for concurrent-safe in-memory storage
- Add NewInMemoryProfileStore constructor
2026-04-24 08:49:18 +03:00
nutcas3 02246edea1 feat: Add ES2+ configuration management for carrier-connector
- Add ES2Config struct with base URL, API key, TLS verification, and requester ID fields
- Add LoadES2Config function with default SMDP connection parameters
- Include JSON tags for configuration serialization
2026-04-14 15:52:38 +03:00
nutcas3 008f7415a6 feat: Add ES2+ client for eSIM profile management operations
- Add ES2Client struct with HTTP client and configuration
- Add NewES2Client with 30s timeout and TLS configuration
- Add DownloadProfile for eSIM profile download requests
- Add GetProfileStatus for profile state queries
- Add DeleteProfile for profile removal operations
- Add EnableProfile and DisableProfile for profile state management
- Add request/response types for all ES2+ operations (EID, ICCID, profile type, confirmation code)
- Add setHeaders helper
2026-04-14 15:50:28 +03:00