Merge branch 'fix-repost-counter' into 'main'

fix: repost counter works when undo repost

See merge request soapbox-pub/ditto!151
This commit is contained in:
Alex Gleason 2024-04-11 14:45:13 +00:00
commit 7c14a2d5ef
1 changed files with 28 additions and 4 deletions

View File

@ -26,10 +26,10 @@ async function updateStats(event: NostrEvent) {
}
const statDiffs = getStatsDiff(event, prev);
const pubkeyDiffs = statDiffs.filter(([table]) => table === 'author_stats') as AuthorStatDiff[];
const eventDiffs = statDiffs.filter(([table]) => table === 'event_stats') as EventStatDiff[];
const pubkeyDiffs = (await statDiffs).filter(([table]) => table === 'author_stats') as AuthorStatDiff[];
const eventDiffs = (await statDiffs).filter(([table]) => table === 'event_stats') as EventStatDiff[];
if (statDiffs.length) {
if ((await statDiffs).length) {
debug(JSON.stringify({ id: event.id, pubkey: event.pubkey, kind: event.kind, tags: event.tags, statDiffs }));
}
@ -42,7 +42,7 @@ async function updateStats(event: NostrEvent) {
}
/** Calculate stats changes ahead of time so we can build an efficient query. */
function getStatsDiff(event: NostrEvent, prev: NostrEvent | undefined): StatDiff[] {
async function getStatsDiff(event: NostrEvent, prev: NostrEvent | undefined): Promise<StatDiff[]> {
const statDiffs: StatDiff[] = [];
const firstTaggedId = event.tags.find(([name]) => name === 'e')?.[1];
@ -58,6 +58,30 @@ function getStatsDiff(event: NostrEvent, prev: NostrEvent | undefined): StatDiff
case 3:
statDiffs.push(...getFollowDiff(event, prev));
break;
case 5: {
if (!firstTaggedId) break;
const [repostedEvent] = await eventsDB.query(
[{ kinds: [6], ids: [firstTaggedId], authors: [event.pubkey] }],
{ limit: 1 },
);
// Check if the event being deleted is of kind 6,
// if it is then proceed, else just break
if (!repostedEvent) break;
const eventBeingRepostedId = repostedEvent.tags.find(([name]) => name === 'e')?.[1];
const eventBeingRepostedPubkey = repostedEvent.tags.find(([name]) => name === 'p')?.[1];
if (!eventBeingRepostedId || !eventBeingRepostedPubkey) break;
const [eventBeingReposted] = await eventsDB.query(
[{ kinds: [1], ids: [eventBeingRepostedId], authors: [eventBeingRepostedPubkey] }],
{ limit: 1 },
);
if (!eventBeingReposted) break;
statDiffs.push(['event_stats', eventBeingRepostedId, 'reposts_count', -1]);
break;
}
case 6:
if (firstTaggedId) {
statDiffs.push(['event_stats', firstTaggedId, 'reposts_count', 1]);