nexo/apps/mattermost/app/utils/permalink_sync.ts

67 lines
2.2 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {logWarning} from '@utils/log';
import type PostModel from '@typings/database/models/servers/post';
/**
* Update permalink metadata with fresh post data
*/
export function updatePermalinkMetadata(
referencingPost: PostModel,
referencedPostId: string,
freshPostData: Post,
): PostModel | null {
try {
const metadata = referencingPost.metadata;
if (!metadata?.embeds?.length) {
return null;
}
let updated = false;
const updatedEmbeds = metadata.embeds.map((embed) => {
if (embed.type === 'permalink' && embed.data?.post_id === referencedPostId) {
const currentEditAt = embed.data.post?.edit_at || 0;
const freshEditAt = freshPostData.edit_at || 0;
if (freshEditAt > currentEditAt) {
updated = true;
return {
...embed,
data: {
...embed.data,
post: {
...embed.data.post,
id: freshPostData.id,
message: freshPostData.message,
edit_at: freshPostData.edit_at,
update_at: freshPostData.update_at,
user_id: freshPostData.user_id,
create_at: freshPostData.create_at,
file_ids: freshPostData.file_ids,
metadata: freshPostData.metadata,
},
},
};
}
}
return embed;
});
if (updated) {
const updatedPost = referencingPost.prepareUpdate((post) => {
post.metadata = {
...metadata,
embeds: updatedEmbeds,
};
});
return updatedPost;
}
return null;
} catch (error) {
logWarning('Error updating permalink metadata:', error);
return null;
}
}