From d66e85f4316e9adb2c92fced60a87b1d7efae0a8 Mon Sep 17 00:00:00 2001 From: victor-meng <56978073+victor-meng@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:54:49 -0700 Subject: [PATCH] Allow users to delete TablesDB database when enableSDKOperations feature flag is set (#1300) --- src/Common/dataAccess/createCollection.ts | 2 +- src/Common/dataAccess/createDatabase.ts | 3 ++- src/Common/dataAccess/createStoredProcedure.ts | 6 +++++- src/Common/dataAccess/createTrigger.ts | 6 +++++- src/Common/dataAccess/createUserDefinedFunction.ts | 6 +++++- src/Common/dataAccess/deleteCollection.ts | 2 +- src/Common/dataAccess/deleteDatabase.ts | 5 +---- src/Common/dataAccess/deleteStoredProcedure.ts | 6 +++++- src/Common/dataAccess/deleteTrigger.ts | 6 +++++- src/Common/dataAccess/deleteUserDefinedFunction.ts | 6 +++++- src/Common/dataAccess/readCollectionOffer.ts | 6 +++++- src/Common/dataAccess/readCollections.ts | 6 +++++- src/Common/dataAccess/readDatabaseOffer.ts | 6 +++++- src/Common/dataAccess/readDatabases.ts | 6 +++++- src/Common/dataAccess/readStoredProcedures.ts | 6 +++++- src/Common/dataAccess/readTriggers.ts | 6 +++++- src/Common/dataAccess/readUserDefinedFunctions.ts | 4 ++-- src/Common/dataAccess/updateCollection.ts | 6 +++++- src/Common/dataAccess/updateOffer.ts | 2 +- src/Common/dataAccess/updateStoredProcedure.ts | 4 ++-- src/Common/dataAccess/updateTrigger.ts | 4 ++-- src/Common/dataAccess/updateUserDefinedFunction.ts | 4 ++-- src/Explorer/ContextMenuButtonFactory.tsx | 2 +- src/UserContext.ts | 3 --- 24 files changed, 80 insertions(+), 33 deletions(-) diff --git a/src/Common/dataAccess/createCollection.ts b/src/Common/dataAccess/createCollection.ts index 7c657e667..64911ff28 100644 --- a/src/Common/dataAccess/createCollection.ts +++ b/src/Common/dataAccess/createCollection.ts @@ -24,7 +24,7 @@ export const createCollection = async (params: DataModels.CreateCollectionParams ); try { let collection: DataModels.Collection; - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations) { + if (userContext.authType === AuthType.AAD && !userContext.features.enableSDKoperations) { if (params.createNewDatabase) { const createDatabaseParams: DataModels.CreateDatabaseParams = { autoPilotMaxThroughput: params.autoPilotMaxThroughput, diff --git a/src/Common/dataAccess/createDatabase.ts b/src/Common/dataAccess/createDatabase.ts index 9208119ad..d54c94133 100644 --- a/src/Common/dataAccess/createDatabase.ts +++ b/src/Common/dataAccess/createDatabase.ts @@ -25,7 +25,8 @@ export async function createDatabase(params: DataModels.CreateDatabaseParams): P if (userContext.apiType === "Tables") { throw new Error("Creating database resources is not allowed for tables accounts"); } - const database: DataModels.Database = await (userContext.authType === AuthType.AAD && !userContext.useSDKOperations + const database: DataModels.Database = await (userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations ? createDatabaseWithARM(params) : createDatabaseWithSDK(params)); diff --git a/src/Common/dataAccess/createStoredProcedure.ts b/src/Common/dataAccess/createStoredProcedure.ts index 579835277..96ae4b7b0 100644 --- a/src/Common/dataAccess/createStoredProcedure.ts +++ b/src/Common/dataAccess/createStoredProcedure.ts @@ -20,7 +20,11 @@ export async function createStoredProcedure( ): Promise { const clearMessage = logConsoleProgress(`Creating stored procedure ${storedProcedure.id}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { try { const getResponse = await getSqlStoredProcedure( userContext.subscriptionId, diff --git a/src/Common/dataAccess/createTrigger.ts b/src/Common/dataAccess/createTrigger.ts index ad825820f..d5cdd5661 100644 --- a/src/Common/dataAccess/createTrigger.ts +++ b/src/Common/dataAccess/createTrigger.ts @@ -14,7 +14,11 @@ export async function createTrigger( ): Promise { const clearMessage = logConsoleProgress(`Creating trigger ${trigger.id}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { try { const getResponse = await getSqlTrigger( userContext.subscriptionId, diff --git a/src/Common/dataAccess/createUserDefinedFunction.ts b/src/Common/dataAccess/createUserDefinedFunction.ts index 3b7dd4a12..175b0af9f 100644 --- a/src/Common/dataAccess/createUserDefinedFunction.ts +++ b/src/Common/dataAccess/createUserDefinedFunction.ts @@ -20,7 +20,11 @@ export async function createUserDefinedFunction( ): Promise { const clearMessage = logConsoleProgress(`Creating user defined function ${userDefinedFunction.id}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { try { const getResponse = await getSqlUserDefinedFunction( userContext.subscriptionId, diff --git a/src/Common/dataAccess/deleteCollection.ts b/src/Common/dataAccess/deleteCollection.ts index 63e58b8c8..f83126dd1 100644 --- a/src/Common/dataAccess/deleteCollection.ts +++ b/src/Common/dataAccess/deleteCollection.ts @@ -12,7 +12,7 @@ import { handleError } from "../ErrorHandlingUtils"; export async function deleteCollection(databaseId: string, collectionId: string): Promise { const clearMessage = logConsoleProgress(`Deleting container ${collectionId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations) { + if (userContext.authType === AuthType.AAD && !userContext.features.enableSDKoperations) { await deleteCollectionWithARM(databaseId, collectionId); } else { await client().database(databaseId).container(collectionId).delete(); diff --git a/src/Common/dataAccess/deleteDatabase.ts b/src/Common/dataAccess/deleteDatabase.ts index c6c744e35..fc16fe205 100644 --- a/src/Common/dataAccess/deleteDatabase.ts +++ b/src/Common/dataAccess/deleteDatabase.ts @@ -12,10 +12,7 @@ export async function deleteDatabase(databaseId: string): Promise { const clearMessage = logConsoleProgress(`Deleting database ${databaseId}`); try { - if (userContext.apiType === "Tables") { - throw new Error("Deleting database resources is not allowed for tables accounts"); - } - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations) { + if (userContext.authType === AuthType.AAD && !userContext.features.enableSDKoperations) { await deleteDatabaseWithARM(databaseId); } else { await client().database(databaseId).delete(); diff --git a/src/Common/dataAccess/deleteStoredProcedure.ts b/src/Common/dataAccess/deleteStoredProcedure.ts index daaf8315a..6bc5f2fbd 100644 --- a/src/Common/dataAccess/deleteStoredProcedure.ts +++ b/src/Common/dataAccess/deleteStoredProcedure.ts @@ -12,7 +12,11 @@ export async function deleteStoredProcedure( ): Promise { const clearMessage = logConsoleProgress(`Deleting stored procedure ${storedProcedureId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { await deleteSqlStoredProcedure( userContext.subscriptionId, userContext.resourceGroup, diff --git a/src/Common/dataAccess/deleteTrigger.ts b/src/Common/dataAccess/deleteTrigger.ts index b4a7aa7ad..a3b31369e 100644 --- a/src/Common/dataAccess/deleteTrigger.ts +++ b/src/Common/dataAccess/deleteTrigger.ts @@ -8,7 +8,11 @@ import { handleError } from "../ErrorHandlingUtils"; export async function deleteTrigger(databaseId: string, collectionId: string, triggerId: string): Promise { const clearMessage = logConsoleProgress(`Deleting trigger ${triggerId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { await deleteSqlTrigger( userContext.subscriptionId, userContext.resourceGroup, diff --git a/src/Common/dataAccess/deleteUserDefinedFunction.ts b/src/Common/dataAccess/deleteUserDefinedFunction.ts index c9683c1ab..d91d9d55b 100644 --- a/src/Common/dataAccess/deleteUserDefinedFunction.ts +++ b/src/Common/dataAccess/deleteUserDefinedFunction.ts @@ -8,7 +8,11 @@ import { handleError } from "../ErrorHandlingUtils"; export async function deleteUserDefinedFunction(databaseId: string, collectionId: string, id: string): Promise { const clearMessage = logConsoleProgress(`Deleting user defined function ${id}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { await deleteSqlUserDefinedFunction( userContext.subscriptionId, userContext.resourceGroup, diff --git a/src/Common/dataAccess/readCollectionOffer.ts b/src/Common/dataAccess/readCollectionOffer.ts index c307242d8..8bd5d589e 100644 --- a/src/Common/dataAccess/readCollectionOffer.ts +++ b/src/Common/dataAccess/readCollectionOffer.ts @@ -14,7 +14,11 @@ export const readCollectionOffer = async (params: ReadCollectionOfferParams): Pr const clearMessage = logConsoleProgress(`Querying offer for collection ${params.collectionId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType !== "Tables") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType !== "Tables" + ) { return await readCollectionOfferWithARM(params.databaseId, params.collectionId); } diff --git a/src/Common/dataAccess/readCollections.ts b/src/Common/dataAccess/readCollections.ts index 92be4f57e..a5c8dd928 100644 --- a/src/Common/dataAccess/readCollections.ts +++ b/src/Common/dataAccess/readCollections.ts @@ -13,7 +13,11 @@ import { handleError } from "../ErrorHandlingUtils"; export async function readCollections(databaseId: string): Promise { const clearMessage = logConsoleProgress(`Querying containers for database ${databaseId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType !== "Tables") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType !== "Tables" + ) { return await readCollectionsWithARM(databaseId); } diff --git a/src/Common/dataAccess/readDatabaseOffer.ts b/src/Common/dataAccess/readDatabaseOffer.ts index d27d68078..bb7366ac9 100644 --- a/src/Common/dataAccess/readDatabaseOffer.ts +++ b/src/Common/dataAccess/readDatabaseOffer.ts @@ -13,7 +13,11 @@ export const readDatabaseOffer = async (params: ReadDatabaseOfferParams): Promis const clearMessage = logConsoleProgress(`Querying offer for database ${params.databaseId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType !== "Tables") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType !== "Tables" + ) { return await readDatabaseOfferWithARM(params.databaseId); } diff --git a/src/Common/dataAccess/readDatabases.ts b/src/Common/dataAccess/readDatabases.ts index e5136676e..cd1ae1843 100644 --- a/src/Common/dataAccess/readDatabases.ts +++ b/src/Common/dataAccess/readDatabases.ts @@ -13,7 +13,11 @@ export async function readDatabases(): Promise { let databases: DataModels.Database[]; const clearMessage = logConsoleProgress(`Querying databases`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType !== "Tables") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType !== "Tables" + ) { databases = await readDatabasesWithARM(); } else { const sdkResponse = await client().databases.readAll().fetchAll(); diff --git a/src/Common/dataAccess/readStoredProcedures.ts b/src/Common/dataAccess/readStoredProcedures.ts index 65edb54c2..2e8652933 100644 --- a/src/Common/dataAccess/readStoredProcedures.ts +++ b/src/Common/dataAccess/readStoredProcedures.ts @@ -12,7 +12,11 @@ export async function readStoredProcedures( ): Promise<(StoredProcedureDefinition & Resource)[]> { const clearMessage = logConsoleProgress(`Querying stored procedures for container ${collectionId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { const rpResponse = await listSqlStoredProcedures( userContext.subscriptionId, userContext.resourceGroup, diff --git a/src/Common/dataAccess/readTriggers.ts b/src/Common/dataAccess/readTriggers.ts index 764f3ace1..dd51db372 100644 --- a/src/Common/dataAccess/readTriggers.ts +++ b/src/Common/dataAccess/readTriggers.ts @@ -13,7 +13,11 @@ export async function readTriggers( ): Promise { const clearMessage = logConsoleProgress(`Querying triggers for container ${collectionId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType === "SQL" + ) { const rpResponse = await listSqlTriggers( userContext.subscriptionId, userContext.resourceGroup, diff --git a/src/Common/dataAccess/readUserDefinedFunctions.ts b/src/Common/dataAccess/readUserDefinedFunctions.ts index a55ad0ca6..a103291f9 100644 --- a/src/Common/dataAccess/readUserDefinedFunctions.ts +++ b/src/Common/dataAccess/readUserDefinedFunctions.ts @@ -11,9 +11,9 @@ export async function readUserDefinedFunctions( collectionId: string ): Promise<(UserDefinedFunctionDefinition & Resource)[]> { const clearMessage = logConsoleProgress(`Querying user defined functions for container ${collectionId}`); - const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; + const { authType, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { + if (authType === AuthType.AAD && !userContext.features.enableSDKoperations && apiType === "SQL") { const rpResponse = await listSqlUserDefinedFunctions( subscriptionId, resourceGroup, diff --git a/src/Common/dataAccess/updateCollection.ts b/src/Common/dataAccess/updateCollection.ts index 8b4c075e2..5a0006697 100644 --- a/src/Common/dataAccess/updateCollection.ts +++ b/src/Common/dataAccess/updateCollection.ts @@ -33,7 +33,11 @@ export async function updateCollection( const clearMessage = logConsoleProgress(`Updating container ${collectionId}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType !== "Tables") { + if ( + userContext.authType === AuthType.AAD && + !userContext.features.enableSDKoperations && + userContext.apiType !== "Tables" + ) { collection = await updateCollectionWithARM(databaseId, collectionId, newCollection); } else { const sdkResponse = await client() diff --git a/src/Common/dataAccess/updateOffer.ts b/src/Common/dataAccess/updateOffer.ts index 88a3355d5..7f3a26da1 100644 --- a/src/Common/dataAccess/updateOffer.ts +++ b/src/Common/dataAccess/updateOffer.ts @@ -56,7 +56,7 @@ export const updateOffer = async (params: UpdateOfferParams): Promise => const clearMessage = logConsoleProgress(`Updating offer for ${offerResourceText}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations) { + if (userContext.authType === AuthType.AAD && !userContext.features.enableSDKoperations) { if (params.collectionId) { updatedOffer = await updateCollectionOfferWithARM(params); } else if (userContext.apiType === "Tables") { diff --git a/src/Common/dataAccess/updateStoredProcedure.ts b/src/Common/dataAccess/updateStoredProcedure.ts index b3cf875a0..6e6d841e6 100644 --- a/src/Common/dataAccess/updateStoredProcedure.ts +++ b/src/Common/dataAccess/updateStoredProcedure.ts @@ -20,9 +20,9 @@ export async function updateStoredProcedure( ): Promise { const clearMessage = logConsoleProgress(`Updating stored procedure ${storedProcedure.id}`); try { - const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; + const { authType, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; - if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { + if (authType === AuthType.AAD && !userContext.features.enableSDKoperations && apiType === "SQL") { const getResponse = await getSqlStoredProcedure( subscriptionId, resourceGroup, diff --git a/src/Common/dataAccess/updateTrigger.ts b/src/Common/dataAccess/updateTrigger.ts index 6d5afb4be..56e27a905 100644 --- a/src/Common/dataAccess/updateTrigger.ts +++ b/src/Common/dataAccess/updateTrigger.ts @@ -13,9 +13,9 @@ export async function updateTrigger( trigger: SqlTriggerResource ): Promise { const clearMessage = logConsoleProgress(`Updating trigger ${trigger.id}`); - const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; + const { authType, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { + if (authType === AuthType.AAD && !userContext.features.enableSDKoperations && apiType === "SQL") { const getResponse = await getSqlTrigger( subscriptionId, resourceGroup, diff --git a/src/Common/dataAccess/updateUserDefinedFunction.ts b/src/Common/dataAccess/updateUserDefinedFunction.ts index f3b28bf51..21780774b 100644 --- a/src/Common/dataAccess/updateUserDefinedFunction.ts +++ b/src/Common/dataAccess/updateUserDefinedFunction.ts @@ -19,9 +19,9 @@ export async function updateUserDefinedFunction( userDefinedFunction: UserDefinedFunctionDefinition ): Promise { const clearMessage = logConsoleProgress(`Updating user defined function ${userDefinedFunction.id}`); - const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; + const { authType, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { + if (authType === AuthType.AAD && !userContext.features.enableSDKoperations && apiType === "SQL") { const getResponse = await getSqlUserDefinedFunction( subscriptionId, resourceGroup, diff --git a/src/Explorer/ContextMenuButtonFactory.tsx b/src/Explorer/ContextMenuButtonFactory.tsx index 8f85ddbdb..426287068 100644 --- a/src/Explorer/ContextMenuButtonFactory.tsx +++ b/src/Explorer/ContextMenuButtonFactory.tsx @@ -44,7 +44,7 @@ export const createDatabaseContextMenu = (container: Explorer, databaseId: strin }, ]; - if (userContext.apiType !== "Tables") { + if (userContext.apiType !== "Tables" || userContext.features.enableSDKoperations) { items.push({ iconSrc: DeleteDatabaseIcon, onClick: () => diff --git a/src/UserContext.ts b/src/UserContext.ts index 74f14d6a9..873a1dad0 100644 --- a/src/UserContext.ts +++ b/src/UserContext.ts @@ -36,7 +36,6 @@ interface UserContext { readonly accessToken?: string; readonly authorizationToken?: string; readonly resourceToken?: string; - readonly useSDKOperations: boolean; readonly subscriptionType?: SubscriptionType; readonly quotaId?: string; // API Type is not yet provided by ARM. You need to manually inspect all the capabilities+kind so we abstract that logic in userContext @@ -61,7 +60,6 @@ export type PortalEnv = "localhost" | "blackforest" | "fairfax" | "mooncake" | " const ONE_WEEK_IN_MS = 604800000; const features = extractFeatures(); -const { enableSDKoperations: useSDKOperations } = features; const userContext: UserContext = { apiType: "SQL", @@ -69,7 +67,6 @@ const userContext: UserContext = { isTryCosmosDBSubscription: false, portalEnv: "prod", features, - useSDKOperations, addCollectionFlight: CollectionCreation.DefaultAddCollectionDefaultFlight, subscriptionType: CollectionCreation.DefaultSubscriptionType, collectionCreationDefaults: CollectionCreationDefaults,