From e2968974f7be0765c2ef537ad95fa09086c3bb5f Mon Sep 17 00:00:00 2001 From: Erza Bytyci Date: Tue, 19 May 2026 06:29:43 +0000 Subject: [PATCH 1/2] fix talkback function --- gradesa/src/app/api/talkback/route.js | 10 ++- gradesa/src/backend/mailService.js | 93 +++++++++++++++++---------- 2 files changed, 67 insertions(+), 36 deletions(-) diff --git a/gradesa/src/app/api/talkback/route.js b/gradesa/src/app/api/talkback/route.js index ba8b9e6..32d2f76 100644 --- a/gradesa/src/app/api/talkback/route.js +++ b/gradesa/src/app/api/talkback/route.js @@ -1,5 +1,5 @@ import { z } from "zod"; -import { sendEmail } from "@/backend/mailService"; +import sendEmail from "@/backend/mailService"; const talkbackSchema = z.object({ email: z @@ -34,7 +34,11 @@ export async function POST(req) { const { email, subject, message } = result.data; - await sendEmail(email, subject, message); + await sendEmail({ + to: email, + subject, + text: message, + }); return Response.json({ message: "Nachricht erfolgreich gesendet.", @@ -47,4 +51,4 @@ export async function POST(req) { { status: 500 } ); } -} +}; diff --git a/gradesa/src/backend/mailService.js b/gradesa/src/backend/mailService.js index fd285d6..ece1dc3 100644 --- a/gradesa/src/backend/mailService.js +++ b/gradesa/src/backend/mailService.js @@ -1,38 +1,65 @@ -import axios from "axios"; - -const pateClient = axios.create({ - baseURL: "https://api-toska.apps.ocp-prod-0.k8s.it.helsinki.fi/pate/", - params: { - token: process.env.PATE_TOKEN, - }, -}); - -const template = { - from: "Gradesa", -}; +const PATE_URL = "https://api-toska.apps.ocp-prod-0.k8s.it.helsinki.fi/pate/"; +const isDevelopment = process.env.NODE_ENV === "development"; +const isCI = process.env.CI === "true"; const settings = { - color: "orange", - header: "Sent by Gradesa", - dryrun: false, - hideToska: true, - disableToska: true, + hideToska: false, + disableToska: true, + color: "orange", + header: "GRADESA", + headerFontColor: "white", + dryrun: false, }; -export async function sendEmail(to, subject, body) { - if (!process.env.PATE_TOKEN) { - throw new Error("PATE token missing"); - } +const sendEmail = async ({ to, subject, text }) => { + if (!to || !subject || !text) { + throw new Error("Missing email fields: to, subject and text are required"); + } - return pateClient.post("/", { - template, - emails: [ - { - to, - subject, - body, - }, - ], - settings, - }); -} + const mail = { + template: { + from: "GRADESA", + text, + }, + emails: [ + { + to, + subject, + }, + ], + settings, + }; + + if (isCI || isDevelopment) { + console.info("Skipping email sending in CI/development", { + to, + subject, + nodeEnv: process.env.NODE_ENV, + }); + return; + } + + if (!process.env.PATE_TOKEN) { + throw new Error("PATE_TOKEN missing"); + } + + try { + const response = await fetch(`${PATE_URL}?token=${process.env.PATE_TOKEN}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(mail), + }); + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error(`PATE email sending failed with status ${response.status}: ${errorBody}`); + } + } catch (error) { + console.error("PATE fetch error:", error); + throw error; + } +}; + +export default sendEmail; \ No newline at end of file From b5046d2c02e6103d831c096fc0e756052cd1915c Mon Sep 17 00:00:00 2001 From: Erza Bytyci Date: Tue, 19 May 2026 06:35:47 +0000 Subject: [PATCH 2/2] fix format --- gradesa/src/app/api/talkback/route.js | 2 +- gradesa/src/backend/mailService.js | 107 ++++++++++++++------------ 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/gradesa/src/app/api/talkback/route.js b/gradesa/src/app/api/talkback/route.js index 32d2f76..13b5025 100644 --- a/gradesa/src/app/api/talkback/route.js +++ b/gradesa/src/app/api/talkback/route.js @@ -51,4 +51,4 @@ export async function POST(req) { { status: 500 } ); } -}; +} diff --git a/gradesa/src/backend/mailService.js b/gradesa/src/backend/mailService.js index ece1dc3..19b04c6 100644 --- a/gradesa/src/backend/mailService.js +++ b/gradesa/src/backend/mailService.js @@ -3,63 +3,68 @@ const isDevelopment = process.env.NODE_ENV === "development"; const isCI = process.env.CI === "true"; const settings = { - hideToska: false, - disableToska: true, - color: "orange", - header: "GRADESA", - headerFontColor: "white", - dryrun: false, + hideToska: false, + disableToska: true, + color: "orange", + header: "GRADESA", + headerFontColor: "white", + dryrun: false, }; const sendEmail = async ({ to, subject, text }) => { - if (!to || !subject || !text) { - throw new Error("Missing email fields: to, subject and text are required"); - } + if (!to || !subject || !text) { + throw new Error("Missing email fields: to, subject and text are required"); + } - const mail = { - template: { - from: "GRADESA", - text, + const mail = { + template: { + from: "GRADESA", + text, + }, + emails: [ + { + to, + subject, + }, + ], + settings, + }; + + if (isCI || isDevelopment) { + console.info("Skipping email sending in CI/development", { + to, + subject, + nodeEnv: process.env.NODE_ENV, + }); + return; + } + + if (!process.env.PATE_TOKEN) { + throw new Error("PATE_TOKEN missing"); + } + + try { + const response = await fetch( + `${PATE_URL}?token=${process.env.PATE_TOKEN}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", }, - emails: [ - { - to, - subject, - }, - ], - settings, - }; + body: JSON.stringify(mail), + } + ); - if (isCI || isDevelopment) { - console.info("Skipping email sending in CI/development", { - to, - subject, - nodeEnv: process.env.NODE_ENV, - }); - return; - } - - if (!process.env.PATE_TOKEN) { - throw new Error("PATE_TOKEN missing"); - } - - try { - const response = await fetch(`${PATE_URL}?token=${process.env.PATE_TOKEN}`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(mail), - }); - - if (!response.ok) { - const errorBody = await response.text(); - throw new Error(`PATE email sending failed with status ${response.status}: ${errorBody}`); - } - } catch (error) { - console.error("PATE fetch error:", error); - throw error; + if (!response.ok) { + const errorBody = await response.text(); + throw new Error( + `PATE email sending failed with status ${response.status}: ${errorBody}` + ); } + } catch (error) { + console.error("PATE fetch error:", error); + throw error; + } }; -export default sendEmail; \ No newline at end of file +export default sendEmail;