export async function readCollections()

in src/Common/dataAccess/readCollections.ts [17:72]


export async function readCollections(databaseId: string): Promise<DataModels.Collection[]> {
  const clearMessage = logConsoleProgress(`Querying containers for database ${databaseId}`);

  if (isFabricMirroredKey() && userContext.fabricContext?.databaseName === databaseId) {
    const collections: DataModels.Collection[] = [];
    const promises: Promise<ContainerResponse>[] = [];

    for (const collectionResourceId in (
      userContext.fabricContext.artifactInfo as FabricArtifactInfo[CosmosDbArtifactType.MIRRORED_KEY]
    ).resourceTokenInfo.resourceTokens) {
      // Dictionary key looks like this: dbs/SampleDB/colls/Container
      const resourceIdObj = collectionResourceId.split("/");
      const tokenDatabaseId = resourceIdObj[1];
      const tokenCollectionId = resourceIdObj[3];

      if (tokenDatabaseId === databaseId) {
        promises.push(client().database(databaseId).container(tokenCollectionId).read());
      }
    }

    try {
      const responses = await Promise.all(promises);
      responses.forEach((response) => {
        collections.push(response.resource as DataModels.Collection);
      });

      // Sort collections by id before returning
      collections.sort((a, b) => a.id.localeCompare(b.id));
      return collections;
    } catch (error) {
      handleError(error, "ReadCollections", `Error while querying containers for database ${databaseId}`);
      throw error;
    } finally {
      clearMessage();
    }
  }

  try {
    if (
      userContext.authType === AuthType.AAD &&
      !userContext.features.enableSDKoperations &&
      userContext.apiType !== "Tables" &&
      !isFabric()
    ) {
      return await readCollectionsWithARM(databaseId);
    }

    const sdkResponse = await client().database(databaseId).containers.readAll().fetchAll();
    return sdkResponse.resources as DataModels.Collection[];
  } catch (error) {
    handleError(error, "ReadCollections", `Error while querying containers for database ${databaseId}`);
    throw error;
  } finally {
    clearMessage();
  }
}