2024-03-01 14:52:37 +01:00
|
|
|
|
import "dotenv/config";
|
|
|
|
|
|
|
|
|
|
import { db } from "../src/db";
|
2024-03-05 11:21:09 +01:00
|
|
|
|
import * as schema from "../src/schema";
|
2024-03-01 14:52:37 +01:00
|
|
|
|
import { getEntry, getCollection } from "astro:content";
|
|
|
|
|
import { mailClient } from "../src/mail";
|
|
|
|
|
import { setTimeout } from "node:timers/promises";
|
2024-03-05 11:21:09 +01:00
|
|
|
|
import { and, eq } from "drizzle-orm";
|
2024-03-01 14:52:37 +01:00
|
|
|
|
|
|
|
|
|
export const prerender = false;
|
|
|
|
|
|
|
|
|
|
const MAIL_FROM = process.env.MAIL_FROM || "vig@re-set.cz";
|
|
|
|
|
|
|
|
|
|
const variantIds: Record<string, string> = {
|
|
|
|
|
"1": "oil-gas-policy",
|
|
|
|
|
"2": "coal-policy",
|
|
|
|
|
"3": "neptun-deep",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const variants = await getCollection("variants");
|
|
|
|
|
|
|
|
|
|
export function getSubject(lang: string, variantNr: string) {
|
|
|
|
|
const variant = variants.find((v) => v.slug === `${lang}/${variantIds[variantNr]}`);
|
|
|
|
|
if (!variant) {
|
|
|
|
|
throw new Error("No variant");
|
|
|
|
|
}
|
|
|
|
|
return `VIG – ${variant.data.title}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function processLetters() {
|
2024-03-05 11:21:09 +01:00
|
|
|
|
const letters = await db.select().from(schema.letters).where(eq(schema.letters.confirmed, true));
|
2024-03-01 14:52:37 +01:00
|
|
|
|
|
|
|
|
|
for (const letter of letters) {
|
|
|
|
|
const branch = await getEntry("branches", letter.branch as string);
|
|
|
|
|
const subject = getSubject(
|
2024-03-05 11:21:09 +01:00
|
|
|
|
letter.branch === "vig-holding" ? "en" : letter.lang,
|
2024-03-01 14:52:37 +01:00
|
|
|
|
letter.variant
|
|
|
|
|
);
|
|
|
|
|
console.log("Subject", subject);
|
|
|
|
|
|
|
|
|
|
if (!branch) {
|
|
|
|
|
console.error("No branch", letter.branch);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const recipientEmail of branch.data.emails) {
|
2024-03-05 11:21:09 +01:00
|
|
|
|
const [message] = await db
|
|
|
|
|
.insert(schema.messages)
|
2024-03-01 14:52:37 +01:00
|
|
|
|
.values({
|
|
|
|
|
letterId: letter.id,
|
|
|
|
|
from: letter.email,
|
|
|
|
|
to: recipientEmail,
|
|
|
|
|
status: "pending",
|
|
|
|
|
})
|
2024-03-05 11:21:09 +01:00
|
|
|
|
.returning({ id: schema.messages.id });
|
2024-03-01 14:52:37 +01:00
|
|
|
|
|
|
|
|
|
if (!message) {
|
|
|
|
|
console.error("Error creating message");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const name = `${letter.firstName} ${letter.lastName}`;
|
|
|
|
|
const messageText =
|
2024-03-05 11:21:09 +01:00
|
|
|
|
letter.lang === "hu"
|
2024-03-01 14:52:37 +01:00
|
|
|
|
? letter.message.replace("Tisztelt Hölgyem,", "Tisztelt Hölgyem/Uram,")
|
|
|
|
|
: letter.message;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const values = {
|
|
|
|
|
subject,
|
|
|
|
|
from: `${name} <${MAIL_FROM}>`,
|
|
|
|
|
to: [recipientEmail],
|
|
|
|
|
replyTo: `${name} <${letter.email}>`,
|
|
|
|
|
plainBody: messageText,
|
|
|
|
|
};
|
|
|
|
|
const result = await mailClient.send(values);
|
|
|
|
|
console.log(result);
|
|
|
|
|
|
|
|
|
|
await db
|
2024-03-05 11:21:09 +01:00
|
|
|
|
.update(schema.messages)
|
2024-03-01 14:52:37 +01:00
|
|
|
|
.set({ status: "success" })
|
2024-03-05 11:21:09 +01:00
|
|
|
|
.where(eq(schema.messages.id, message.id));
|
2024-03-01 14:52:37 +01:00
|
|
|
|
} catch (error) {
|
|
|
|
|
console.log(error);
|
|
|
|
|
await db
|
2024-03-05 11:21:09 +01:00
|
|
|
|
.update(schema.messages)
|
2024-03-01 14:52:37 +01:00
|
|
|
|
.set({ status: "error" })
|
2024-03-05 11:21:09 +01:00
|
|
|
|
.where(eq(schema.messages.id, message.id));
|
2024-03-01 14:52:37 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await setTimeout(2000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await processLetters();
|