{
  "rooms/$roomId": {
    "tier": "checkpointed",
    "fields": { "createdBy": "String!", "title": "String" },
    "rules": {
      "read": "@user.id != null && (@data.createdBy == @user.id || get(/rooms/$roomId/members/@user.id).role != null)",
      "create": "@user.id != null && @newData.createdBy == @user.id",
      "update": "false",
      "delete": "@user.id != null && @data.createdBy == @user.id"
    },
    "session": {
      "live": {
        "module": "collaborative_room",
        "everyMs": 33,
        "maxLifetimeSec": 1800,
        "snapshotEveryTicks": 30
      },
      "intentRule": "@user.id != null && (@data.createdBy == @user.id || get(/rooms/$roomId/members/@user.id).role != null)"
    }
  },
  "rooms/$roomId/members/$userId": {
    "tier": "durable",
    "fields": { "role": "String" },
    "rules": {
      "read": "@user.id != null && (get(/rooms/$roomId).createdBy == @user.id || $userId == @user.id)",
      "create": "@user.id != null && get(/rooms/$roomId).createdBy == @user.id",
      "update": "@user.id != null && get(/rooms/$roomId).createdBy == @user.id",
      "delete": "@user.id != null && get(/rooms/$roomId).createdBy == @user.id"
    }
  },
  "rooms/$roomId/view/$userId": {
    "tier": "ephemeral",
    "fields": { "stateJson": "String" },
    "rules": {
      "read": "$userId == @user.id",
      "create": "false",
      "update": "false",
      "delete": "false"
    }
  }
}
