"use server"; import usePerson from "@/hooks/use-person"; import prisma from "@/lib/db"; import VerifyUserDetails from "@/lib/person"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { CreateClient } from "./ninja/client"; export async function VerifyUser(userId: string) { const user = await prisma.user.findUnique({ where: { id: userId, }, include: { atoll: true, island: true, }, }); if (!user) { throw new Error("User not found"); } const isValidPerson = await VerifyUserDetails({ user }); if (!isValidPerson) throw new Error("The user details does not match national data."); if (isValidPerson) { await prisma.user.update({ where: { id: userId, }, data: { verified: true, }, }); const ninjaClient = await CreateClient({ group_settings_id: "", address1: "", city: user.atoll?.name || "", state: user.island?.name || "", postal_code: "", country_id: "462", address2: user.address || "", contacts: { first_name: user.name?.split(" ")[0] || "", last_name: user.name?.split(" ")[1] || "", email: user.email || "", phone: user.phoneNumber || "", send_email: false, custom_value1: user.dob?.toISOString().split("T")[0] || "", custom_value2: user.id_card || "", custom_value3: "", }, }); } revalidatePath("/users"); } export async function Rejectuser({ userId, reason, }: { userId: string; reason: string }) { const user = await prisma.user.findUnique({ where: { id: userId, }, }); if (!user) { throw new Error("User not found"); } await prisma.user.delete({ where: { id: userId, }, }); await SendUserRejectionDetailSMS({ details: reason, phoneNumber: user.phoneNumber, }); revalidatePath("/users"); redirect("/users"); } export const SendUserRejectionDetailSMS = async ({ details, phoneNumber, }: { details: string; phoneNumber: string; }) => { const respose = await fetch(`${process.env.SMS_API_BASE_URL}/api/sms`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${process.env.SMS_API_KEY}`, }, body: JSON.stringify({ check_delivery: false, number: phoneNumber, message: details, }), }); const data = await respose.json(); console.log(data); return data; }; export async function AddDevice({ name, mac_address, user_id, }: { name: string; mac_address: string; user_id: string }) { const newDevice = await prisma.device.create({ data: { name: name, mac: mac_address, userId: user_id, }, }); revalidatePath("/devices"); return newDevice; }