···11+use sqlx::{Pool, Postgres};
22+13mod config;
24mod db;
33-mod resolver;
55+mod utils;
4655-/// backfill works as follows (https://docs.bsky.app/docs/advanced-guides/backfill)
66-///
77-/// 1. resolve did -> pds
88-/// 2. stream com.atproto.sync.subscribeRepos to a buffer
99-/// 3. get a car file from com.atproto.sync.getRepo (diff if a rev is stored in database)
1010-/// 4. apply car file diff to database (incl rev)
1111-/// 5. start playing events from buffer
1212-/// a. drop all events from other users
1313-/// b. drop all events with a lower rev than current rev
1414-/// c. apply event & update rev
1515-/// d. (non blocking) get blobs if missing
1616-/// e. (non blocking) parse for strongref and store strongrefs
1717-/// f. (non blocking) trigger garbage collection of blobs and strongref
1818-/// 6. once buffer is empty, parse events live
197#[tokio::main]
2020-async fn main() {
88+async fn main() -> Result<(), ()> {
99+ env_logger::init();
2110 println!("User: {}", *config::USER);
2222- let conn = db::init().await;
1111+ let conn: Pool<Postgres> = db::init().await;
2312 println!("Database connected and initialized");
24132525- let pds = match resolver::resolve(&config::USER).await {
1414+ let pds = match utils::resolver::resolve(&config::USER).await {
2615 Ok(val) => val,
2716 Err(err) => panic!("{}", err),
2817 };
29183030- println!("PDS: {}", pds);
1919+ println!("Completed sucessfully!");
2020+ Ok(())
3121}