mirror of
https://github.com/i701/sarlink-portal.git
synced 2025-02-22 08:42:00 +00:00
Refactor user verification and data handling
All checks were successful
Build and Push Docker Images / Build and Push Docker Images (push) Successful in 55s
All checks were successful
Build and Push Docker Images / Build and Push Docker Images (push) Successful in 55s
- Updated `package.json` to add a new script for Prisma database setup. - Replaced `usePerson` hook with `getNationalPerson` function in `lib/person.ts` for improved national data fetching. - Refactored imports in `auth-actions.ts`, `user-actions.ts`, and `verify/page.tsx` to use the new `getNationalPerson` function. - Enhanced device notification logic in `check-devices/route.ts` to correctly handle payment data. - Improved error handling in `devices-to-pay.tsx` for better user feedback. These changes streamline user verification processes and enhance data integrity across the application.
This commit is contained in:
parent
fcf4f37561
commit
a3f0759731
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { authClient } from "@/lib/auth-client";
|
import { authClient } from "@/lib/auth-client";
|
||||||
import prisma from "@/lib/db";
|
import prisma from "@/lib/db";
|
||||||
import VerifyUserDetails from "@/lib/person";
|
import { VerifyUserDetails } from "@/lib/person";
|
||||||
import { signUpFormSchema } from "@/lib/schemas";
|
import { signUpFormSchema } from "@/lib/schemas";
|
||||||
import { headers } from "next/headers";
|
import { headers } from "next/headers";
|
||||||
// import type { User } from "@prisma/client";
|
// import type { User } from "@prisma/client";
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import usePerson from "@/hooks/use-person";
|
|
||||||
import prisma from "@/lib/db";
|
import prisma from "@/lib/db";
|
||||||
import VerifyUserDetails from "@/lib/person";
|
import { VerifyUserDetails } from "@/lib/person";
|
||||||
import { revalidatePath } from "next/cache";
|
import { revalidatePath } from "next/cache";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
import { CreateClient } from "./ninja/client";
|
import { CreateClient } from "./ninja/client";
|
||||||
|
@ -2,7 +2,7 @@ import InputReadOnly from '@/components/input-read-only';
|
|||||||
import { Badge } from '@/components/ui/badge';
|
import { Badge } from '@/components/ui/badge';
|
||||||
import UserRejectDialog from '@/components/user/user-reject-dialog';
|
import UserRejectDialog from '@/components/user/user-reject-dialog';
|
||||||
import { UserVerifyDialog } from '@/components/user/user-verify-dialog';
|
import { UserVerifyDialog } from '@/components/user/user-verify-dialog';
|
||||||
import usePerson from '@/hooks/use-person';
|
import { getNationalPerson } from '@/lib/person';
|
||||||
|
|
||||||
import prisma from '@/lib/db';
|
import prisma from '@/lib/db';
|
||||||
import Image from 'next/image';
|
import Image from 'next/image';
|
||||||
@ -28,7 +28,7 @@ export default async function VerifyUserPage({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const nationalData = await usePerson({ idCard: dbUser?.id_card ?? "" })
|
const nationalData = await getNationalPerson({ idCard: dbUser?.id_card ?? "" })
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className='flex items-center justify-between text-gray-500 text-2xl font-bold title-bg py-4 px-2 mb-4'>
|
<div className='flex items-center justify-between text-gray-500 text-2xl font-bold title-bg py-4 px-2 mb-4'>
|
||||||
|
@ -21,8 +21,12 @@ export async function GET(request: Request) {
|
|||||||
blocked: false,
|
blocked: false,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
payment: true,
|
payments: true,
|
||||||
User: true,
|
User: {
|
||||||
|
include: {
|
||||||
|
devices: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
let devicesNeedingNotification = 0;
|
let devicesNeedingNotification = 0;
|
||||||
@ -31,7 +35,7 @@ export async function GET(request: Request) {
|
|||||||
for (const device of devices) {
|
for (const device of devices) {
|
||||||
let expiryDate = new Date();
|
let expiryDate = new Date();
|
||||||
|
|
||||||
const payment = device.payment;
|
const payment = device.payments[0];
|
||||||
expiryDate = addMonths(
|
expiryDate = addMonths(
|
||||||
payment?.paidAt || new Date(),
|
payment?.paidAt || new Date(),
|
||||||
payment?.numberOfMonths || 0,
|
payment?.numberOfMonths || 0,
|
||||||
@ -43,8 +47,8 @@ export async function GET(request: Request) {
|
|||||||
const currentDate = new Date();
|
const currentDate = new Date();
|
||||||
|
|
||||||
console.log("device name -> ", device.name);
|
console.log("device name -> ", device.name);
|
||||||
console.log("paid date -> ", device.payment?.paidAt);
|
console.log("paid date -> ", device.payments[0]?.paidAt);
|
||||||
console.log("no of months paid -> ", device.payment?.numberOfMonths);
|
console.log("no of months paid -> ", device.payments[0]?.numberOfMonths);
|
||||||
console.log("calculated expire date -> ", expiryDate);
|
console.log("calculated expire date -> ", expiryDate);
|
||||||
console.log("notification threshold -> ", notificationThreshold);
|
console.log("notification threshold -> ", notificationThreshold);
|
||||||
console.log("current date -> ", currentDate);
|
console.log("current date -> ", currentDate);
|
||||||
@ -60,7 +64,7 @@ export async function GET(request: Request) {
|
|||||||
if (device.User?.phoneNumber) {
|
if (device.User?.phoneNumber) {
|
||||||
await sendNotifySms(
|
await sendNotifySms(
|
||||||
new Date(expiryDate),
|
new Date(expiryDate),
|
||||||
device.User.phoneNumber,
|
device.User?.phoneNumber ?? "",
|
||||||
device.name,
|
device.name,
|
||||||
);
|
);
|
||||||
devicesNeedingNotification++;
|
devicesNeedingNotification++;
|
||||||
|
@ -110,8 +110,8 @@ export default function DevicesToPay({
|
|||||||
case res?.success === true:
|
case res?.success === true:
|
||||||
toast.success(res.message);
|
toast.success(res.message);
|
||||||
break;
|
break;
|
||||||
case res.success === false:
|
case res?.success === false:
|
||||||
toast.error(res.message);
|
toast.error(res?.message);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
toast.error("Unexpected error occurred.");
|
toast.error("Unexpected error occurred.");
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
import type { TNationalPerson } from "@/lib/types";
|
|
||||||
|
|
||||||
export default async function usePerson({
|
|
||||||
idCard,
|
|
||||||
}: { idCard: string }): Promise<TNationalPerson> {
|
|
||||||
const nationalInformation = await fetch(
|
|
||||||
`${process.env.PERSON_VERIFY_API_BASE}/api/person/${idCard}`,
|
|
||||||
{
|
|
||||||
next: {
|
|
||||||
revalidate: 60,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
);
|
|
||||||
const nationalData = (await nationalInformation.json()) as TNationalPerson;
|
|
||||||
return nationalData;
|
|
||||||
}
|
|
@ -1,10 +1,25 @@
|
|||||||
"use server";
|
"use server";
|
||||||
import usePerson from "@/hooks/use-person";
|
import type { TNationalPerson } from "@/lib/types";
|
||||||
import type { User } from "@prisma/client";
|
import type { User } from "@prisma/client";
|
||||||
|
|
||||||
export default async function VerifyUserDetails({ user }: { user: User }) {
|
export async function getNationalPerson({
|
||||||
|
idCard,
|
||||||
|
}: { idCard: string }): Promise<TNationalPerson> {
|
||||||
|
const nationalInformation = await fetch(
|
||||||
|
`${process.env.PERSON_VERIFY_API_BASE}/api/person/${idCard}`,
|
||||||
|
{
|
||||||
|
next: {
|
||||||
|
revalidate: 60,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const nationalData = (await nationalInformation.json()) as TNationalPerson;
|
||||||
|
return nationalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function VerifyUserDetails({ user }: { user: User }) {
|
||||||
const phoneNumber = user.phoneNumber.slice(4);
|
const phoneNumber = user.phoneNumber.slice(4);
|
||||||
const nationalData = await usePerson({ idCard: user.id_card ?? "" });
|
const nationalData = await getNationalPerson({ idCard: user.id_card ?? "" });
|
||||||
const dob = new Date(nationalData.dob);
|
const dob = new Date(nationalData.dob);
|
||||||
const age = new Date().getFullYear() - dob.getFullYear();
|
const age = new Date().getFullYear() - dob.getFullYear();
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
"lint": "next lint",
|
"lint": "next lint",
|
||||||
"studio": "bunx prisma studio",
|
"studio": "bunx prisma studio",
|
||||||
"push": "bunx prisma db push",
|
"push": "bunx prisma db push",
|
||||||
"db-setup": "bunx prisma migrate deploy && bunx prisma generate && bunx prisma db push"
|
"db-setup": "bunx prisma migrate deploy && bunx prisma generate && bunx prisma db push"
|
||||||
},
|
},
|
||||||
"prisma": {
|
"prisma": {
|
||||||
"seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
|
"seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
|
||||||
@ -66,5 +66,6 @@
|
|||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"typescript": "^5.7.2"
|
"typescript": "^5.7.2"
|
||||||
}
|
},
|
||||||
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user