···
voteRepo := postgresRepo.NewVoteRepository(db)
log.Println("✅ Vote repository initialized (Jetstream indexing only)")
289
+
// Initialize comment repository (used by Jetstream consumer for indexing)
290
+
commentRepo := postgresRepo.NewCommentRepository(db)
291
+
log.Println("✅ Comment repository initialized (Jetstream indexing only)")
// Initialize feed service
feedRepo := postgresRepo.NewCommunityFeedRepository(db)
feedService := communityFeeds.NewCommunityFeedService(feedRepo, communityService)
···
log.Printf("Started Jetstream vote consumer: %s", voteJetstreamURL)
log.Println(" - Indexing: social.coves.feed.vote CREATE/DELETE operations")
log.Println(" - Updating: Post vote counts atomically")
377
+
// Start Jetstream consumer for comments
378
+
// This consumer indexes comments from user repositories and updates parent counts
379
+
commentJetstreamURL := os.Getenv("COMMENT_JETSTREAM_URL")
380
+
if commentJetstreamURL == "" {
381
+
// Listen to comment record CREATE/UPDATE/DELETE events from user repositories
382
+
commentJetstreamURL = "ws://localhost:6008/subscribe?wantedCollections=social.coves.feed.comment"
385
+
commentEventConsumer := jetstream.NewCommentEventConsumer(commentRepo, db)
386
+
commentJetstreamConnector := jetstream.NewCommentJetstreamConnector(commentEventConsumer, commentJetstreamURL)
389
+
if startErr := commentJetstreamConnector.Start(ctx); startErr != nil {
390
+
log.Printf("Comment Jetstream consumer stopped: %v", startErr)
394
+
log.Printf("Started Jetstream comment consumer: %s", commentJetstreamURL)
395
+
log.Println(" - Indexing: social.coves.feed.comment CREATE/UPDATE/DELETE operations")
396
+
log.Println(" - Updating: Post comment counts and comment reply counts atomically")
routes.RegisterUserRoutes(r, userService)