package main import ( "log" "os" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/adapters/driven/edgeconnect" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/adapters/driving/cli" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/application/app" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/application/cloudlet" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/application/instance" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/application/organization" "edp.buildth.ing/DevFW-CICD/edge-connect-client/internal/infrastructure/edgeconnect_client" ) func main() { // Hexagonal Architecture Wiring // 1. Infrastructure Layer: Create the low-level EdgeConnect client baseURL := getEnvOrDefault("EDGE_CONNECT_BASE_URL", "https://console.mobiledgex.net") username := os.Getenv("EDGE_CONNECT_USERNAME") password := os.Getenv("EDGE_CONNECT_PASSWORD") // Use a logger for the infrastructure client logger := log.New(os.Stderr, "[edgeconnect-client] ", log.LstdFlags) clientOpts := []edgeconnect_client.Option{ edgeconnect_client.WithLogger(logger), } var infraClient *edgeconnect_client.Client if username != "" && password != "" { infraClient = edgeconnect_client.NewClientWithCredentials(baseURL, username, password, clientOpts...) } else { infraClient = edgeconnect_client.NewClient(baseURL, clientOpts...) } // 2. Adapter Layer: Create the driven adapter, injecting the infrastructure client. // This adapter implements the repository interfaces required by the application layer. edgeConnectAdapter := edgeconnect.NewAdapter(infraClient) // 3. Application Layer: Create services, injecting the adapter (which fulfills the repository port). appService := app.NewService(edgeConnectAdapter) instanceService := instance.NewService(edgeConnectAdapter) cloudletService := cloudlet.NewService(edgeConnectAdapter) organizationService := organization.NewService(edgeConnectAdapter) // 4. Driving Adapter (Presentation Layer): Execute the CLI, injecting the application services. cli.ExecuteWithServices(appService, instanceService, cloudletService, organizationService) } func getEnvOrDefault(key, defaultValue string) string { if value := os.Getenv(key); value != "" { return value } return defaultValue }