A community based topic aggregation platform built on atproto

fix: update Actor lexicon NSIDs to lowercase per atProto spec

Changed camelCase NSIDs to lowercase to comply with atProto Lexicon
specification which requires NSIDs to use only lowercase letters:
- social.coves.actor.getProfile → social.coves.actor.getprofile
- social.coves.actor.updateProfile → social.coves.actor.updateprofile

Updated all code references including routes, tests, and documentation.

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

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

Changed files
+10 -10
docs
internal
api
routes
atproto
lexicon
social
tests
integration
+1 -1
docs/E2E_TESTING.md
···
Query via API:
```bash
-
curl "http://localhost:8081/xrpc/social.coves.actor.getProfile?actor=alice.local.coves.dev"
+
curl "http://localhost:8081/xrpc/social.coves.actor.getprofile?actor=alice.local.coves.dev"
```
Expected response:
+3 -3
internal/api/routes/user.go
···
func RegisterUserRoutes(r chi.Router, service users.UserService) {
h := NewUserHandler(service)
-
// social.coves.actor.getProfile - query endpoint
-
r.Get("/xrpc/social.coves.actor.getProfile", h.GetProfile)
+
// social.coves.actor.getprofile - query endpoint
+
r.Get("/xrpc/social.coves.actor.getprofile", h.GetProfile)
// social.coves.actor.signup - procedure endpoint
r.Post("/xrpc/social.coves.actor.signup", h.Signup)
}
-
// GetProfile handles social.coves.actor.getProfile
+
// GetProfile handles social.coves.actor.getprofile
// Query endpoint that retrieves a user profile by DID or handle
func (h *UserHandler) GetProfile(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
+1 -1
internal/atproto/lexicon/social/coves/actor/getProfile.json
···
{
"lexicon": 1,
-
"id": "social.coves.actor.getProfile",
+
"id": "social.coves.actor.getprofile",
"defs": {
"main": {
"type": "query",
+1 -1
internal/atproto/lexicon/social/coves/actor/updateProfile.json
···
{
"lexicon": 1,
-
"id": "social.coves.actor.updateProfile",
+
"id": "social.coves.actor.updateprofile",
"defs": {
"main": {
"type": "procedure",
+4 -4
tests/integration/user_test.go
···
// Test 1: Get profile by DID
t.Run("Get Profile By DID", func(t *testing.T) {
-
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getProfile?actor=did:plc:endpoint123", nil)
+
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getprofile?actor=did:plc:endpoint123", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
···
// Test 2: Get profile by handle
t.Run("Get Profile By Handle", func(t *testing.T) {
-
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getProfile?actor=bob.test", nil)
+
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getprofile?actor=bob.test", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
···
// Test 3: Missing actor parameter
t.Run("Missing Actor Parameter", func(t *testing.T) {
-
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getProfile", nil)
+
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getprofile", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
···
// Test 4: User not found
t.Run("User Not Found", func(t *testing.T) {
-
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getProfile?actor=nonexistent.test", nil)
+
req := httptest.NewRequest("GET", "/xrpc/social.coves.actor.getprofile?actor=nonexistent.test", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)