Initial analytics #36
72
analytics/lambda/src/bin/migrate.rs
Normal file
72
analytics/lambda/src/bin/migrate.rs
Normal file
@ -0,0 +1,72 @@
|
||||
use analytics_lambda::{
|
||||
config::{load_from_env, load_from_file},
|
||||
env::Env,
|
||||
};
|
||||
use analytics_model::MIGRATOR;
|
||||
use lambda_runtime::{run, service_fn, Error, LambdaEvent};
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
|
||||
async fn destroy(pool: &PgPool) -> sqlx::Result<()> {
|
||||
sqlx::query("DROP SCHEMA public CASCADE")
|
||||
.execute(pool)
|
||||
.await?;
|
||||
|
||||
sqlx::query("CREATE SCHEMA public").execute(pool).await?;
|
||||
|
||||
sqlx::query("GRANT ALL ON SCHEMA public TO analytics")
|
||||
.execute(pool)
|
||||
.await?;
|
||||
|
||||
sqlx::query("GRANT ALL ON SCHEMA public TO public")
|
||||
.execute(pool)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Options {
|
||||
#[serde(default)]
|
||||
destroy: bool,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Error> {
|
||||
let filter_layer = tracing_subscriber::filter::EnvFilter::builder()
|
||||
.with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
|
||||
.from_env_lossy();
|
||||
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(filter_layer)
|
||||
.without_time()
|
||||
.with_ansi(cfg!(feature = "local"))
|
||||
.init();
|
||||
|
||||
run(service_fn(
|
||||
move |event: LambdaEvent<serde_json::Value>| async move {
|
||||
let options: Options = serde_json::from_value(event.payload).expect("options");
|
||||
|
||||
let config = if cfg!(feature = "local") {
|
||||
load_from_file()
|
||||
} else {
|
||||
load_from_env().await
|
||||
}?;
|
||||
|
||||
let pool = Env::create_pool(&config).await;
|
||||
|
||||
if options.destroy {
|
||||
log::info!("Destroying database");
|
||||
destroy(&pool).await?;
|
||||
}
|
||||
|
||||
log::info!("Running migrations");
|
||||
MIGRATOR.run(&pool).await?;
|
||||
|
||||
Ok::<(), Error>(())
|
||||
},
|
||||
))
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue
Block a user