forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1use std::{
2 env,
3 sync::{Arc, Mutex},
4};
5
6use anyhow::Error;
7use duckdb::Connection;
8use sqlx::postgres::PgPoolOptions;
9
10use crate::core::create_tables;
11
12pub mod cmd;
13pub mod core;
14pub mod handlers;
15pub mod subscriber;
16pub mod types;
17pub mod xata;
18
19pub async fn serve() -> Result<(), Error> {
20 let conn = Connection::open("./rocksky-analytics.ddb")?;
21
22 create_tables(&conn).await?;
23
24 let conn = Arc::new(Mutex::new(conn));
25 cmd::serve::serve(conn).await?;
26
27 Ok(())
28}
29
30pub async fn sync() -> Result<(), Error> {
31 let pool = PgPoolOptions::new()
32 .max_connections(5)
33 .connect(&env::var("XATA_POSTGRES_URL")?)
34 .await?;
35
36 let conn = Connection::open("./rocksky-analytics.ddb")?;
37 create_tables(&conn).await?;
38
39 let conn = Arc::new(Mutex::new(conn));
40
41 cmd::sync::sync(conn, &pool).await?;
42
43 Ok(())
44}