From f183905c9f5361811de02722b35fbede471c993b Mon Sep 17 00:00:00 2001 From: KM Koushik Date: Fri, 31 May 2024 08:21:51 +1000 Subject: [PATCH] Add delete API key (#25) --- .../app/(dashboard)/api-keys/add-api-key.tsx | 55 ++++++++--- .../src/app/(dashboard)/api-keys/api-list.tsx | 7 +- .../(dashboard)/api-keys/delete-api-key.tsx | 93 +++++++++++++++++++ apps/web/src/server/api/routers/api.ts | 8 +- apps/web/src/server/service/api-service.ts | 13 +++ 5 files changed, 161 insertions(+), 15 deletions(-) create mode 100644 apps/web/src/app/(dashboard)/api-keys/delete-api-key.tsx diff --git a/apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx b/apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx index fa42c35..b347029 100644 --- a/apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx +++ b/apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx @@ -14,7 +14,7 @@ import { import { api } from "~/trpc/react"; import { useState } from "react"; -import { CheckIcon, ClipboardCopy, Plus } from "lucide-react"; +import { CheckIcon, ClipboardCopy, Eye, EyeOff, Plus } from "lucide-react"; import { toast } from "@unsend/ui/src/toaster"; export default function AddApiKey() { @@ -23,6 +23,7 @@ export default function AddApiKey() { const [apiKey, setApiKey] = useState(""); const addDomainMutation = api.apiKey.createToken.useMutation(); const [isCopied, setIsCopied] = useState(false); + const [showApiKey, setShowApiKey] = useState(false); const utils = api.useUtils(); @@ -73,20 +74,48 @@ export default function AddApiKey() { Copy API key -
-

{apiKey}

- +
+
+ + + +
+
+ + + + Delete API key + + Are you sure you want to delete{" "} + {apiKey.name}? + You can't reverse this. + + +
+ + setDomainName(e.target.value)} + value={domainName} + /> +
+ + + +
+ + ); +}; + +export default DeleteApiKey; diff --git a/apps/web/src/server/api/routers/api.ts b/apps/web/src/server/api/routers/api.ts index 68c439c..0f9de3b 100644 --- a/apps/web/src/server/api/routers/api.ts +++ b/apps/web/src/server/api/routers/api.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { createTRPCRouter, teamProcedure } from "~/server/api/trpc"; -import { addApiKey } from "~/server/service/api-service"; +import { addApiKey, deleteApiKey } from "~/server/service/api-service"; export const apiRouter = createTRPCRouter({ createToken: teamProcedure @@ -33,4 +33,10 @@ export const apiRouter = createTRPCRouter({ return keys; }), + + deleteApiKey: teamProcedure + .input(z.object({ id: z.number() })) + .mutation(async ({ input }) => { + return deleteApiKey(input.id); + }), }); diff --git a/apps/web/src/server/service/api-service.ts b/apps/web/src/server/service/api-service.ts index f87dcf4..a215a27 100644 --- a/apps/web/src/server/service/api-service.ts +++ b/apps/web/src/server/service/api-service.ts @@ -57,3 +57,16 @@ export async function retrieveApiKey(token: string) { throw error; } } + +export async function deleteApiKey(id: number) { + try { + await db.apiKey.delete({ + where: { + id, + }, + }); + } catch (error) { + console.error("Error deleting API key:", error); + throw error; + } +}