From 75866d9a8de59c6d627dde56be4eb183c257d882 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Mon, 2 Dec 2024 17:14:18 +0100 Subject: [PATCH] welcome mails: barcode_content to barcode_url generation with bwip-js --- bun.lockb | Bin 20758 -> 21106 bytes package.json | 1 + src/routes/email.ts | 22 +++++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index 4e6edb8fde2c998f2fc7adc7e70051be6b90f34d..c0bfb78fefa05b02e2fbd575cf1b260f2fe35d3d 100644 GIT binary patch delta 2594 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 diff --git a/package.json b/package.json index 759968b..d0f4262 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@hono/zod-openapi": "0.18.0", "@hono/zod-validator": "0.4.1", "bullmq": "5.29.0", + "bwip-js": "^4.5.1", "handlebars": "4.7.8", "hono": "4.6.11", "ioredis": "5.4.1", diff --git a/src/routes/email.ts b/src/routes/email.ts index d69d54a..ea65e5b 100644 --- a/src/routes/email.ts +++ b/src/routes/email.ts @@ -4,6 +4,7 @@ import { z } from 'zod' import { EmailService } from '../services/email' import { getEmailTemplate } from '../templates' import { Language } from '../types' +import { toBuffer } from 'bwip-js/node' const emailRouter = new Hono() const emailService = new EmailService() @@ -16,15 +17,30 @@ const sendEmailSchema = z.object({ data: z.record(z.any()) }) +async function generateBarcodeDataURL(data) { + const buffer = await toBuffer({ + bcid: 'code128', + text: data, + scale: 3, + height: 10, + includetext: true, + textxalign: 'center', + }); + + const base64Data = buffer.toString('base64'); + const dataURL = `data:image/png;base64,${base64Data}`; + + return dataURL; +} + emailRouter.post('/', zValidator('json', sendEmailSchema), async (c) => { let { to, subject, templateName, language, data } = c.req.valid('json') try { const template = getEmailTemplate(templateName, language as Language) if (templateName === "welcome") { - if (data.barcode_content === "0123456789") { - data.barcode_url = "https://barcodeapi.org/api/128/0123456789?" - } + const dataURL = await generateBarcodeDataURL(data.barcode_content); + data.barcode_url = dataURL; } await emailService.sendEmail({ to,