{
  "addedInModelVersion" : 1100,
  "ash" : {
    "generateResource" : "Y"
  },
  "attributes" : [
    {
      "addedInModelVersion" : 1100,
      "allowsNull" : "N",
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "_rowid",
      "externalType" : "longlong",
      "isIndexed" : "Y",
      "name" : "videoConferenceConfigID",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSNumber",
      "valueType" : "i"
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "provider",
      "defaultValue" : "0",
      "externalType" : "int",
      "name" : "provider",
      "purpose" : "The video conference provider.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "EnumInteger",
      "valueEnum" : "VideoConferenceConfigProvider"
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "providerEmailAddress",
      "externalType" : "char",
      "name" : "providerEmailAddress",
      "purpose" : "The user email used for OAuth with the provider",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSString",
      "width" : 1024
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "providerUserID",
      "externalType" : "char",
      "name" : "providerUserID",
      "purpose" : "The user id from provider account.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSString",
      "width" : 1024
    },
    {
      "addedInModelVersion" : 1100,
      "allowsNull" : "Y",
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "archivedDate",
      "externalType" : "datetime",
      "name" : "archivedDate",
      "purpose" : "The date that the config was archived.\n\nThe presence of this attribute is what determines whether a config is considered archived.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSDate"
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "userID",
      "externalType" : "longlong",
      "isIndexed" : "Y",
      "name" : "userID",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSNumber",
      "valueType" : "i"
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "providerName",
      "externalType" : "char",
      "name" : "providerName",
      "purpose" : "A default provider name in English that's used by the apps as a fallback for forward-compatibility.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSString",
      "width" : 256
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "errorCode",
      "defaultValue" : "0",
      "externalType" : "int",
      "name" : "errorCode",
      "purpose" : "The error code indicating the reason the last token refresh failed.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "EnumInteger",
      "valueEnum" : "VideoConferenceConfigErrorCode"
    },
    {
      "addedInModelVersion" : 1100,
      "allowsNull" : "Y",
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "providerCalendarID",
      "externalType" : "char",
      "name" : "providerCalendarID",
      "purpose" : "A provider-specific calendar ID that's used for creating meetings and generating meeting links.\n\nNot used by all providers. Initially intended to store the Google Calendar identifier for the Daylite-managed calendar.",
      "record" : {
        "allowsRecord" : "Y",
        "isInternal" : "N",
        "isUpdatable" : "Y"
      },
      "valueClassName" : "NSString",
      "width" : 1024
    },
    {
      "addedInModelVersion" : 1100,
      "allowsNull" : "Y",
      "ash" : {
        "includeInResource" : "Y"
      },
      "columnName" : "externalAccountID",
      "externalType" : "longlong",
      "name" : "externalAccountID",
      "purpose" : "The ID for the config's ``ExternalAccount``.",
      "record" : {
        "allowsRecord" : "N",
        "isInternal" : "N",
        "isUpdatable" : "N"
      },
      "valueClassName" : "NSNumber",
      "valueType" : "i"
    }
  ],
  "className" : "GWVideoConferenceConfig",
  "classProperties" : [
    "videoConferenceConfigID",
    "provider",
    "providerEmailAddress",
    "providerUserID",
    "archivedDate",
    "userID",
    "providerName",
    "errorCode",
    "providerCalendarID",
    "externalAccountID",
    "meetings",
    "user"
  ],
  "domain" : "VideoConference",
  "enums" : [
    {
      "addedInModelVersion" : 1100,
      "items" : [
        {
          "addedInModelVersion" : 1100,
          "name" : "None",
          "value" : 0
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "Zoom",
          "value" : 1
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "Microsoft",
          "value" : 2
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "Google",
          "value" : 3
        }
      ],
      "name" : "VideoConferenceConfigProvider",
      "purpose" : "A video conference service provider.",
      "type" : 1
    },
    {
      "addedInModelVersion" : 1100,
      "items" : [
        {
          "addedInModelVersion" : 1100,
          "name" : "None",
          "purpose" : "No Error",
          "value" : 0
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "Unauthorized",
          "purpose" : "The user is no longer authorized for this configuration.",
          "value" : 1
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "SwitchedUser",
          "purpose" : "The tokens were revoked because another Daylite user logged into the provider account, which automatically revoked previously-granted tokens.",
          "value" : 2
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "MissingCalendar",
          "purpose" : "The provider requires a dedicated calendar for creating meeting links and that calendar was not found.\n\nThe calendar issue must be fixed before new meetings can be created. The issue can be resolved by reauthorizing with the provider.",
          "value" : 3
        },
        {
          "addedInModelVersion" : 1100,
          "name" : "WebhookSubscriptionFailed",
          "purpose" : "Subscribing to the provider's webhook failed.",
          "value" : 4
        }
      ],
      "name" : "VideoConferenceConfigErrorCode",
      "type" : 1
    }
  ],
  "externalName" : "VideoConferenceConfig",
  "isDatabasePreference" : false,
  "isTrashable" : false,
  "moduleName" : "DLSubstrate",
  "name" : "VideoConferenceConfig",
  "primaryKeyAttributes" : [
    "videoConferenceConfigID"
  ],
  "purpose" : "Represents a configured video conference provider for a user.\n\n### Syncing\nThis table is synced between client and server, however, authentication tokens are not stored in the same table. They are stored in a paired `VideoConferenceConfigSecrets` table that has a one-to-one mapping to rows in this table and is not synced. The Ash resource is responsible for ensuring that the `VideoConferenceConfigSecrets` table is kept in sync with the this entity.\n\n### Forward Compatibility\nBy default, apps will use localized names derived from the provider enum. However, as new service providers are added, older versions of the apps can continue to support unrecognized providers by using providerName as the display name, and assuming provider-specific features (e.g. repeating appointments) are unsupported for unrecognized ones. Other UI elements, such as icons, can use generic fallbacks.",
  "record" : {
    "allowsRecord" : "Y",
    "isDirectlyUpdatable" : "Y"
  },
  "relationships" : [
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "deleteRule" : "EODeleteRuleDeny",
      "destination" : "VideoConferenceMeeting",
      "isToMany" : "Y",
      "joins" : [
        {
          "destinationAttribute" : "videoConferenceConfigID",
          "sourceAttribute" : "videoConferenceConfigID"
        }
      ],
      "joinSemantic" : "EOInnerJoin",
      "name" : "meetings",
      "purpose" : "All meetings that were created using this configuration.",
      "record" : {
        "allowsRecord" : "Y",
        "isEmbedded" : "N",
        "isInternal" : "N",
        "propagatesUpdates" : "N"
      }
    },
    {
      "addedInModelVersion" : 1100,
      "ash" : {
        "includeInResource" : "Y"
      },
      "destination" : "User",
      "isToMany" : "N",
      "joins" : [
        {
          "destinationAttribute" : "userID",
          "sourceAttribute" : "userID"
        }
      ],
      "joinSemantic" : "EOInnerJoin",
      "name" : "user",
      "purpose" : "The Daylite user that this config belongs to.",
      "record" : {
        "allowsRecord" : "Y",
        "isEmbedded" : "N",
        "isInternal" : "N",
        "propagatesUpdates" : "N"
      }
    }
  ],
  "supportsPermissions" : false,
  "uniqueIdentifier" : 216
}