I'm using this modified version of your sg.json config, this adds a 
'user<N>-rooms' channel to each users admin_channels property, the chatroom 
doc is added to each chatroom members -rooms channel.

{ 

  "log": ["foo"], 

  "databases": { 

    "couchbase-chat": { 

      "server": "http://localhost:8091/";, 

      "bucket":"bucket-1", 

      "users": { 

        "user1": { 

          "password": "user1", 

          "admin_channels": ["users","user1-rooms"] 

        }, 

        "user2": { 

          "password": "user2", 

          "admin_channels": ["users","user2-rooms"] 

        }, 

        "user3": { 

          "password": "user3", 

          "admin_channels": ["users", "user3-rooms"] 

        }, 

        "user4": { 

          "password": "user4", 

          "admin_channels": ["users","user4-rooms"] 

        }, 

        "admin": { 

          "password": "admin", 

          "admin_roles": ["admin"] 

        } 

      }, 

      "roles": { 

        "admin": { 

          "admin_channels": ["*"] 

        } 

      }, 

      "sync": 

      ` 

function(doc, oldDoc) { 

   

  if(doc._deleted) { 

    if(oldDoc.type == "chatroom") { 

      requireUser(oldDoc.user); 

    } else if (oldDoc.type == "message") { 

      requireUser(oldDoc.user); 

      var roomId = oldDoc.room; 

      var messageChannel = "room-" + roomId; 

      channel(messageChannel); 

    } 

    return; 

  } 

   

  if(doc.type == "chatroom") { 

    var roomId = doc._id; 

    var roomMembers = doc.members; 


 

    for (var i = 0; i < roomMembers.length; i++) { 

      var member = roomMembers[i]; 

      channel(member + "-rooms"); 

    } 


 

    var roomChannel = "room-" + roomId; 

    channel(roomChannel); 

    access(roomMembers, roomChannel); 

  } else if(doc.type == "message") { 

    // A user can only update its own messages 

    if(oldDoc) { 

      requireUser(oldDoc.user); 

    } 

  

    var roomId = doc.room; 

    var messageChannel = "room-" + roomId; 

    channel(messageChannel); 

  } 

} 

      ` 

    } 

  } 

}


if I start a continuous changes feed:

curl -X GET 
http://user1:user1@localhost:4984/couchbase-chat/_changes?feed=continuous


Then add a chatroom:


curl -X PUT http://user1:user1@localhost:4984/couchbase-chat/testchannel1 
-d '{"members": ["user2","user1","user4"],"name": "still","type": 
"chatroom","user": "user1"}' -H "Content-Type: application/json"


response:


{"id":"testchannel1","ok":true,"rev":"1-9bda027ae976eaec039a180fd16f3a8d"}


Then delete the chat room:


curl -X PUT http://user1:user1@localhost:4984/couchbase-chat/testchannel1 
-d '{"_rev":"1-9bda027ae976eaec039a180fd16f3a8d","_deleted":true}' -H 
"Content-Type: application/json"


response:


{"id":"testchannel1","ok":true,"rev":"2-e5851b5cb894cb7ff2badf951e21b3f5"}


I see both revisions now on the _changes feed:



{"seq":2,"id":"_user/user1","changes":[]}


{"seq":7,"id":"testchannel1","changes":[{"rev":"1-9bda027ae976eaec039a180fd16f3a8d"}]}


{"seq":8,"id":"testchannel1","deleted":true,"removed":["user1-rooms"],"changes":[{"rev":"2-e5851b5cb894cb7ff2badf951e21b3f5"}]}




-- 
You received this message because you are subscribed to the Google Groups 
"Couchbase Mobile" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mobile-couchbase/3c069686-904d-4477-9f0a-a3863bc59506%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to