A community based topic aggregation platform built on atproto

feat(server): wire up comment query API endpoint

Integrate comment query API into server:

- Initialize comment service with repository dependencies
- Register XRPC route: /xrpc/social.coves.community.comment.getComments
- Apply OptionalAuthMiddleware for viewer-specific responses
- Add startup logging for API availability

Route supports:
- Authenticated requests (Bearer token) → viewer state included
- Anonymous requests → public read access
- Query parameters per lexicon spec

Service adapter bridges handler and domain layers for clean separation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

Changed files
+16
cmd
server
+16
cmd/server/main.go
···
_ "github.com/lib/pq"
"github.com/pressly/goose/v3"
+
commentsAPI "Coves/internal/api/handlers/comments"
+
"Coves/internal/core/comments"
postgresRepo "Coves/internal/db/postgres"
)
···
commentRepo := postgresRepo.NewCommentRepository(db)
log.Println("✅ Comment repository initialized (Jetstream indexing only)")
+
// Initialize comment service (for query API)
+
commentService := comments.NewCommentService(commentRepo, userRepo, postRepo)
+
log.Println("✅ Comment service initialized")
+
// Initialize feed service
feedRepo := postgresRepo.NewCommunityFeedRepository(db)
feedService := communityFeeds.NewCommunityFeedService(feedRepo, communityService)
···
routes.RegisterAggregatorRoutes(r, aggregatorService)
log.Println("Aggregator XRPC endpoints registered (query endpoints public)")
+
+
// Comment query API - supports optional authentication for viewer state
+
commentServiceAdapter := commentsAPI.NewServiceAdapter(commentService)
+
commentHandler := commentsAPI.NewGetCommentsHandler(commentServiceAdapter)
+
r.Handle(
+
"/xrpc/social.coves.community.comment.getComments",
+
commentsAPI.OptionalAuthMiddleware(authMiddleware, commentHandler.HandleGetComments),
+
)
+
log.Println("✅ Comment query API registered")
+
log.Println(" - GET /xrpc/social.coves.community.comment.getComments")
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)