···001mod config;
2mod db;
3-mod resolver;
45-/// backfill works as follows (https://docs.bsky.app/docs/advanced-guides/backfill)
6-///
7-/// 1. resolve did -> pds
8-/// 2. stream com.atproto.sync.subscribeRepos to a buffer
9-/// 3. get a car file from com.atproto.sync.getRepo (diff if a rev is stored in database)
10-/// 4. apply car file diff to database (incl rev)
11-/// 5. start playing events from buffer
12-/// a. drop all events from other users
13-/// b. drop all events with a lower rev than current rev
14-/// c. apply event & update rev
15-/// d. (non blocking) get blobs if missing
16-/// e. (non blocking) parse for strongref and store strongrefs
17-/// f. (non blocking) trigger garbage collection of blobs and strongref
18-/// 6. once buffer is empty, parse events live
19#[tokio::main]
20-async fn main() {
021 println!("User: {}", *config::USER);
22- let conn = db::init().await;
23 println!("Database connected and initialized");
2425- let pds = match resolver::resolve(&config::USER).await {
26 Ok(val) => val,
27 Err(err) => panic!("{}", err),
28 };
2930- println!("PDS: {}", pds);
031}