mirror of
https://github.com/i701/sarlink-portal.git
synced 2025-02-21 18:22:00 +00:00
Some checks failed
Build and Push Docker Images / Build and Push Docker Images (push) Failing after 3m9s
130 lines
2.6 KiB
TypeScript
130 lines
2.6 KiB
TypeScript
"use server";
|
|
|
|
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 SendUserRejectionDetailSMS({
|
|
details: reason,
|
|
phoneNumber: user.phoneNumber,
|
|
});
|
|
await prisma.user.delete({
|
|
where: {
|
|
id: userId,
|
|
},
|
|
});
|
|
revalidatePath("/users");
|
|
redirect("/users");
|
|
}
|
|
|
|
export const SendUserRejectionDetailSMS = async ({
|
|
details,
|
|
phoneNumber,
|
|
}: {
|
|
details: string;
|
|
phoneNumber: string;
|
|
}) => {
|
|
try {
|
|
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;
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
|
|
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;
|
|
}
|