feat(api): add XRPC handlers for comment query endpoint
Implement HTTP layer for GET /xrpc/social.coves.community.comment.getComments:
get_comments.go (168 lines):
- GetCommentsHandler: Main XRPC endpoint handler
- Parses query parameters (post, sort, depth, limit, cursor, timeframe)
- Validates inputs with clear error messages
- Extracts viewer DID from auth context
- Returns JSON matching lexicon output schema
- Comprehensive validation:
- Required: post (AT-URI format)
- Bounds: depth (0-100), limit (1-100)
- Enums: sort (hot/top/new), timeframe (hour/day/week/...)
- Business rules: timeframe only valid with sort=top
errors.go (45 lines):
- writeError: Standardized JSON error responses
- handleServiceError: Maps domain errors to HTTP status codes
- 404: IsNotFound
- 400: IsValidationError
- 500: Unexpected errors (logged)
- Never leaks internal error details
middleware.go (22 lines):
- OptionalAuthMiddleware: Wraps existing auth middleware
- Extracts viewer DID for personalized responses
- Gracefully degrades to anonymous (never rejects)
service_adapter.go (40 lines):
- Bridges handler layer (http.Request) and service layer (context.Context)
- Adapter pattern for clean separation of concerns
Security:
- All inputs validated at handler boundary
- Resource limits enforced
- Auth optional (supports public read)
- Error messages sanitized
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>