Parakeet is a Rust-based Bluesky AppServer aiming to implement most of the functionality required to support the Bluesky client
appview atproto bluesky rust appserver
66
fork

Configure Feed

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

fix(consumer): deal with xmax in upserts properly

Mia a8a97641 aedf752e

+9 -9
+6 -6
consumer/src/db/record.rs
··· 68 68 .and_then(|v| serde_json::to_value(v).ok()); 69 69 let avatar = blob_ref(rec.avatar); 70 70 71 - conn.execute( 71 + conn.query_one( 72 72 include_str!("sql/feedgen_upsert.sql"), 73 73 &[ 74 74 &at_uri, ··· 84 84 ], 85 85 ) 86 86 .await 87 - .map(|v| v == 0) 87 + .map(|r| r.get::<_, i32>(0) == 0) 88 88 } 89 89 90 90 pub async fn feedgen_delete<C: GenericClient>(conn: &mut C, at_uri: &str) -> PgExecResult { ··· 189 189 .and_then(|v| serde_json::to_value(v).ok()); 190 190 let avatar = blob_ref(rec.avatar); 191 191 192 - conn.execute( 192 + conn.query_one( 193 193 include_str!("sql/list_upsert.sql"), 194 194 &[ 195 195 &at_uri, ··· 204 204 ], 205 205 ) 206 206 .await 207 - .map(|v| v == 0) 207 + .map(|r| r.get::<_, i32>(0) == 0) 208 208 } 209 209 210 210 pub async fn list_delete<C: GenericClient>(conn: &mut C, at_uri: &str) -> PgExecResult { ··· 571 571 .feeds 572 572 .map(|v| v.into_iter().map(|item| item.uri).collect::<Vec<_>>()); 573 573 574 - conn.execute( 574 + conn.query_one( 575 575 include_str!("sql/starterpack_upsert.sql"), 576 576 &[ 577 577 &at_uri, ··· 587 587 ], 588 588 ) 589 589 .await 590 - .map(|v| v == 0) 590 + .map(|r| r.get::<_, i32>(0) == 0) 591 591 } 592 592 593 593 pub async fn starter_pack_delete<C: GenericClient>(conn: &mut C, at_uri: &str) -> PgExecResult {
+1 -1
consumer/src/db/sql/feedgen_upsert.sql
··· 9 9 description_facets=EXCLUDED.description_facets, 10 10 avatar_cid=EXCLUDED.avatar_cid, 11 11 indexed_at=NOW() 12 - RETURNING XMAX 12 + RETURNING XMAX::text::int
+1 -1
consumer/src/db/sql/list_upsert.sql
··· 7 7 description_facets=EXCLUDED.description_facets, 8 8 avatar_cid=EXCLUDED.avatar_cid, 9 9 indexed_at=NOW() 10 - RETURNING XMAX 10 + RETURNING XMAX::text::int
+1 -1
consumer/src/db/sql/starterpack_upsert.sql
··· 8 8 list=EXCLUDED.list, 9 9 feeds=EXCLUDED.feeds, 10 10 indexed_at=NOW() 11 - RETURNING XMAX 11 + RETURNING XMAX::text::int