diff --git a/src/pages/api/users/agents/index.ts b/src/pages/api/users/agents/index.ts index f229f5ae..add7e0c1 100644 --- a/src/pages/api/users/agents/index.ts +++ b/src/pages/api/users/agents/index.ts @@ -1,16 +1,10 @@ -import { app, adminApp } from "@/firebase"; -import { AgentUser } from "@/interfaces/user"; -import { sessionOptions } from "@/lib/session"; -import { - collection, - getDocs, - getFirestore, - query, - where, -} from "firebase/firestore"; -import { getAuth } from "firebase-admin/auth"; -import { withIronSessionApiRoute } from "iron-session/next"; -import { NextApiRequest, NextApiResponse } from "next"; +import {app, adminApp} from "@/firebase"; +import {AgentUser} from "@/interfaces/user"; +import {sessionOptions} from "@/lib/session"; +import {collection, getDocs, getFirestore, query, where} from "firebase/firestore"; +import {getAuth} from "firebase-admin/auth"; +import {withIronSessionApiRoute} from "iron-session/next"; +import {NextApiRequest, NextApiResponse} from "next"; import countryCodes from "country-codes-list"; const db = getFirestore(app); const auth = getAuth(adminApp); @@ -18,51 +12,46 @@ const auth = getAuth(adminApp); export default withIronSessionApiRoute(user, sessionOptions); interface Contact { - name: string; - email: string; - number: string; + name: string; + email: string; + number: string; } async function get(req: NextApiRequest, res: NextApiResponse) { - const { language = 'en' } = req.query as { language: string }; + const {language = "en"} = req.query as {language: string}; - const usersQuery = query( - collection(db, "users"), - where("type", "==", "agent") - ); - const docsUser = await getDocs(usersQuery); + const usersQuery = query(collection(db, "users"), where("type", "==", "agent")); + const docsUser = await getDocs(usersQuery); - const docs = docsUser.docs.map((doc) => doc.data() as AgentUser); + const docs = docsUser.docs.map((doc) => doc.data() as AgentUser); - const data = docs.reduce( - (acc: Record, user: AgentUser) => { - const countryCode = user.demographicInformation?.country as string; - const currentValues = acc[countryCode] || ([] as Contact[]); - const newUser = { - name: user.agentInformation.companyName, - email: user.email, - number: user.demographicInformation?.phone as string, - } as Contact; - return { - ...acc, - [countryCode]: [...currentValues, newUser], - }; - }, - {} - ) as Record; + const data = docs.reduce((acc: Record, user: AgentUser) => { + const countryCode = user.demographicInformation?.country as string; + const currentValues = acc[countryCode] || ([] as Contact[]); + const newUser = { + name: user.agentInformation?.companyName || user.name, + email: user.email, + number: user.demographicInformation?.phone as string, + } as Contact; + return { + ...acc, + [countryCode]: [...currentValues, newUser], + }; + }, {}) as Record; - const result = Object.keys(data).map((code) => { - const country = countryCodes.findOne("countryCode" as any, code.toUpperCase()); - const key = language === 'ar' ? 'countryNameLocal' : 'countryNameEn'; - return { - label: country[key], - key: code, - entries: data[code], - }; - }); + const result = Object.keys(data).map((code) => { + const country = countryCodes.findOne("countryCode" as any, code.toUpperCase()); + if (!country) return null; + const key = language === "ar" ? "countryNameLocal" : "countryNameEn"; + return { + label: country[key], + key: code, + entries: data[code], + }; + }); - res.json(result); + res.json(result.filter((x) => !!x)); } async function user(req: NextApiRequest, res: NextApiResponse) { - if (req.method === "GET") return get(req, res); + if (req.method === "GET") return get(req, res); }