Hydrate Telegram avatars on demand in frontend API

This commit is contained in:
Ruslan Bakiev
2026-02-26 11:43:47 +07:00
parent 97fb67f68c
commit a0ff1d00f6
2 changed files with 79 additions and 8 deletions

View File

@@ -123,9 +123,11 @@ function resolveContactMessageAudioUrl(message: {
function resolveContactAvatarUrl(contact: {
id: string;
avatarUrl: string | null;
}) {
}, hasTelegramChannel: boolean) {
const raw = String(contact.avatarUrl ?? "").trim();
if (!raw) return "";
if (!raw) {
return hasTelegramChannel ? `/api/omni/telegram/avatar?contactId=${encodeURIComponent(contact.id)}` : "";
}
if (raw.startsWith(TELEGRAM_AUDIO_FILE_MARKER)) {
return `/api/omni/telegram/avatar?contactId=${encodeURIComponent(contact.id)}`;
}
@@ -493,11 +495,13 @@ async function getContacts(auth: AuthContext | null) {
if (total === 0) return true;
return (visibleInboxesByContactId.get(c.id) ?? 0) > 0;
})
.map((c) => ({
.map((c) => {
const channels = Array.from(channelsByContactId.get(c.id) ?? []);
return {
id: c.id,
name: c.name,
avatar: resolveContactAvatarUrl(c),
channels: Array.from(channelsByContactId.get(c.id) ?? []),
avatar: resolveContactAvatarUrl(c, channels.includes("Telegram")),
channels,
lastContactAt: c.messages[0]?.occurredAt?.toISOString?.() ?? c.updatedAt.toISOString(),
lastMessageText: c.messages[0]?.content ?? "",
lastMessageChannel: c.messages[0]?.channel ? mapChannel(c.messages[0].channel) : "",
@@ -505,7 +509,8 @@ async function getContacts(auth: AuthContext | null) {
? (!readAtByContactId.has(c.id) || c.messages[0].occurredAt > readAtByContactId.get(c.id)!)
: false,
description: c.note?.content ?? "",
}));
};
});
}
async function getCommunications(auth: AuthContext | null) {