From ac2383c8efeae96eb0ebf1dc705b46ba25cd8f34 Mon Sep 17 00:00:00 2001 From: Gslmao Date: Mon, 16 Feb 2026 01:20:57 +0530 Subject: [PATCH 1/2] changed or to nullish coalesing operator reason: to fix build error --- src/lib/services/subject.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/services/subject.ts b/src/lib/services/subject.ts index d0291a0..89a2223 100644 --- a/src/lib/services/subject.ts +++ b/src/lib/services/subject.ts @@ -1,13 +1,14 @@ import { connectToDatabase } from "@/lib/database/mongoose"; -import { Course } from "@/db/course"; import { IRelatedSubject } from "@/interface"; import { escapeRegExp } from "@/lib/utils/regex"; +import { Course } from "@/db/course"; import RelatedSubject from "@/db/relatedSubjects"; export async function getCourseList(){ await connectToDatabase(); return await Course.find().lean(); } + export async function getRelatedSubjects(subject: string) { await connectToDatabase(); const escapedSubject = escapeRegExp(subject); @@ -15,5 +16,5 @@ export async function getRelatedSubjects(subject: string) { subject: { $regex: new RegExp(`${escapedSubject}`, "i") }, }); - return subjects[0]?.related_subjects ?? []; -} + return subjects[0]?.related_subjects || []; +} \ No newline at end of file From 8015b045b6a5296060f259cc269c2690fc6cc06e Mon Sep 17 00:00:00 2001 From: Gslmao Date: Mon, 16 Feb 2026 03:30:20 +0530 Subject: [PATCH 2/2] refactor: refactor out service for api/subscribe --- src/app/api/subscribe/route.ts | 23 ++++------------------- src/components/Footer.tsx | 4 ++-- src/lib/services/subject.ts | 2 +- src/lib/services/subscribe.ts | 22 ++++++++++++++++++++++ 4 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 src/lib/services/subscribe.ts diff --git a/src/app/api/subscribe/route.ts b/src/app/api/subscribe/route.ts index d65ace6..ce22818 100644 --- a/src/app/api/subscribe/route.ts +++ b/src/app/api/subscribe/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; -import { appendEmailToSheet } from "@/lib/services/google-sheets"; -import { verifyEmail } from "@devmehq/email-validator-js"; +import { customErrorHandler } from "@/lib/utils/error"; +import { subscribeEmail } from "@/lib/services/subscribe"; export async function POST(req: Request) { try { @@ -9,26 +9,11 @@ export async function POST(req: Request) { if (!email) { return NextResponse.json({ error: "Email is required" }, { status: 400 }); } + await subscribeEmail(email); - const result = await verifyEmail({ - emailAddress: email, - verifyMx: true, - verifySmtp: false, - timeout: 4000 - }); - - if (!result.validFormat) { - return NextResponse.json({ error: "Invalid email format" }, { status: 400 }); - } - - if (!result.validMx) { - return NextResponse.json({ error: "Email domain is invalid" }, { status: 400 }); - } - - await appendEmailToSheet(email); return NextResponse.json({ message: "Email added successfully" }); } catch (error) { console.error("Error adding email:", error); - return NextResponse.json({ error: "Failed to add email" }, { status: 500 }); + return customErrorHandler(error, "Failed to add email"); } } \ No newline at end of file diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 2d7a941..465913d 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -18,7 +18,7 @@ import toast from "react-hot-toast"; type SubscribeResponse = { success?: boolean; - error?: string; + message?: string; }; export default function Footer() { @@ -44,7 +44,7 @@ export default function Footer() { }) .then(async (res) => { const data = (await res.json()) as SubscribeResponse; - if (!res.ok) throw new Error(data.error ?? "Something went wrong."); + if (!res.ok) throw new Error(data.message ?? "Something went wrong."); return data; }), { diff --git a/src/lib/services/subject.ts b/src/lib/services/subject.ts index 89a2223..b257d39 100644 --- a/src/lib/services/subject.ts +++ b/src/lib/services/subject.ts @@ -16,5 +16,5 @@ export async function getRelatedSubjects(subject: string) { subject: { $regex: new RegExp(`${escapedSubject}`, "i") }, }); - return subjects[0]?.related_subjects || []; + return subjects[0]?.related_subjects ?? []; } \ No newline at end of file diff --git a/src/lib/services/subscribe.ts b/src/lib/services/subscribe.ts new file mode 100644 index 0000000..3f5bbfa --- /dev/null +++ b/src/lib/services/subscribe.ts @@ -0,0 +1,22 @@ +import { verifyEmail } from "@devmehq/email-validator-js"; +import { appendEmailToSheet } from "@/lib/services/google-sheets"; +import { CustomError } from "@/lib/utils/error"; + +export async function subscribeEmail(email: string) { + const result = await verifyEmail({ + emailAddress: email, + verifyMx: true, + verifySmtp: false, + timeout: 4000 + }); + + if (!result.validFormat) { + throw new CustomError("Invalid email format", 400); + } + + if (!result.validMx) { + throw new CustomError("Email domain is invalid", 400); + } + + await appendEmailToSheet(email); +} \ No newline at end of file