Enhance user verification and data validation features

- Updated `next.config.ts` to include remote image patterns for user verification.
- Introduced `VerifyUserDetails` function in `lib/person.ts` to validate user data against national records.
- Added `usePerson` hook for fetching national data based on ID card.
- Enhanced `signup` and `signin` functions in `auth-actions.ts` to handle user verification status and send notifications for pending verifications.
- Refactored `VerifyUser` function in `user-actions.ts` to incorporate national data validation.
- Improved UI components in the user verification page to display both database and national information.
- Updated `InputReadOnly` component to support customizable label classes for better styling.

These changes improve the user verification process, ensuring data integrity and enhancing the overall user experience.
This commit is contained in:
2025-01-10 15:59:44 +05:00
parent 1a195d2307
commit ff0eae6ec4
12 changed files with 253 additions and 123 deletions

21
lib/person.ts Normal file
View File

@ -0,0 +1,21 @@
"use server";
import usePerson from "@/hooks/use-person";
import type { User } from "@prisma/client";
export default async function VerifyUserDetails({ user }: { user: User }) {
const phoneNumber = user.phoneNumber.slice(4);
const nationalData = await usePerson({ idCard: user.id_card ?? "" });
const dob = new Date(nationalData.dob);
const age = new Date().getFullYear() - dob.getFullYear();
if (
user.id_card === nationalData.nic &&
user.name === nationalData.name_en &&
user.address === nationalData.house_name_en &&
phoneNumber === nationalData.primary_contact &&
age >= 18
) {
return true;
}
return false;
}

View File

@ -48,3 +48,23 @@ export interface OmadaResponse {
data: GroupProfile[];
};
}
export interface TNationalPerson {
nic: string;
name: string;
name_en: string;
dob: string;
gender: "M" | "F"; // Assuming gender can only be Male or Female
house_name: string;
house_name_en: string;
island_name: string;
island_name_en: string;
atoll: string;
atoll_en: string;
constituency: string;
district_en: string | null;
block_no: string | null;
email: string | null;
primary_contact: string;
image_url: string;
}