Enhance payment processing and user interaction features

- Updated createPayment function to log payment data more clearly.
- Introduced verifyPayment function for validating payments via an external API.
- Enhanced DevicesToPay component to include user information and payment verification functionality.
- Added formatDate utility for consistent date formatting across the application.
- Updated Prisma schema to include account number for users.
- Refactored layout and device cart components for improved user experience and responsiveness.
This commit is contained in:
2024-12-09 22:59:13 +05:00
parent 40b40ad3d1
commit 36f22c0614
9 changed files with 218 additions and 51 deletions

View File

@ -1,11 +1,22 @@
import DevicesToPay from "@/components/devices-to-pay";
import { auth } from "@/lib/auth";
import { hasSession } from "@/lib/auth-guard";
import prisma from "@/lib/db";
import { headers } from "next/headers";
import React from "react";
export default async function PaymentPage({
params,
}: { params: Promise<{ paymentId: string }> }) {
}: {
params: Promise<{ paymentId: string }>;
}) {
const session = await auth.api.getSession({
headers: await headers()
})
const user = await prisma.user.findUnique({
where: {
id: session?.session.userId
}
})
const paymentId = (await params).paymentId;
const payment = await prisma.payment.findUnique({
where: {
@ -28,6 +39,7 @@ export default async function PaymentPage({
className="pb-4 gap-4 flex sm:flex-row flex-col items-start justify-start"
>
<DevicesToPay
user={user || undefined}
billFormula={formula ?? undefined}
payment={payment || undefined}
/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -8,37 +8,37 @@ import { Toaster } from "sonner";
import "./globals.css";
import QueryProvider from "@/components/query-provider";
const barlow = Barlow({
subsets: ["latin"],
weight: ["100", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-barlow",
subsets: ["latin"],
weight: ["100", "300", "400", "500", "600", "700", "800", "900"],
variable: "--font-barlow",
});
export const metadata: Metadata = {
title: "SAR Link Portal",
description: "Sarlink Portal",
title: "SAR Link Portal",
description: "Sarlink Portal",
};
export default function RootLayout({
children,
children,
}: Readonly<{
children: React.ReactNode;
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body className={`${barlow.variable} antialiased font-sans`}>
<Provider>
<NextTopLoader showSpinner={false} zIndex={9999} />
<Toaster richColors />
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<QueryProvider>{children}</QueryProvider>
</ThemeProvider>
</Provider>
</body>
</html>
);
return (
<html lang="en" suppressHydrationWarning>
<body className={`${barlow.variable} antialiased font-sans`}>
<Provider>
<NextTopLoader color="#f49d1b" showSpinner={false} zIndex={9999} />
<Toaster richColors />
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<QueryProvider>{children}</QueryProvider>
</ThemeProvider>
</Provider>
</body>
</html>
);
}