Add unsubscribe endpoint and email footers

This commit is contained in:
Remi
2025-11-20 23:29:44 +01:00
parent 43cd53780d
commit 93fed93d41
7 changed files with 177 additions and 16 deletions

View File

@@ -57,8 +57,8 @@ export default defineEventHandler(async () => {
entry.invitationSentAt = sentAt
await entry.save()
const html = await renderInvitationEmail(invitation.code)
const text = renderInvitationText(invitation.code)
const html = await renderInvitationEmail(invitation.code, email)
const text = renderInvitationText(invitation.code, email)
await sendMail({
to: email,
@@ -88,8 +88,8 @@ export default defineEventHandler(async () => {
const requestedAt = new Date()
const text = renderFeedbackText()
const html = await renderFeedbackEmail()
const text = renderFeedbackText(email)
const html = await renderFeedbackEmail(email)
await sendMail({
to: email,

View File

@@ -0,0 +1,33 @@
import { createError, readBody } from 'h3'
import { UpdateSubscriber } from '../../models/UpdateSubscriber'
import { WaitlistEntry } from '../../models/WaitlistEntry'
interface UnsubscribeRequestBody {
email?: string
}
export default defineEventHandler(async (event) => {
const body = await readBody<UnsubscribeRequestBody>(event)
const email = body.email?.trim().toLowerCase()
if (!email) {
throw createError({ statusCode: 400, statusMessage: 'Email is required' })
}
const [updateResult, waitlistResult] = await Promise.all([
UpdateSubscriber.deleteOne({ email }),
WaitlistEntry.deleteOne({ email }),
])
const removed = Boolean(updateResult.deletedCount || waitlistResult.deletedCount)
if (!removed) {
throw createError({ statusCode: 404, statusMessage: 'No matching email found' })
}
return {
success: true,
removedFromUpdates: updateResult.deletedCount > 0,
removedFromWaitlist: waitlistResult.deletedCount > 0,
}
})