diff --git a/TODO b/TODO index 56f6f90..a868abd 100644 --- a/TODO +++ b/TODO @@ -23,12 +23,11 @@ DESIGN CHANGES ---------------------------------------------------------------- LOGIC -//TODO error handling +//TODO error handling - check everything, wrap in try/catch or use library to handle, log errors //TODO consider offering GraphQL support MISC ---------------------------------------------------------------- -//TODO write logger (fullstack open examples) //TODO multi-language i18n support - https://nextjs.org/docs/app/building-your-application/routing/internationalization //TODO move smaller ui components into a new folder, and make them reusable - such as using generic prop names //TODO readme diff --git a/app/api/send-mail/route.ts b/app/api/send-mail/route.ts index 882df1c..3a30cf1 100644 --- a/app/api/send-mail/route.ts +++ b/app/api/send-mail/route.ts @@ -1,5 +1,6 @@ import NodeMailer from "nodemailer"; import { NextResponse } from "next/server"; +import { infoLog, errorLog } from "@/utils/logger"; export async function POST(req: Request) { const { email, subject, message } = await req.json(); @@ -21,14 +22,15 @@ export async function POST(req: Request) { }, }); - const info = await transporter.sendMail(mailContent); - console.log(info); + const mailInfo = await transporter.sendMail(mailContent); + infoLog(mailInfo); return NextResponse.json( - { success: `Message delivered to ${info.accepted}` }, + { success: `Message delivered to ${mailInfo.accepted}` }, { status: 250 } ); } catch (error) { + errorLog(error); return NextResponse.json({ error: `Connection refused` }, { status: 404 }); } } diff --git a/app/api/v1/tournaments/france/route.ts b/app/api/v1/tournaments/france/route.ts index 0ccd2c1..a09f79b 100644 --- a/app/api/v1/tournaments/france/route.ts +++ b/app/api/v1/tournaments/france/route.ts @@ -1,5 +1,6 @@ import clientPromise from "@/lib/mongodb"; import { dateOrderingFrance } from "@/utils/dbDateOrdering"; +import { errorLog } from "@/utils/logger"; /** * Tournament data API endpoint @@ -22,6 +23,7 @@ export async function GET() { return new Response(JSON.stringify(data), { status: 200, headers }); } catch (error) { + errorLog(error); return new Response(JSON.stringify(error), { status: 500, headers }); } } diff --git a/app/tournois/page.tsx b/app/tournois/page.tsx index c6cc6e9..ba342e0 100644 --- a/app/tournois/page.tsx +++ b/app/tournois/page.tsx @@ -3,6 +3,7 @@ import dynamic from "next/dynamic"; import Layout from "@/components/Layout"; import TournamentTable from "@/components/TournamentTable"; import { dateOrderingFrance } from "@/utils/dbDateOrdering"; +import { errorLog } from "@/utils/logger"; export const revalidate = 3600; // revalidate cache every 6 hours @@ -26,6 +27,7 @@ const getTournaments = async () => { const data = await dateOrderingFrance(db); return JSON.stringify(data); } catch (error) { + errorLog(error); throw new Error("Error fetching tournament data"); } }; diff --git a/handlers/formSubmitHandlers.ts b/handlers/formSubmitHandlers.ts index 8a4692e..b5e91da 100644 --- a/handlers/formSubmitHandlers.ts +++ b/handlers/formSubmitHandlers.ts @@ -1,5 +1,6 @@ import { Dispatch, FormEvent, SetStateAction } from "react"; import sendMail from "@/lib/sendMail"; +import { errorLog } from "@/utils/logger"; export const handleEmailSubmit = async ( e: FormEvent, @@ -34,7 +35,7 @@ export const handleEmailSubmit = async ( setIsSending(false); } } catch (error) { - console.log(error); //TODO add to logger + errorLog(error); setResponseMessage({ isSuccessful: false, message: "Oops something went wrong. Please try again.", diff --git a/utils/logger.ts b/utils/logger.ts new file mode 100644 index 0000000..952e42c --- /dev/null +++ b/utils/logger.ts @@ -0,0 +1,7 @@ +export const infoLog = (...params: any[]) => { + console.log(...params); +}; + +export const errorLog = (...params: any[]) => { + console.error(...params); +};