fix(roles): handle empty response in deleteRole and ensure revalidation (#6976)

This commit is contained in:
Pablo Lara
2025-02-19 09:03:49 +01:00
committed by GitHub
parent 22b54b2d8d
commit a754d9aee5
5 changed files with 145 additions and 42 deletions
+28 -8
View File
@@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { auth } from "@/auth.config";
import { getErrorMessage, parseStringify, wait } from "@/lib";
import { getErrorMessage, parseStringify } from "@/lib";
export const getInvitations = async ({
page = 1,
@@ -189,9 +189,14 @@ export const getInvitationInfoById = async (invitationId: string) => {
export const revokeInvite = async (formData: FormData) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
const invitationId = formData.get("invitationId");
if (!invitationId) {
return { error: "Invitation ID is required" };
}
const url = new URL(`${keyServer}/tenants/invitations/${invitationId}`);
try {
const response = await fetch(url.toString(), {
method: "DELETE",
@@ -199,13 +204,28 @@ export const revokeInvite = async (formData: FormData) => {
Authorization: `Bearer ${session?.accessToken}`,
},
});
const data = await response.json();
await wait(1000);
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(
errorData?.message || "Failed to revoke the invitation",
);
} catch {
throw new Error("Failed to revoke the invitation");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
revalidatePath("/invitations");
return parseStringify(data);
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error revoking invitation:", error);
return { error: getErrorMessage(error) };
}
};
+27 -8
View File
@@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { auth } from "@/auth.config";
import { getErrorMessage, parseStringify, wait } from "@/lib";
import { getErrorMessage, parseStringify } from "@/lib";
import { ManageGroupPayload, ProviderGroupsResponse } from "@/types/components";
export const getProviderGroups = async ({
@@ -210,8 +210,12 @@ export const updateProviderGroup = async (
export const deleteProviderGroup = async (formData: FormData) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
const providerGroupId = formData.get("id");
if (!providerGroupId) {
return { error: "Provider Group ID is required" };
}
const url = new URL(`${keyServer}/provider-groups/${providerGroupId}`);
try {
@@ -221,13 +225,28 @@ export const deleteProviderGroup = async (formData: FormData) => {
Authorization: `Bearer ${session?.accessToken}`,
},
});
const data = await response.json();
await wait(2000);
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(
errorData?.message || "Failed to delete the provider group",
);
} catch {
throw new Error("Failed to delete the provider group");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
revalidatePath("/manage-groups");
return parseStringify(data);
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error deleting provider group:", error);
return { error: getErrorMessage(error) };
}
};
+50 -12
View File
@@ -380,6 +380,11 @@ export const checkConnectionProvider = async (formData: FormData) => {
export const deleteCredentials = async (secretId: string) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
if (!secretId) {
return { error: "Secret ID is required" };
}
const url = new URL(`${keyServer}/providers/secrets/${secretId}`);
try {
@@ -389,21 +394,41 @@ export const deleteCredentials = async (secretId: string) => {
Authorization: `Bearer ${session?.accessToken}`,
},
});
const data = await response.json();
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(
errorData?.message || "Failed to delete the credentials",
);
} catch {
throw new Error("Failed to delete the credentials");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
revalidatePath("/providers");
return parseStringify(data);
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error deleting credentials:", error);
return { error: getErrorMessage(error) };
}
};
export const deleteProvider = async (formData: FormData) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
const providerId = formData.get("id");
if (!providerId) {
return { error: "Provider ID is required" };
}
const url = new URL(`${keyServer}/providers/${providerId}`);
try {
@@ -413,13 +438,26 @@ export const deleteProvider = async (formData: FormData) => {
Authorization: `Bearer ${session?.accessToken}`,
},
});
const data = await response.json();
await wait(1000);
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(errorData?.message || "Failed to delete the provider");
} catch {
throw new Error("Failed to delete the provider");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
revalidatePath("/providers");
return parseStringify(data);
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error deleting provider:", error);
return { error: getErrorMessage(error) };
}
};
+15 -7
View File
@@ -222,16 +222,24 @@ export const deleteRole = async (roleId: string) => {
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData?.message || "Failed to delete the role");
try {
const errorData = await response.json();
throw new Error(errorData?.message || "Failed to delete the role");
} catch {
throw new Error("Failed to delete the role");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
const data = await response.json();
revalidatePath("/roles");
return data;
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error deleting role:", error);
return { error: getErrorMessage(error) };
}
};
+25 -7
View File
@@ -157,9 +157,14 @@ export const updateUserRole = async (formData: FormData) => {
export const deleteUser = async (formData: FormData) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
const userId = formData.get("userId");
if (!userId) {
return { error: "User ID is required" };
}
const url = new URL(`${keyServer}/users/${userId}`);
try {
const response = await fetch(url.toString(), {
method: "DELETE",
@@ -167,14 +172,27 @@ export const deleteUser = async (formData: FormData) => {
Authorization: `Bearer ${session?.accessToken}`,
},
});
const data = await response.json();
await wait(1000);
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(errorData?.message || "Failed to delete the user");
} catch {
throw new Error("Failed to delete the user");
}
}
let data = null;
if (response.status !== 204) {
data = await response.json();
}
revalidatePath("/users");
return parseStringify(data);
return data || { success: true };
} catch (error) {
return {
error: getErrorMessage(error),
};
// eslint-disable-next-line no-console
console.error("Error deleting user:", error);
return { error: getErrorMessage(error) };
}
};