diff --git a/lexicons/dev/maelstrom/bramblr/like.json b/lexicons/dev/maelstrom/bramblr/like.json index cc363bf..5b1e0a3 100644 --- a/lexicons/dev/maelstrom/bramblr/like.json +++ b/lexicons/dev/maelstrom/bramblr/like.json @@ -10,6 +10,7 @@ "required": ["subject", "createdAt"], "properties": { "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, + "root": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, "createdAt": { "type": "string", "format": "datetime" } } } diff --git a/src/lexicons/dev/maelstrom/bramblr/like.defs.ts b/src/lexicons/dev/maelstrom/bramblr/like.defs.ts index b23a7c5..8f86230 100644 --- a/src/lexicons/dev/maelstrom/bramblr/like.defs.ts +++ b/src/lexicons/dev/maelstrom/bramblr/like.defs.ts @@ -12,6 +12,7 @@ export { $nsid } type Main = { $type: 'dev.maelstrom.bramblr.like' subject: RepoStrongRef.Main + root?: RepoStrongRef.Main createdAt: l.DatetimeString } @@ -22,6 +23,9 @@ const main = l.record<'tid', Main>( $nsid, l.object({ subject: l.ref((() => RepoStrongRef.main) as any), + root: l.optional( + l.ref((() => RepoStrongRef.main) as any), + ), createdAt: l.string({ format: 'datetime' }), }), ) diff --git a/src/lib/interact.ts b/src/lib/interact.ts index 4f4cbcb..ae840e8 100644 --- a/src/lib/interact.ts +++ b/src/lib/interact.ts @@ -27,6 +27,9 @@ export async function fetchUserPostInteractions(post: Post, did: string) { const reblogResults = await Constellation.call( blue.microcosm.links.getBacklinks, { + // For a more accurate behavior, this should be from the root post + // subject: rootUri + // source: `${dev.maelstrom.bramblr.post.$nsid}:reblog.root.uri`, subject: post.uri, source: `${dev.maelstrom.bramblr.post.$nsid}:reblog.parent.uri`, did: [did as AtprotoDid], @@ -48,7 +51,7 @@ export async function fetchPostNotesCount(post: Post) { blue.microcosm.links.getBacklinksCount, { subject: rootUri, - source: `${dev.maelstrom.bramblr.like.$nsid}:subject.uri`, + source: `${dev.maelstrom.bramblr.like.$nsid}:root.uri`, }, ); @@ -56,7 +59,7 @@ export async function fetchPostNotesCount(post: Post) { blue.microcosm.links.getBacklinksCount, { subject: rootUri, - source: `${dev.maelstrom.bramblr.like.$nsid}:reblog.root.uri`, + source: `${dev.maelstrom.bramblr.post.$nsid}:reblog.root.uri`, }, ); @@ -70,12 +73,15 @@ export async function setLikePost( postInteractions: PostInteractions, client: Client, ) { + const rootRef = post.reblog?.root ?? { uri: post.uri, cid: post.cid } + if (like && postInteractions.liked === undefined) { const response = await client.create(dev.maelstrom.bramblr.like, { subject: { uri: post.uri, cid: post.cid, }, + root: rootRef, createdAt: new Date().toISOString() as any, // TODO: Fix this }); console.log(`Committed change: ${response.commit}`);