diff --git a/actions/payment.ts b/actions/payment.ts index 019300a..77702bb 100644 --- a/actions/payment.ts +++ b/actions/payment.ts @@ -9,7 +9,7 @@ import type { } from "@/lib/backend-types"; import type { User } from "@/lib/types/user"; import { checkSession } from "@/utils/session"; -import { tryCatch } from "@/utils/tryCatch"; +import { handleApiResponse, tryCatch } from "@/utils/tryCatch"; import { getServerSession } from "next-auth"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; @@ -201,6 +201,22 @@ type VerifyPaymentType = { type?: "TRANSFER" | "WALLET"; }; +export async function getProfile() { + const session = await getServerSession(authOptions); + const response = await fetch( + `${process.env.SARLINK_API_BASE_URL}/api/auth/profile/`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: `Token ${session?.apiToken}`, + }, + }, + ); + + return handleApiResponse(response, "getProfile"); +} + export async function processWalletPayment({ payment, amount, diff --git a/app/(dashboard)/payments/[paymentId]/page.tsx b/app/(dashboard)/payments/[paymentId]/page.tsx index 737d8c3..24d6c70 100644 --- a/app/(dashboard)/payments/[paymentId]/page.tsx +++ b/app/(dashboard)/payments/[paymentId]/page.tsx @@ -1,8 +1,9 @@ -import { getPayment } from "@/actions/payment"; +import { getPayment, getProfile } from "@/actions/payment"; import { authOptions } from "@/app/auth"; import CancelPaymentButton from "@/components/billing/cancel-payment-button"; import ClientErrorMessage from "@/components/client-error-message"; import DevicesToPay from "@/components/devices-to-pay"; +import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { tryCatch } from "@/utils/tryCatch"; import { getServerSession } from "next-auth"; @@ -20,21 +21,28 @@ export default async function PaymentPage({ if (error.message === "Invalid token.") redirect("/auth/signin"); return ; } + const [userError, userProfile] = await tryCatch(getProfile()); + if (userError) { + if (userError.message === "Invalid token.") redirect("/auth/signin"); + return ; + } + return (

Payment

-
- +
@@ -44,7 +52,7 @@ export default async function PaymentPage({ className="pb-4 gap-4 flex sm:flex-row flex-col items-start justify-start" >
diff --git a/components/auth/application-layout.tsx b/components/auth/application-layout.tsx index 6cb1dec..aebb53f 100644 --- a/components/auth/application-layout.tsx +++ b/components/auth/application-layout.tsx @@ -4,6 +4,7 @@ import { Wallet } from "@/components/wallet"; import { ModeToggle } from "@/components/theme-toggle"; import { AppSidebar } from "@/components/ui/app-sidebar"; +import { getProfile } from "@/actions/payment"; import { authOptions } from "@/app/auth"; import { Separator } from "@/components/ui/separator"; import { @@ -11,6 +12,7 @@ import { SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar"; +import { tryCatch } from "@/utils/tryCatch"; import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; import { AccountPopover } from "./account-popver"; @@ -21,6 +23,11 @@ export async function ApplicationLayout({ const session = await getServerSession(authOptions); if (!session) return redirect("/auth/signin"); + const [userError, userProfile] = await tryCatch(getProfile()); + if (userError) { + if (userError.message === "Invalid token.") redirect("/auth/signin"); + return null; + } return ( @@ -30,7 +37,7 @@ export async function ApplicationLayout({
-
+
Welcome,{" "} {session?.user?.first_name} {session?.user?.last_name} @@ -39,7 +46,7 @@ export async function ApplicationLayout({
- +
diff --git a/components/devices-to-pay.tsx b/components/devices-to-pay.tsx index 942549e..cc0fdcf 100644 --- a/components/devices-to-pay.tsx +++ b/components/devices-to-pay.tsx @@ -9,6 +9,7 @@ import { TableRow, } from "@/components/ui/table"; import type { Payment } from "@/lib/backend-types"; +import type { User } from "@/lib/types/user"; import { BadgeDollarSign, Clipboard, @@ -16,7 +17,6 @@ import { Loader2, Wallet, } from "lucide-react"; -import type { User } from "next-auth"; import { useState } from "react"; import { toast } from "sonner"; import { Button } from "./ui/button"; @@ -33,9 +33,7 @@ export default function DevicesToPay({ return null; } // 100+(n−1)×75 - // const walletBalance = user?.walletBalance ?? 0; - // TODO - get wallet balance from backend - const walletBalance = 110; + const walletBalance = user?.wallet_balance ?? 0; const isWalletPayVisible = walletBalance > (payment?.amount ?? 0); diff --git a/queries/authentication.ts b/queries/authentication.ts index 62a2fb0..255c102 100644 --- a/queries/authentication.ts +++ b/queries/authentication.ts @@ -198,10 +198,14 @@ export async function VerifyRegistrationOTP( // redirect(`/auth/verify-otp?phone_number=${mobile}`); // } } + if (data.message !== "User created successfully.") { + return { + message: "Your account could not be verified. Please contact support.", + status: "verify_error", + }; + } return { - message: - data.message || - "Your account could not be verified. Please contact support.", - status: "verify_error", + message: data.message, + status: "verify_success", }; }