From a567614c63fc7deb45ae86cbf11914b9f4a7b9b1 Mon Sep 17 00:00:00 2001 From: canove Date: Tue, 13 Oct 2020 22:53:05 -0300 Subject: [PATCH] improvement: translated all backend errors messages --- backend/src/controllers/SessionController.ts | 2 +- backend/src/controllers/SettingController.ts | 4 +-- backend/src/controllers/UserController.ts | 10 +++--- backend/src/helpers/CheckSettings.ts | 2 +- backend/src/helpers/GetDefaultWhatsApp.ts | 2 +- backend/src/helpers/GetWbotMessage.ts | 11 ++---- backend/src/libs/wbot.ts | 4 +-- .../AuthServices/RefreshTokenService.ts | 4 +-- .../ContactServices/CreateContactService.ts | 2 +- .../ContactServices/DeleteContactService.ts | 2 +- .../ContactServices/ShowContactService.ts | 2 +- .../ContactServices/UpdateContactService.ts | 2 +- .../MessageServices/CreateMessageService.ts | 4 +-- .../MessageServices/ListMessagesService.ts | 2 +- .../SettingServices/UpdateSettingService.ts | 2 +- .../TicketServices/CreateTicketService.ts | 2 +- .../TicketServices/DeleteTicketService.ts | 2 +- .../TicketServices/ShowTicketService.ts | 2 +- .../TicketServices/UpdateTicketService.ts | 2 +- .../UserServices/DeleteUserService.ts | 2 +- .../services/UserServices/ShowUserService.ts | 2 +- .../UserServices/UpdateUserService.ts | 2 +- .../WbotServices/CheckIsValidContact.ts | 6 ++-- .../WbotServices/wbotMessageListener.ts | 2 +- .../WhatsappService/DeleteWhatsAppService.ts | 2 +- .../WhatsappService/ShowWhatsAppService.ts | 2 +- .../WhatsappService/UpdateWhatsAppService.ts | 2 +- frontend/src/components/ContactModal/index.js | 24 +++++++++---- frontend/src/components/MessagesList/index.js | 13 +++++-- .../src/components/NewTicketModal/index.js | 12 +++++-- frontend/src/components/QrcodeModal/index.js | 12 +++++-- frontend/src/components/Ticket/index.js | 13 +++++-- .../components/TicketActionButtons/index.js | 13 ++++--- .../src/components/TicketOptionsMenu/index.js | 12 +++++-- frontend/src/components/UserModal/index.js | 24 +++++++++---- .../src/components/WhatsAppModal/index.js | 24 +++++++++---- frontend/src/hooks/useTickets/index.js | 13 +++++-- frontend/src/pages/Connections/index.js | 24 +++++++++---- frontend/src/pages/Contacts/index.js | 36 ++++++++++++++----- frontend/src/pages/Settings/index.js | 24 +++++++++---- frontend/src/pages/Signup/index.js | 12 +++++-- frontend/src/pages/Users/index.js | 24 +++++++++---- frontend/src/translate/languages/en.js | 22 +++++++++++- frontend/src/translate/languages/es.js | 22 +++++++++++- frontend/src/translate/languages/pt.js | 21 ++++++++++- 45 files changed, 308 insertions(+), 120 deletions(-) diff --git a/backend/src/controllers/SessionController.ts b/backend/src/controllers/SessionController.ts index 2c2a3ec..b9dcf8e 100644 --- a/backend/src/controllers/SessionController.ts +++ b/backend/src/controllers/SessionController.ts @@ -30,7 +30,7 @@ export const update = async ( const token: string = req.cookies.jrt; if (!token) { - throw new AppError("Invalid session. Please login.", 401); + throw new AppError("ERR_SESSION_EXPIRED", 401); } const { newToken, refreshToken } = await RefreshTokenService(token); diff --git a/backend/src/controllers/SettingController.ts b/backend/src/controllers/SettingController.ts index 1ecb52e..ff9c01f 100644 --- a/backend/src/controllers/SettingController.ts +++ b/backend/src/controllers/SettingController.ts @@ -8,7 +8,7 @@ import ListSettingsService from "../services/SettingServices/ListSettingsService export const index = async (req: Request, res: Response): Promise => { if (req.user.profile !== "admin") { - throw new AppError("Only administrators can access resource.", 403); + throw new AppError("ERR_NO_PERMISSION", 403); } const settings = await ListSettingsService(); @@ -21,7 +21,7 @@ export const update = async ( res: Response ): Promise => { if (req.user.profile !== "admin") { - throw new AppError("Only administrators can access this route.", 403); + throw new AppError("ERR_NO_PERMISSION", 403); } const { settingKey: key } = req.params; const { value } = req.body; diff --git a/backend/src/controllers/UserController.ts b/backend/src/controllers/UserController.ts index d0a5503..e27669c 100644 --- a/backend/src/controllers/UserController.ts +++ b/backend/src/controllers/UserController.ts @@ -17,7 +17,7 @@ type IndexQuery = { export const index = async (req: Request, res: Response): Promise => { if (req.user.profile !== "admin") { - throw new AppError("Only administrators can access this route.", 403); // should be handled better. + throw new AppError("ERR_NO_PERMISSION", 403); // should be handled better. } const { searchParam, pageNumber } = req.query as IndexQuery; @@ -36,9 +36,9 @@ export const store = async (req: Request, res: Response): Promise => { req.url === "/signup" && (await CheckSettingsHelper("userCreation")) === "disabled" ) { - throw new AppError("User creation is disabled by administrator.", 403); + throw new AppError("ERR_USER_CREATION_DISABLED", 403); } else if (req.url !== "/signup" && req.user.profile !== "admin") { - throw new AppError("Only administrators can create users.", 403); + throw new AppError("ERR_NO_PERMISSION", 403); } const user = await CreateUserService({ @@ -70,7 +70,7 @@ export const update = async ( res: Response ): Promise => { if (req.user.profile !== "admin") { - throw new AppError("Only administrators can edit users.", 403); + throw new AppError("ERR_NO_PERMISSION", 403); } const { userId } = req.params; @@ -94,7 +94,7 @@ export const remove = async ( const { userId } = req.params; if (req.user.profile !== "admin") { - throw new AppError("Only administrators can delete users.", 403); + throw new AppError("ERR_NO_PERMISSION", 403); } await DeleteUserService(userId); diff --git a/backend/src/helpers/CheckSettings.ts b/backend/src/helpers/CheckSettings.ts index c398ea0..d19122b 100644 --- a/backend/src/helpers/CheckSettings.ts +++ b/backend/src/helpers/CheckSettings.ts @@ -7,7 +7,7 @@ const CheckSettings = async (key: string): Promise => { }); if (!setting) { - throw new AppError("No setting found with this id.", 404); + throw new AppError("ERR_NO_SETTING_FOUND", 404); } return setting.value; diff --git a/backend/src/helpers/GetDefaultWhatsApp.ts b/backend/src/helpers/GetDefaultWhatsApp.ts index e000b4e..afcb362 100644 --- a/backend/src/helpers/GetDefaultWhatsApp.ts +++ b/backend/src/helpers/GetDefaultWhatsApp.ts @@ -7,7 +7,7 @@ const GetDefaultWhatsApp = async (): Promise => { }); if (!defaultWhatsapp) { - throw new AppError("ERR_NO_WAPP_FOUND"); + throw new AppError("ERR_NO_DEF_WAPP_FOUND"); } return defaultWhatsapp; diff --git a/backend/src/helpers/GetWbotMessage.ts b/backend/src/helpers/GetWbotMessage.ts index 0caaafe..70aaafb 100644 --- a/backend/src/helpers/GetWbotMessage.ts +++ b/backend/src/helpers/GetWbotMessage.ts @@ -19,20 +19,13 @@ export const GetWbotMessage = async ( const msgToDelete = chatMessages.find(msg => msg.id.id === messageId); if (!msgToDelete) { - throw new AppError("msgNotFound"); + throw new Error(); } return msgToDelete; } catch (err) { console.log(err); - if (err.message === "msgNotFound") { - throw new AppError( - "Could not find a message witht this ID in WhatsApp chat." - ); - } - throw new AppError( - "Could not valid WhatsApp contact. Check connections page" - ); + throw new AppError("ERR_DELETE_WAPP_MSG"); } }; diff --git a/backend/src/libs/wbot.ts b/backend/src/libs/wbot.ts index cf6626b..bbbe789 100644 --- a/backend/src/libs/wbot.ts +++ b/backend/src/libs/wbot.ts @@ -92,9 +92,7 @@ export const getWbot = (whatsappId: number): Session => { const sessionIndex = sessions.findIndex(s => s.id === whatsappId); if (sessionIndex === -1) { - throw new AppError( - "This WhatsApp session is not initialized. Check connections page." - ); + throw new AppError("ERR_WAPP_NOT_INITIALIZED"); } return sessions[sessionIndex]; }; diff --git a/backend/src/services/AuthServices/RefreshTokenService.ts b/backend/src/services/AuthServices/RefreshTokenService.ts index 2147926..fa7893c 100644 --- a/backend/src/services/AuthServices/RefreshTokenService.ts +++ b/backend/src/services/AuthServices/RefreshTokenService.ts @@ -23,7 +23,7 @@ export const RefreshTokenService = async (token: string): Promise => { try { decoded = verify(token, authConfig.refreshSecret); } catch (err) { - throw new AppError("Session expire. Please login.", 401); + throw new AppError("ERR_SESSION_EXPIRED", 401); } const { id, tokenVersion } = decoded as RefreshTokenPayload; @@ -31,7 +31,7 @@ export const RefreshTokenService = async (token: string): Promise => { const user = await ShowUserService(id); if (user.tokenVersion !== tokenVersion) { - throw new AppError("Session revoked. Please login.", 401); + throw new AppError("ERR_SESSION_EXPIRED", 401); } const newToken = createAccessToken(user); diff --git a/backend/src/services/ContactServices/CreateContactService.ts b/backend/src/services/ContactServices/CreateContactService.ts index 66fbfc1..331d175 100644 --- a/backend/src/services/ContactServices/CreateContactService.ts +++ b/backend/src/services/ContactServices/CreateContactService.ts @@ -25,7 +25,7 @@ const CreateContactService = async ({ }); if (numberExists) { - throw new AppError("A contact with this number already exists."); + throw new AppError("ERR_DUPLICATED_CONTACT"); } const contact = await Contact.create( diff --git a/backend/src/services/ContactServices/DeleteContactService.ts b/backend/src/services/ContactServices/DeleteContactService.ts index 478e117..caaf86a 100644 --- a/backend/src/services/ContactServices/DeleteContactService.ts +++ b/backend/src/services/ContactServices/DeleteContactService.ts @@ -7,7 +7,7 @@ const DeleteContactService = async (id: string): Promise => { }); if (!contact) { - throw new AppError("No contact found with this ID.", 404); + throw new AppError("ERR_NO_CONTACT_FOUND", 404); } await contact.destroy(); diff --git a/backend/src/services/ContactServices/ShowContactService.ts b/backend/src/services/ContactServices/ShowContactService.ts index bbe4b87..4b215c4 100644 --- a/backend/src/services/ContactServices/ShowContactService.ts +++ b/backend/src/services/ContactServices/ShowContactService.ts @@ -5,7 +5,7 @@ const ShowContactService = async (id: string | number): Promise => { const contact = await Contact.findByPk(id, { include: ["extraInfo"] }); if (!contact) { - throw new AppError("No contact found with this ID.", 404); + throw new AppError("ERR_NO_CONTACT_FOUND", 404); } return contact; diff --git a/backend/src/services/ContactServices/UpdateContactService.ts b/backend/src/services/ContactServices/UpdateContactService.ts index d802e9e..8211766 100644 --- a/backend/src/services/ContactServices/UpdateContactService.ts +++ b/backend/src/services/ContactServices/UpdateContactService.ts @@ -32,7 +32,7 @@ const UpdateContactService = async ({ }); if (!contact) { - throw new AppError("No contact found with this ID.", 404); + throw new AppError("ERR_NO_CONTACT_FOUND", 404); } if (extraInfo) { diff --git a/backend/src/services/MessageServices/CreateMessageService.ts b/backend/src/services/MessageServices/CreateMessageService.ts index e5abb19..48e625c 100644 --- a/backend/src/services/MessageServices/CreateMessageService.ts +++ b/backend/src/services/MessageServices/CreateMessageService.ts @@ -22,7 +22,7 @@ const CreateMessageService = async ({ const ticket = await ShowTicketService(messageData.ticketId); if (!ticket) { - throw new AppError("No ticket found with this ID", 404); + throw new AppError("ERR_NO_TICKET_FOUND", 404); } await Message.upsert(messageData); @@ -32,7 +32,7 @@ const CreateMessageService = async ({ }); if (!message) { - throw new AppError("Error while creating message on database.", 501); + throw new AppError("ERR_CREATING_MESSAGE", 501); } return message; diff --git a/backend/src/services/MessageServices/ListMessagesService.ts b/backend/src/services/MessageServices/ListMessagesService.ts index 75d4d8d..60911a5 100644 --- a/backend/src/services/MessageServices/ListMessagesService.ts +++ b/backend/src/services/MessageServices/ListMessagesService.ts @@ -25,7 +25,7 @@ const ListMessagesService = async ({ const ticket = await ShowTicketService(ticketId); if (!ticket) { - throw new AppError("No ticket found with this ID", 404); + throw new AppError("ERR_NO_TICKET_FOUND", 404); } const whereCondition = { diff --git a/backend/src/services/SettingServices/UpdateSettingService.ts b/backend/src/services/SettingServices/UpdateSettingService.ts index 12f9a48..9c443a1 100644 --- a/backend/src/services/SettingServices/UpdateSettingService.ts +++ b/backend/src/services/SettingServices/UpdateSettingService.ts @@ -15,7 +15,7 @@ const UpdateSettingService = async ({ }); if (!setting) { - throw new AppError("No setting found with this ID.", 404); + throw new AppError("ERR_NO_SETTING_FOUND", 404); } await setting.update({ value }); diff --git a/backend/src/services/TicketServices/CreateTicketService.ts b/backend/src/services/TicketServices/CreateTicketService.ts index 15abaf8..4ea16cf 100644 --- a/backend/src/services/TicketServices/CreateTicketService.ts +++ b/backend/src/services/TicketServices/CreateTicketService.ts @@ -31,7 +31,7 @@ const CreateTicketService = async ({ const ticket = await Ticket.findByPk(id, { include: ["contact"] }); if (!ticket) { - throw new AppError("Error, ticket not created."); + throw new AppError("ERR_CREATING_TICKET"); } return ticket; diff --git a/backend/src/services/TicketServices/DeleteTicketService.ts b/backend/src/services/TicketServices/DeleteTicketService.ts index 1906f08..279a913 100644 --- a/backend/src/services/TicketServices/DeleteTicketService.ts +++ b/backend/src/services/TicketServices/DeleteTicketService.ts @@ -7,7 +7,7 @@ const DeleteTicketService = async (id: string): Promise => { }); if (!ticket) { - throw new AppError("No ticket found with this ID.", 404); + throw new AppError("ERR_NO_TICKET_FOUND", 404); } await ticket.destroy(); diff --git a/backend/src/services/TicketServices/ShowTicketService.ts b/backend/src/services/TicketServices/ShowTicketService.ts index dff0214..dd0cc30 100644 --- a/backend/src/services/TicketServices/ShowTicketService.ts +++ b/backend/src/services/TicketServices/ShowTicketService.ts @@ -21,7 +21,7 @@ const ShowTicketService = async (id: string | number): Promise => { }); if (!ticket) { - throw new AppError("No ticket found with this ID", 404); + throw new AppError("ERR_NO_TICKET_FOUND", 404); } return ticket; diff --git a/backend/src/services/TicketServices/UpdateTicketService.ts b/backend/src/services/TicketServices/UpdateTicketService.ts index 02c4a01..90b4744 100644 --- a/backend/src/services/TicketServices/UpdateTicketService.ts +++ b/backend/src/services/TicketServices/UpdateTicketService.ts @@ -38,7 +38,7 @@ const UpdateTicketService = async ({ }); if (!ticket) { - throw new AppError("No ticket found with this ID.", 404); + throw new AppError("ERR_NO_TICKET_FOUND", 404); } await SetTicketMessagesAsRead(ticket); diff --git a/backend/src/services/UserServices/DeleteUserService.ts b/backend/src/services/UserServices/DeleteUserService.ts index a260eb8..dcd945a 100644 --- a/backend/src/services/UserServices/DeleteUserService.ts +++ b/backend/src/services/UserServices/DeleteUserService.ts @@ -9,7 +9,7 @@ const DeleteUserService = async (id: string): Promise => { }); if (!user) { - throw new AppError("No user found with this ID.", 404); + throw new AppError("ERR_NO_USER_FOUND", 404); } const userOpenTickets: Ticket[] = await user.$get("tickets", { diff --git a/backend/src/services/UserServices/ShowUserService.ts b/backend/src/services/UserServices/ShowUserService.ts index dcd298d..bba0242 100644 --- a/backend/src/services/UserServices/ShowUserService.ts +++ b/backend/src/services/UserServices/ShowUserService.ts @@ -7,7 +7,7 @@ const ShowUserService = async (id: string | number): Promise => { }); if (!user) { - throw new AppError("No user found with this ID.", 404); + throw new AppError("ERR_NO_USER_FOUND", 404); } return user; diff --git a/backend/src/services/UserServices/UpdateUserService.ts b/backend/src/services/UserServices/UpdateUserService.ts index 883ea2e..65a33fb 100644 --- a/backend/src/services/UserServices/UpdateUserService.ts +++ b/backend/src/services/UserServices/UpdateUserService.ts @@ -32,7 +32,7 @@ const UpdateUserService = async ({ }); if (!user) { - throw new AppError("No user found with this ID.", 404); + throw new AppError("ERR_NO_USER_FOUND", 404); } const schema = Yup.object().shape({ diff --git a/backend/src/services/WbotServices/CheckIsValidContact.ts b/backend/src/services/WbotServices/CheckIsValidContact.ts index 9ec0c27..c3f6671 100644 --- a/backend/src/services/WbotServices/CheckIsValidContact.ts +++ b/backend/src/services/WbotServices/CheckIsValidContact.ts @@ -15,11 +15,9 @@ const CheckIsValidContact = async (number: string): Promise => { } catch (err) { console.log(err); if (err.message === "invalidNumber") { - throw new AppError("This is not a valid whatsapp number."); + throw new AppError("ERR_WAPP_INVALID_CONTACT"); } - throw new AppError( - "Could not valid WhatsApp contact. Check connections page" - ); + throw new AppError("ERR_WAPP_CHECK_CONTACT"); } }; diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index 9b957b8..916e56f 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -149,7 +149,7 @@ const handlMedia = async ( const media = await msg.downloadMedia(); if (!media) { - throw new AppError("Cannot download media from whatsapp."); + throw new AppError("ERR_WAPP_DOWNLOAD_MEDIA"); } if (!media.filename) { diff --git a/backend/src/services/WhatsappService/DeleteWhatsAppService.ts b/backend/src/services/WhatsappService/DeleteWhatsAppService.ts index 4f597c3..8f7c7be 100644 --- a/backend/src/services/WhatsappService/DeleteWhatsAppService.ts +++ b/backend/src/services/WhatsappService/DeleteWhatsAppService.ts @@ -7,7 +7,7 @@ const DeleteWhatsApprService = async (id: string): Promise => { }); if (!whatsapp) { - throw new AppError("No whatsapp found with this ID.", 404); + throw new AppError("ERR_NO_WAPP_FOUND", 404); } await whatsapp.destroy(); diff --git a/backend/src/services/WhatsappService/ShowWhatsAppService.ts b/backend/src/services/WhatsappService/ShowWhatsAppService.ts index b6afadf..f31bd7c 100644 --- a/backend/src/services/WhatsappService/ShowWhatsAppService.ts +++ b/backend/src/services/WhatsappService/ShowWhatsAppService.ts @@ -7,7 +7,7 @@ const ShowWhatsAppService = async ( const whatsapp = await Whatsapp.findByPk(id); if (!whatsapp) { - throw new AppError("No whatsapp found with this conditions.", 404); + throw new AppError("ERR_NO_WAPP_FOUND", 404); } return whatsapp; diff --git a/backend/src/services/WhatsappService/UpdateWhatsAppService.ts b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts index d818e21..aceb500 100644 --- a/backend/src/services/WhatsappService/UpdateWhatsAppService.ts +++ b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts @@ -51,7 +51,7 @@ const UpdateWhatsAppService = async ({ }); if (!whatsapp) { - throw new AppError("No whatsapp found with this ID.", 404); + throw new AppError("ERR_NO_WAPP_FOUND", 404); } await whatsapp.update({ diff --git a/frontend/src/components/ContactModal/index.js b/frontend/src/components/ContactModal/index.js index b35650f..acd4dda 100644 --- a/frontend/src/components/ContactModal/index.js +++ b/frontend/src/components/ContactModal/index.js @@ -81,9 +81,15 @@ const ContactModal = ({ open, onClose, contactId }) => { const { data } = await api.get(`/contacts/${contactId}`); setContact(data); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -105,9 +111,15 @@ const ContactModal = ({ open, onClose, contactId }) => { } toast.success(i18n.t("contactModal.success")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } handleClose(); diff --git a/frontend/src/components/MessagesList/index.js b/frontend/src/components/MessagesList/index.js index 5b1bd85..99b7c9e 100644 --- a/frontend/src/components/MessagesList/index.js +++ b/frontend/src/components/MessagesList/index.js @@ -26,6 +26,7 @@ import ModalImageCors from "../ModalImageCors"; import MessageOptionsMenu from "../MessageOptionsMenu"; import whatsBackground from "../../assets/wa-background.png"; +import { i18n } from "../../translate/i18n"; import api from "../../services/api"; import { toast } from "react-toastify"; @@ -284,9 +285,15 @@ const MessagesList = ({ ticketId, isGroup }) => { scrollToBottom(); } } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/NewTicketModal/index.js b/frontend/src/components/NewTicketModal/index.js index 9061b6e..bfab47c 100644 --- a/frontend/src/components/NewTicketModal/index.js +++ b/frontend/src/components/NewTicketModal/index.js @@ -53,9 +53,15 @@ const NewTicketModal = ({ modalOpen, onClose }) => { setOptions(data.contacts); setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/QrcodeModal/index.js b/frontend/src/components/QrcodeModal/index.js index b85af40..25ff7b4 100644 --- a/frontend/src/components/QrcodeModal/index.js +++ b/frontend/src/components/QrcodeModal/index.js @@ -18,9 +18,15 @@ const QrcodeModal = ({ open, onClose, whatsAppId }) => { const { data } = await api.get(`/whatsapp/${whatsAppId}`); setQrCode(data.qrcode); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/Ticket/index.js b/frontend/src/components/Ticket/index.js index d4ab8b1..707ecfb 100644 --- a/frontend/src/components/Ticket/index.js +++ b/frontend/src/components/Ticket/index.js @@ -14,6 +14,7 @@ import TicketInfo from "../TicketInfo"; import TicketActionButtons from "../TicketActionButtons"; import MessagesList from "../MessagesList"; import api from "../../services/api"; +import { i18n } from "../../translate/i18n"; const drawerWidth = 320; @@ -76,12 +77,18 @@ const Ticket = () => { setTicket(data); setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } if (err.response.status === 404) { history.push("/tickets"); } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/TicketActionButtons/index.js b/frontend/src/components/TicketActionButtons/index.js index d17515c..4323c44 100644 --- a/frontend/src/components/TicketActionButtons/index.js +++ b/frontend/src/components/TicketActionButtons/index.js @@ -54,10 +54,15 @@ const TicketActionButtons = ({ ticket }) => { history.push("/tickets"); } } catch (err) { - setLoading(false); - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/TicketOptionsMenu/index.js b/frontend/src/components/TicketOptionsMenu/index.js index 7bbda2d..8ca7f2f 100644 --- a/frontend/src/components/TicketOptionsMenu/index.js +++ b/frontend/src/components/TicketOptionsMenu/index.js @@ -16,9 +16,15 @@ const TicketOptionsMenu = ({ ticket, menuOpen, handleClose, anchorEl }) => { try { await api.delete(`/tickets/${ticket.id}`); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/UserModal/index.js b/frontend/src/components/UserModal/index.js index 41ad703..cff9516 100644 --- a/frontend/src/components/UserModal/index.js +++ b/frontend/src/components/UserModal/index.js @@ -83,9 +83,15 @@ const UserModal = ({ open, onClose, userId }) => { return { ...prevState, ...data }; }); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -107,9 +113,15 @@ const UserModal = ({ open, onClose, userId }) => { } toast.success(i18n.t("userModal.success")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } handleClose(); diff --git a/frontend/src/components/WhatsAppModal/index.js b/frontend/src/components/WhatsAppModal/index.js index 82f2e98..bb842bd 100644 --- a/frontend/src/components/WhatsAppModal/index.js +++ b/frontend/src/components/WhatsAppModal/index.js @@ -73,9 +73,15 @@ const WhatsAppModal = ({ open, onClose, whatsAppId }) => { const { data } = await api.get(`whatsapp/${whatsAppId}`); setWhatsApp(data); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -94,9 +100,15 @@ const WhatsAppModal = ({ open, onClose, whatsAppId }) => { } toast.success(i18n.t("whatsappModal.success")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } handleClose(); diff --git a/frontend/src/hooks/useTickets/index.js b/frontend/src/hooks/useTickets/index.js index b913c09..9003a76 100644 --- a/frontend/src/hooks/useTickets/index.js +++ b/frontend/src/hooks/useTickets/index.js @@ -2,6 +2,7 @@ import { useState, useEffect } from "react"; import { toast } from "react-toastify"; import api from "../../services/api"; +import { i18n } from "../../translate/i18n"; const useTickets = ({ searchParam, @@ -34,9 +35,15 @@ const useTickets = ({ setHasMore(data.hasMore); setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/pages/Connections/index.js b/frontend/src/pages/Connections/index.js index 69c15ac..b82a31d 100644 --- a/frontend/src/pages/Connections/index.js +++ b/frontend/src/pages/Connections/index.js @@ -103,9 +103,15 @@ const Connections = () => { const { data } = await api.get("/whatsapp/"); dispatch({ type: "LOAD_WHATSAPPS", payload: data }); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -182,9 +188,15 @@ const Connections = () => { await api.delete(`/whatsapp/${whatsAppId}`); toast.success(i18n.t("connections.toasts.deleted")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } setDeletingWhatsApp(null); diff --git a/frontend/src/pages/Contacts/index.js b/frontend/src/pages/Contacts/index.js index dd9dbab..24db75b 100644 --- a/frontend/src/pages/Contacts/index.js +++ b/frontend/src/pages/Contacts/index.js @@ -114,9 +114,15 @@ const Contacts = () => { setHasMore(data.hasMore); setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -166,9 +172,15 @@ const Contacts = () => { await api.delete(`/contacts/${contactId}`); toast.success(i18n.t("contacts.toasts.deleted")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } setDeletingContact(null); @@ -180,9 +192,15 @@ const Contacts = () => { try { await api.post("/contacts/import"); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/pages/Settings/index.js b/frontend/src/pages/Settings/index.js index 1b5e5b1..4932c1d 100644 --- a/frontend/src/pages/Settings/index.js +++ b/frontend/src/pages/Settings/index.js @@ -43,9 +43,15 @@ const Settings = () => { const { data } = await api.get("/settings"); setSettings(data); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -81,9 +87,15 @@ const Settings = () => { }); toast.success(i18n.t("settings.success")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/pages/Signup/index.js b/frontend/src/pages/Signup/index.js index ee6e509..ce65758 100644 --- a/frontend/src/pages/Signup/index.js +++ b/frontend/src/pages/Signup/index.js @@ -78,9 +78,15 @@ const SignUp = () => { toast.success(i18n.t("signup.toasts.success")); history.push("/login"); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/pages/Users/index.js b/frontend/src/pages/Users/index.js index bb7af08..9e750c5 100644 --- a/frontend/src/pages/Users/index.js +++ b/frontend/src/pages/Users/index.js @@ -112,9 +112,15 @@ const Users = () => { setHasMore(data.hasMore); setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; @@ -164,9 +170,15 @@ const Users = () => { await api.delete(`/users/${userId}`); toast.success(i18n.t("users.toasts.deleted")); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } setDeletingUser(null); diff --git a/frontend/src/translate/languages/en.js b/frontend/src/translate/languages/en.js index b7ac739..9c22416 100644 --- a/frontend/src/translate/languages/en.js +++ b/frontend/src/translate/languages/en.js @@ -287,7 +287,15 @@ const messages = { }, }, backendErrors: { - ERR_NO_WAPP_FOUND: "No default WhatsApp found. Check connections page.", + ERR_NO_DEF_WAPP_FOUND: + "No default WhatsApp found. Check connections page.", + ERR_WAPP_NOT_INITIALIZED: + "This WhatsApp session is not initialized. Check connections page.", + ERR_WAPP_CHECK_CONTACT: + "Could not check WhatsApp contact. Check connections page.", + ERR_WAPP_INVALID_CONTACT: "This is not a valid whatsapp number.", + ERR_WAPP_DOWNLOAD_MEDIA: + "Could not download media from WhatsApp. Check connections page.", ERR_INVALID_CREDENTIALS: "Authentication error. Please try again.", ERR_SENDING_WAPP_MSG: "Error sending WhatsApp message. Check connections page.", @@ -295,6 +303,18 @@ const messages = { "Couldn't delete message from WhatsApp. Check connections page.", ERR_OTHER_OPEN_TICKET: "There's already an open or pending ticket for this contact.", + ERR_SESSION_EXPIRED: "Session expired. Please login.", + ERR_USER_CREATION_DISABLED: + "User creation was disabled by administrator.", + ERR_NO_PERMISSION: "You don't have permission to access this resource.", + ERR_DUPLICATED_CONTACT: "A contact with this number already exists.", + ERR_NO_SETTING_FOUND: "No setting found with this ID.", + ERR_NO_CONTACT_FOUND: "No contact found with this ID.", + ERR_NO_TICKET_FOUND: "No ticket found with this ID.", + ERR_NO_USER_FOUND: "No user found with this ID.", + ERR_NO_WAPP_FOUND: "No WhatsApp found with this ID.", + ERR_CREATING_MESSAGE: "Error while creating message on database.", + ERR_CREATING_TICKET: "Error while creating ticket on database.", }, }, }, diff --git a/frontend/src/translate/languages/es.js b/frontend/src/translate/languages/es.js index c99d2b5..b9572a4 100644 --- a/frontend/src/translate/languages/es.js +++ b/frontend/src/translate/languages/es.js @@ -292,8 +292,15 @@ const messages = { }, }, backendErrors: { - ERR_NO_WAPP_FOUND: + ERR_NO_DEF_WAPP_FOUND: "No se encontró WhatsApp predeterminado. Verifique la página de conexiones.", + ERR_WAPP_NOT_INITIALIZED: + "Esta sesión de WhatsApp no ​​está inicializada. Verifique la página de conexiones.", + ERR_WAPP_CHECK_CONTACT: + "No se pudo verificar el contacto de WhatsApp. Verifique la página de conexiones.", + ERR_WAPP_INVALID_CONTACT: "Este no es un número de whatsapp válido.", + ERR_WAPP_DOWNLOAD_MEDIA: + "No se pudieron descargar los medios de WhatsApp. Verifique la página de conexiones.", ERR_INVALID_CREDENTIALS: "Error de autenticación. Vuelva a intentarlo.", ERR_SENDING_WAPP_MSG: "Error al enviar el mensaje de WhatsApp. Verifique la página de conexiones.", @@ -301,6 +308,19 @@ const messages = { "No se pudo borrar el mensaje de WhatsApp. Verifique la página de conexiones.", ERR_OTHER_OPEN_TICKET: "Ya hay un ticket abierto o pendiente para este contacto.", + ERR_SESSION_EXPIRED: "Sesión caducada. Inicie sesión.", + ERR_USER_CREATION_DISABLED: + "La creación de usuarios fue deshabilitada por el administrador.", + ERR_NO_PERMISSION: "No tienes permiso para acceder a este recurso.", + ERR_DUPLICATED_CONTACT: "Ya existe un contacto con este número.", + ERR_NO_SETTING_FOUND: + "No se encontró ninguna configuración con este ID.", + ERR_NO_CONTACT_FOUND: "No se encontró ningún contacto con este ID.", + ERR_NO_TICKET_FOUND: "No se encontró ningún ticket con este ID.", + ERR_NO_USER_FOUND: "No se encontró ningún usuario con este ID.", + ERR_NO_WAPP_FOUND: "No se encontró WhatsApp con este ID.", + ERR_CREATING_MESSAGE: "Error al crear el mensaje en la base de datos.", + ERR_CREATING_TICKET: "Error al crear el ticket en la base de datos.", }, }, }, diff --git a/frontend/src/translate/languages/pt.js b/frontend/src/translate/languages/pt.js index 5900a2b..e7fd31d 100644 --- a/frontend/src/translate/languages/pt.js +++ b/frontend/src/translate/languages/pt.js @@ -290,8 +290,15 @@ const messages = { }, }, backendErrors: { - ERR_NO_WAPP_FOUND: + ERR_NO_DEF_WAPP_FOUND: "Nenhum WhatsApp padrão encontrado. Verifique a página de conexões.", + ERR_WAPP_NOT_INITIALIZED: + "Esta sessão do WhatsApp não foi inicializada. Verifique a página de conexões.", + ERR_WAPP_CHECK_CONTACT: + "Não foi possível verificar o contato do WhatsApp. Verifique a página de conexões", + ERR_WAPP_INVALID_CONTACT: "Este não é um número de Whatsapp válido.", + ERR_WAPP_DOWNLOAD_MEDIA: + "Não foi possível baixar mídia do WhatsApp. Verifique a página de conexões.", ERR_INVALID_CREDENTIALS: "Erro de autenticação. Por favor, tente novamente.", ERR_SENDING_WAPP_MSG: @@ -300,6 +307,18 @@ const messages = { "Não foi possível excluir a mensagem do WhatsApp. Verifique a página de conexões.", ERR_OTHER_OPEN_TICKET: "Já existe um tíquete aberto ou pendente para este contato.", + ERR_SESSION_EXPIRED: "Sessão expirada. Por favor entre.", + ERR_USER_CREATION_DISABLED: + "A criação do usuário foi desabilitada pelo administrador.", + ERR_NO_PERMISSION: "Você não tem permissão para acessar este recurso.", + ERR_DUPLICATED_CONTACT: "Já existe um contato com este número.", + ERR_NO_SETTING_FOUND: "Nenhuma configuração encontrada com este ID.", + ERR_NO_CONTACT_FOUND: "Nenhum contato encontrado com este ID.", + ERR_NO_TICKET_FOUND: "Nenhum tíquete encontrado com este ID.", + ERR_NO_USER_FOUND: "Nenhum usuário encontrado com este ID.", + ERR_NO_WAPP_FOUND: "Nenhum WhatsApp encontrado com este ID.", + ERR_CREATING_MESSAGE: "Erro ao criar mensagem no banco de dados.", + ERR_CREATING_TICKET: "Erro ao criar tíquete no banco de dados.", }, }, },