Compare commits

...

2 Commits

Author SHA1 Message Date
JCEEE 404d4221ee 1.10.6 2026-09-11 13:05:08 +01:00
JCEEE 70b9c30c63 fix email bug for tags 2026-09-11 13:04:02 +01:00
3 changed files with 20 additions and 32 deletions
-1
View File
@@ -132,7 +132,6 @@ export async function sendMentionEmail(opts: {
message: string;
dashboardUrl: string;
}) {
console.log('[email] sendMentionEmail called to:', opts.to);
const { to, parentName, authorName, message, dashboardUrl } = opts;
await resend.emails.send({
+19 -30
View File
@@ -1,4 +1,5 @@
import { sendMentionEmail } from '../email';
import { pbAdmin } from '$lib/server/pocketbase';
export type ChatActor = {
id: string;
@@ -43,13 +44,12 @@ export async function send(
createdAt: new Date().toISOString(),
clientId: body.clientId ? String(body.clientId).slice(0, 64) : ''
});
// Email any @mentioned parents (their in-app toast is client-side, via the
// same mention tokens). Fire-and-forget — never fail the message itself.
console.log('[chat] calling notifyMentionedParents for famId:', famId, 'content:', content.slice(0, 50));
notifyMentionedParents(pb, famId, actor, record, body.siteUrl || '').catch((err: any) => {
console.error('[chat] notifyMentionedParents top-level catch:', err);
});
return record;
// Email any @mentioned parents (their in-app toast is client-side, via the
// same mention tokens). Fire-and-forget — never fail the message itself.
notifyMentionedParents(pb, famId, actor, record, body.siteUrl || '').catch((err: any) => {
console.error('[chat] notifyMentionedParents top-level catch:', err);
});
return record;
}
// Scan the message for `@Parent Name` tokens (case-insensitive) and email every
@@ -61,8 +61,10 @@ async function notifyMentionedParents(
message: any,
siteUrl: string
) {
console.log('[chat] notifyMentionedParents called', { famId, actorName: actor.name, contentLen: String(message.content || '').length });
const content = String(message.content || '');
// Find parents whose name appears in the message content.
// getFullList for auth users may not return email, so we fetch
// each matched parent individually via pbAdmin to get the address.
const parents = await pb
.collection('users')
.getFullList({ filter: `famId = '${famId}' && role = 'parent'` })
@@ -70,47 +72,34 @@ async function notifyMentionedParents(
console.error('[chat] Failed to fetch parents:', err);
return [];
});
console.log('[chat] parents found:', parents.length, 'mentioned parents:', parents.filter((u: any) => {
if (u.id === actor.id || !u.email) return false;
const name = (u.name || '').trim().toLowerCase();
return !!name && content.toLowerCase().includes('@' + name);
}).length);
const mentioned = parents.filter((u: any) => {
if (u.id === actor.id || !u.email) return false;
if (u.id === actor.id) return false;
const name = (u.name || '').trim().toLowerCase();
return !!name && content.toLowerCase().includes('@' + name);
});
if (!mentioned.length) {
console.log('[chat] no mentioned parents found');
return;
}
if (!mentioned.length) return;
const fam = await pb
.collection('fams')
.getOne(famId)
.catch((err: any) => {
console.error('[chat] Failed to fetch fam:', err);
return null;
});
.catch(() => null);
// Don't send emails for the demo family.
if (fam?.slug === 'showboaters') {
console.log('[chat] skipping demo family');
return;
}
if (fam?.slug === 'showboaters') return;
const dashboardUrl = `${siteUrl}/${fam?.slug || famId}`;
console.log('[chat] sending mention emails to', mentioned.length, 'parents');
for (const parent of mentioned) {
try {
const parentRec = await pbAdmin.getOne('users', parent.id);
const parentEmail = parentRec.email;
if (!parentEmail) continue;
await sendMentionEmail({
to: parent.email,
to: parentEmail,
parentName: parent.name || 'there',
authorName: message.authorName || 'Family member',
message: content,
dashboardUrl
});
console.log('[chat] email sent to', parent.email);
} catch (err) {
console.error(`[chat] Failed to send mention email to ${parent.email}:`, err);
console.error(`[chat] Failed to send mention email to ${parent.name}:`, err);
}
}
}
+1 -1
View File
@@ -13,5 +13,5 @@
"esbuild"
]
},
"version": "1.10.5"
"version": "1.10.6"
}