[READ ONLY MIRROR] Spark Social AppView Server github.com/sprksocial/server
atproto deno hono lexicon
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

nao gostei de fazer esse commit

+11 -5
+1 -1
services/appview/src/index.ts
··· 62 62 const feedRouter = createFeedRouter(ctx) 63 63 app.route('/', feedRouter) 64 64 65 - const getPostsRouter = createGetPostsRouter(ctx.db) 65 + const getPostsRouter = createGetPostsRouter(ctx) 66 66 app.route('/', getPostsRouter) 67 67 68 68 app.route('/', wellKnownRouter())
+10 -4
services/appview/src/routes/getPosts.ts
··· 7 7 import type * as SoSprkEmbedImages from '../lexicon/types/so/sprk/embed/images.js' 8 8 import type * as SoSprkEmbedVideo from '../lexicon/types/so/sprk/embed/video.js' 9 9 import { Database, PostDocument } from '../db.js' 10 + import { BidirectionalResolver } from '../id-resolver.js' 11 + import { AppContext } from '../index.js' 10 12 11 13 // Transform DB post to PostView format 12 14 async function transformPostToPostView( 13 15 post: PostDocument, 14 16 db: Database, 17 + resolver: BidirectionalResolver, 15 18 ): Promise<SoSprkFeedDefs.PostView> { 16 19 // Get like count 17 20 const likeCount = await db.models.Like.countDocuments({ subject: post.uri }) ··· 61 64 })), 62 65 } satisfies SoSprkEmbedImages.View 63 66 } else if (post.embed?.$type === 'so.sprk.embed.video') { 67 + const did = await resolver.resolveDidToDidDoc(post.authorDid) 68 + const pdsDomain = did.pds.replace('https://', '') 64 69 embed = { 65 70 $type: 'so.sprk.embed.video#view', 66 71 cid: post.cid, 67 - playlist: `https://videocdn.sprk.so/${post.authorDid}/${post.embed.video.ref.$link}`, 72 + playlist: `https://videocdn.sprk.so/${pdsDomain}/${post.authorDid}/${post.embed.video.ref.$link}`, 68 73 thumbnail: `https://cdn.sprk.so/${post.authorDid}/${post.embed.video.ref.$link}/thumbnail`, 69 74 } satisfies SoSprkEmbedVideo.View 70 75 } ··· 100 105 async function getPosts( 101 106 uris: string | string[], 102 107 db: Database, 108 + resolver: BidirectionalResolver, 103 109 ): Promise<SoSprkFeedDefs.PostView[]> { 104 110 if (!uris) { 105 111 return [] ··· 115 121 116 122 // Transform each post to PostView format 117 123 const postViews = await Promise.all( 118 - dbPosts.map((post) => transformPostToPostView(post, db)), 124 + dbPosts.map((post) => transformPostToPostView(post, db, resolver)), 119 125 ) 120 126 121 127 return postViews 122 128 } 123 129 124 - export const createGetPostsRouter = (db: Database) => { 130 + export const createGetPostsRouter = (ctx: AppContext) => { 125 131 const router = new Hono() 126 132 127 133 router.get('/xrpc/so.sprk.feed.getPosts', async (c) => { ··· 131 137 return c.json({ posts: [] } as GetPostsView) 132 138 } 133 139 134 - const posts = await getPosts(uris, db) 140 + const posts = await getPosts(uris, ctx.db, ctx.resolver) 135 141 136 142 return c.json({ posts } as GetPostsView) 137 143 })