diff --git a/keyserver/src/deleters/farcaster-channel-tag-deleters.js b/keyserver/src/deleters/farcaster-channel-tag-deleters.js --- a/keyserver/src/deleters/farcaster-channel-tag-deleters.js +++ b/keyserver/src/deleters/farcaster-channel-tag-deleters.js @@ -4,11 +4,14 @@ import type { DeleteFarcasterChannelTagRequest } from 'lib/types/community-types.js'; import { threadPermissions } from 'lib/types/thread-permission-types.js'; import { ServerError } from 'lib/utils/errors.js'; +import { ignorePromiseRejections } from 'lib/utils/promises.js'; import { dbQuery, SQL } from '../database/database.js'; +import { fetchServerThreadInfos } from '../fetchers/thread-fetchers.js'; import { checkThreadPermission } from '../fetchers/thread-permission-fetchers.js'; import { deleteBlob } from '../services/blob.js'; import type { Viewer } from '../session/viewer'; +import { updateThread } from '../updaters/thread-updaters.js'; async function deleteFarcasterChannelTag( viewer: Viewer, @@ -39,7 +42,6 @@ blob_holder = NULL WHERE id = ${request.commCommunityID} AND farcaster_channel_id = ${request.farcasterChannelID}; - COMMIT; SELECT @currentBlobHolder AS blobHolder; @@ -61,6 +63,25 @@ true, ); } + + // In the background, we fetch information about the community thread. If the + // thread's avatar type is `farcaster`, we remove it. + ignorePromiseRejections( + (async () => { + const serverThreadInfos = await fetchServerThreadInfos({ + threadID: request.commCommunityID, + }); + const { avatar } = serverThreadInfos.threadInfos[request.commCommunityID]; + if (avatar?.type !== 'farcaster') { + return; + } + + await updateThread(viewer, { + threadID: request.commCommunityID, + changes: { avatar: { type: 'remove' } }, + }); + })(), + ); } export { deleteFarcasterChannelTag };