feat: enhance email processing with dynamic filenames and additional email notifications
This commit is contained in:
parent
453183ce3b
commit
e0353bb6f9
1 changed files with 51 additions and 5 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
|
import { format } from "date-fns";
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { EmailsIdEmail } from "~/schemas/public/Emails";
|
import type { EmailsIdEmail } from "~/schemas/public/Emails";
|
||||||
import type { EventQueueUpdate } from "~/schemas/public/EventQueue";
|
import type { EventQueueUpdate } from "~/schemas/public/EventQueue";
|
||||||
|
|
@ -109,9 +110,9 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
try {
|
try {
|
||||||
const ordine = await db
|
const ordine = await db
|
||||||
.selectFrom("ordini")
|
.selectFrom("ordini")
|
||||||
.selectAll()
|
.selectAll("ordini")
|
||||||
.innerJoin("users", "users.id", "ordini.userid")
|
.innerJoin("users", "users.id", "ordini.userid")
|
||||||
.select(["users.email"])
|
.select(["users.email", "users.username"])
|
||||||
.innerJoin("prezziario", "prezziario.idprezziario", "ordini.packid")
|
.innerJoin("prezziario", "prezziario.idprezziario", "ordini.packid")
|
||||||
.select(["prezziario.testo_condizioni"])
|
.select(["prezziario.testo_condizioni"])
|
||||||
.where("ordine_id", "=", input.ordineId)
|
.where("ordine_id", "=", input.ordineId)
|
||||||
|
|
@ -119,6 +120,10 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
throw new Error(`Ordine not found - ordineId: ${input.ordineId}`);
|
throw new Error(`Ordine not found - ordineId: ${input.ordineId}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const condizioniFilename = `condizioni_contrattuali_${ordine.created_at.toISOString()}.pdf`;
|
||||||
|
const ricevutaFilename = `ricevuta_cortesia_${ordine.username.replace(/\s+/g, "-")}-${format(ordine.created_at, "dd-MM-yyyy")}.pdf`;
|
||||||
|
const lock_expires = new Date(Date.now() + 3000); // Lock for 30 sec
|
||||||
|
|
||||||
await addEventToQueue({
|
await addEventToQueue({
|
||||||
data: {
|
data: {
|
||||||
tipo: "email",
|
tipo: "email",
|
||||||
|
|
@ -131,7 +136,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
to: ordine.email,
|
to: ordine.email,
|
||||||
attachments: [
|
attachments: [
|
||||||
{
|
{
|
||||||
filename: `condizioni_contrattuali_${ordine.created_at.toISOString()}.pdf`,
|
filename: condizioniFilename,
|
||||||
generate: {
|
generate: {
|
||||||
type: "condizioni",
|
type: "condizioni",
|
||||||
stringId: (ordine.testo_condizioni ||
|
stringId: (ordine.testo_condizioni ||
|
||||||
|
|
@ -141,7 +146,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
contentType: "application/pdf",
|
contentType: "application/pdf",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
filename: `ricevuta_cortesia_${ordine.ordine_id}.pdf`,
|
filename: ricevutaFilename,
|
||||||
|
|
||||||
generate: {
|
generate: {
|
||||||
type: "ricevuta_cortesia",
|
type: "ricevuta_cortesia",
|
||||||
|
|
@ -155,7 +160,48 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
userId: ordine.userid,
|
userId: ordine.userid,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
lock_expires: new Date(Date.now() + 3000), // Lock for 30 sec
|
lock_expires,
|
||||||
|
});
|
||||||
|
await addEventToQueue({
|
||||||
|
data: {
|
||||||
|
tipo: "email",
|
||||||
|
data: {
|
||||||
|
template: {
|
||||||
|
mailType: "generic",
|
||||||
|
props: {
|
||||||
|
title: "Nuovo pagamento ricevuto",
|
||||||
|
testo: `È stato ricevuto un nuovo pagamento.`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mail: {
|
||||||
|
subject: "Ric pagamento",
|
||||||
|
to: "web@infoalloggi.it",
|
||||||
|
attachments: [
|
||||||
|
{
|
||||||
|
filename: ricevutaFilename,
|
||||||
|
|
||||||
|
generate: {
|
||||||
|
type: "ricevuta_cortesia",
|
||||||
|
ordineId: ordine.ordine_id,
|
||||||
|
},
|
||||||
|
encoding: "base64",
|
||||||
|
contentType: "application/pdf",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
filename: condizioniFilename,
|
||||||
|
generate: {
|
||||||
|
type: "condizioni",
|
||||||
|
stringId: (ordine.testo_condizioni ||
|
||||||
|
CONDIZIONI_DEFAULT) as TestiEStringheStingaId,
|
||||||
|
},
|
||||||
|
encoding: "base64",
|
||||||
|
contentType: "application/pdf",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lock_expires,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new TRPCError({
|
throw new TRPCError({
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue