From 7625e5af021a5a03569571817e3276ca11f4d547 Mon Sep 17 00:00:00 2001 From: Ravinou Date: Sun, 16 Feb 2025 20:44:41 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20=E2=9A=A1=20getEmailAlert=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppriseMode/AppriseMode.tsx | 2 +- .../AppriseURLs/AppriseURLs.tsx | 2 +- .../EmailAlertSettings/EmailAlertSettings.tsx | 25 ++++---- pages/api/account/getAppriseAlert.ts | 2 +- pages/api/account/getAppriseMode.ts | 2 +- pages/api/account/getAppriseServices.ts | 2 +- pages/api/account/getEmailAlert.js | 57 ------------------- pages/api/account/getEmailAlert.ts | 53 +++++++++++++++++ ...pprise.types.ts => notifications.types.ts} | 4 ++ 9 files changed, 72 insertions(+), 77 deletions(-) delete mode 100644 pages/api/account/getEmailAlert.js create mode 100644 pages/api/account/getEmailAlert.ts rename types/api/{apprise.types.ts => notifications.types.ts} (84%) diff --git a/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx b/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx index 2f282e9..cd43b19 100644 --- a/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx +++ b/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx @@ -9,7 +9,7 @@ import { AppriseModeEnum } from '~/types/domain/config.types'; //Components import Error from '~/Components/UI/Error/Error'; import { Optional } from '~/types'; -import { AppriseModeResponse } from '~/types/api/apprise.types'; +import { AppriseModeResponse } from '~/types/api/notifications.types'; import { useFormStatus } from '~/hooks/useFormStatus'; type AppriseModeDataForm = { diff --git a/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx b/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx index e5568fb..5f9ce1f 100644 --- a/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx +++ b/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx @@ -8,7 +8,7 @@ import { useForm } from 'react-hook-form'; //Components import Error from '~/Components/UI/Error/Error'; import { Optional } from '~/types'; -import { AppriseServicesResponse } from '~/types/api/apprise.types'; +import { AppriseServicesResponse } from '~/types/api/notifications.types'; import { useFormStatus } from '~/hooks/useFormStatus'; type AppriseURLsDataForm = { diff --git a/Containers/UserSettings/EmailAlertSettings/EmailAlertSettings.tsx b/Containers/UserSettings/EmailAlertSettings/EmailAlertSettings.tsx index 3a50ea5..267cd5e 100644 --- a/Containers/UserSettings/EmailAlertSettings/EmailAlertSettings.tsx +++ b/Containers/UserSettings/EmailAlertSettings/EmailAlertSettings.tsx @@ -1,22 +1,18 @@ //Lib -import { useEffect } from 'react'; -import { toast, ToastOptions } from 'react-toastify'; -import 'react-toastify/dist/ReactToastify.css'; -import classes from '../UserSettings.module.css'; -import { useState } from 'react'; -import { SpinnerCircularFixed } from 'spinners-react'; import { IconExternalLink } from '@tabler/icons-react'; import Link from 'next/link'; +import { useEffect, useState } from 'react'; +import { toast, ToastOptions } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; +import { SpinnerCircularFixed } from 'spinners-react'; +import classes from '../UserSettings.module.css'; //Components import Error from '~/Components/UI/Error/Error'; import Switch from '~/Components/UI/Switch/Switch'; import { useFormStatus } from '~/hooks/useFormStatus'; import { Optional } from '~/types'; - -type EmailAlertDataForm = { - emailAlert: boolean; -}; +import { EmailAlert } from '~/types/api/notifications.types'; export default function EmailAlertSettings() { //Var @@ -32,8 +28,7 @@ export default function EmailAlertSettings() { onClose: () => setIsSwitchDisabled(false), }; - const { isLoading, isSaved, error, setIsLoading, handleSuccess, handleError, clearError } = - useFormStatus(); + const { error, handleError, clearError } = useFormStatus(); ////State const [isSendingTestNotification, setIsSendingTestNotification] = useState(false); @@ -53,7 +48,7 @@ export default function EmailAlertSettings() { }, }); - const data: Optional = await response.json(); + const data: Optional = await response.json(); setIsAlertEnabled(data?.emailAlert ?? false); setIsSwitchDisabled(false); } catch (error) { @@ -67,7 +62,7 @@ export default function EmailAlertSettings() { ////Functions //Switch to enable/disable Email notifications - const onChangeSwitchHandler = async (data: EmailAlertDataForm) => { + const onChangeSwitchHandler = async (data: EmailAlert) => { clearError(); setIsSwitchDisabled(true); await fetch('/api/account/updateEmailAlert', { @@ -88,7 +83,7 @@ export default function EmailAlertSettings() { handleError('Update email alert setting failed.'); } }) - .catch((error) => { + .catch(() => { handleError('Update email alert setting failed.'); }) .finally(() => { diff --git a/pages/api/account/getAppriseAlert.ts b/pages/api/account/getAppriseAlert.ts index 8571fe4..3a073fd 100644 --- a/pages/api/account/getAppriseAlert.ts +++ b/pages/api/account/getAppriseAlert.ts @@ -5,7 +5,7 @@ import { authOptions } from '../auth/[...nextauth]'; import { getServerSession } from 'next-auth/next'; import { NextApiRequest, NextApiResponse } from 'next'; import { BorgWarehouseUser } from '~/types/domain/config.types'; -import { AppriseAlertResponse } from '~/types/api/apprise.types'; +import { AppriseAlertResponse } from '~/types/api/notifications.types'; import { ErrorResponse } from '~/types/api/error.types'; export default async function handler( diff --git a/pages/api/account/getAppriseMode.ts b/pages/api/account/getAppriseMode.ts index f842030..873721f 100644 --- a/pages/api/account/getAppriseMode.ts +++ b/pages/api/account/getAppriseMode.ts @@ -4,7 +4,7 @@ import path from 'path'; import { authOptions } from '../auth/[...nextauth]'; import { getServerSession } from 'next-auth/next'; import { NextApiRequest, NextApiResponse } from 'next'; -import { AppriseModeResponse } from '~/types/api/apprise.types'; +import { AppriseModeResponse } from '~/types/api/notifications.types'; import { ErrorResponse } from '~/types/api/error.types'; import { BorgWarehouseUser } from '~/types/domain/config.types'; diff --git a/pages/api/account/getAppriseServices.ts b/pages/api/account/getAppriseServices.ts index 253e1b7..52777f0 100644 --- a/pages/api/account/getAppriseServices.ts +++ b/pages/api/account/getAppriseServices.ts @@ -4,7 +4,7 @@ import path from 'path'; import { authOptions } from '../auth/[...nextauth]'; import { getServerSession } from 'next-auth/next'; import { NextApiRequest, NextApiResponse } from 'next'; -import { AppriseServicesResponse } from '~/types/api/apprise.types'; +import { AppriseServicesResponse } from '~/types/api/notifications.types'; import { ErrorResponse } from '~/types/api/error.types'; import { BorgWarehouseUser } from '~/types/domain/config.types'; diff --git a/pages/api/account/getEmailAlert.js b/pages/api/account/getEmailAlert.js deleted file mode 100644 index 859f106..0000000 --- a/pages/api/account/getEmailAlert.js +++ /dev/null @@ -1,57 +0,0 @@ -//Lib -import { promises as fs } from 'fs'; -import path from 'path'; -import { authOptions } from '../auth/[...nextauth]'; -import { getServerSession } from 'next-auth/next'; - -export default async function handler(req, res) { - if (req.method == 'GET') { - //Verify that the user is logged in. - const session = await getServerSession(req, res, authOptions); - if (!session) { - res.status(401).json({ message: 'You must be logged in.' }); - return; - } - try { - //Read the users file - //Find the absolute path of the json directory - const jsonDirectory = path.join(process.cwd(), '/config'); - let usersList = await fs.readFile(jsonDirectory + '/users.json', 'utf8'); - //Parse the usersList - usersList = JSON.parse(usersList); - - //Verify that the user of the session exists - const userIndex = usersList.map((user) => user.username).indexOf(session.user.name); - if (userIndex === -1) { - res.status(400).json({ - message: 'User is incorrect. Please, logout to update your session.', - }); - return; - } else { - //Send the emailAlert bool - res.status(200).json({ - emailAlert: usersList[userIndex].emailAlert, - }); - return; - } - } catch (error) { - //Log for backend - console.log(error); - //Log for frontend - if (error.code == 'ENOENT') { - res.status(500).json({ - status: 500, - message: 'No such file or directory', - }); - } else { - res.status(500).json({ - status: 500, - message: 'API error, contact the administrator', - }); - } - return; - } - } else { - res.status(405).json({ message: 'Bad request on API' }); - } -} diff --git a/pages/api/account/getEmailAlert.ts b/pages/api/account/getEmailAlert.ts new file mode 100644 index 0000000..c184e88 --- /dev/null +++ b/pages/api/account/getEmailAlert.ts @@ -0,0 +1,53 @@ +//Lib +import { promises as fs } from 'fs'; +import path from 'path'; +import { authOptions } from '../auth/[...nextauth]'; +import { getServerSession } from 'next-auth/next'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { EmailAlert } from '~/types/api/notifications.types'; +import { ErrorResponse } from '~/types/api/error.types'; +import { BorgWarehouseUser } from '~/types/domain/config.types'; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== 'GET') { + res.status(405).json({ message: 'Bad request on API' }); + return; + } + + //Verify that the user is logged in. + const session = await getServerSession(req, res, authOptions); + if (!session) { + res.status(401).json({ message: 'You must be logged in.' }); + return; + } + + try { + //Read the users file + const jsonDirectory = path.join(process.cwd(), '/config'); + const fileContent = await fs.readFile(jsonDirectory + '/users.json', 'utf8'); + + //Parse the usersList + const usersList: Array = JSON.parse(fileContent); + + //Verify that the user of the session exists + const user = usersList.find((u) => u.username === session.user?.name); + if (!user) { + res.status(400).json({ + message: 'User is incorrect. Please, logout to update your session.', + }); + return; + } + res.status(200).json({ emailAlert: user.emailAlert }); + } catch (error: any) { + console.log(error); + const errorMessage = + error.code === 'ENOENT' + ? 'No such file or directory' + : 'API error, contact the administrator'; + + res.status(500).json({ status: 500, message: errorMessage }); + } +} diff --git a/types/api/apprise.types.ts b/types/api/notifications.types.ts similarity index 84% rename from types/api/apprise.types.ts rename to types/api/notifications.types.ts index d9b13bb..d085aed 100644 --- a/types/api/apprise.types.ts +++ b/types/api/notifications.types.ts @@ -12,3 +12,7 @@ export type AppriseServicesResponse = { export type AppriseAlertResponse = { appriseAlert?: boolean; }; + +export type EmailAlert = { + emailAlert?: boolean; +};