func main()

in cmd/subscriber/main.go [22:61]


func main() {
	var opts options
	if _, err := flags.Parse(&opts); err != nil {
		os.Exit(1)
	}

	log.Println("Starting subscriber service")
	log.Println("Project ID:", opts.ProjectId)
	log.Println("Subscription ID:", opts.SubscriptionId)
	log.Println("Database URL:", opts.DatabaseUrl)

	// Connect database
	ctx := context.Background()
	db := repo.NewDatabase(opts.DatabaseUrl, maxDbConnections)

	if err := db.Connect(ctx); err != nil {
		log.Fatalf("Error connecting to database: %v\n", err)
	}
	defer db.Close()

	if exists, err := db.PingTable(); !exists || err != nil {
		log.Fatalf("Database has not been initialized: %v\n", err)
	}

	// Connect to pub/sub client
	client, err := pubsub.NewClient(ctx, opts.ProjectId)
	if err != nil {
		log.Fatalf("Error creating pub/sub client: %v\n", err)
	}

	// Instantiate repositories
	directoryRepo := repo.NewDirectoryRepository(db)
	metadataRepo := repo.NewMetadataRepository(db)

	subService := subscriber.NewSubscriberService(client, opts.SubscriptionId, directoryRepo, metadataRepo)

	if err := subService.Start(ctx); err != nil {
		log.Fatalf("Error while listening to subscription: %v\n", err)
	}
}