use dialtone_common::rest::sites::site_data::{
ClientDefaults, DialtoneWebClient, PublicSiteInfo, SiteData, SiteNames,
};
use dialtone_common::rest::sites::theme::Theme;
use sqlx::types::Json;
use sqlx::{Executor, Postgres};
pub async fn create_site(
exec: impl Executor<'_, Database = Postgres>,
host_name: &str,
short_name: String,
long_name: Option<String>,
default_theme: Option<Theme>,
) -> Result<(), sqlx::Error> {
let host_name = host_name.to_lowercase();
let default_theme = match default_theme {
None => Theme::GreenOnBlack,
Some(t) => t,
};
let long_name = match long_name {
None => short_name.clone(),
Some(n) => n,
};
let site_data = SiteData {
public: PublicSiteInfo {
names: SiteNames {
short_name,
long_name,
},
client_defaults: ClientDefaults {
dialtone_webclient: DialtoneWebClient {
default_theme,
..DialtoneWebClient::default()
},
..ClientDefaults::default()
},
..PublicSiteInfo::default()
},
..SiteData::default()
};
sqlx::query(
r#"
INSERT INTO site_info ( host_name, site_data )
VALUES ( $1, $2 )
returning host_name
"#,
)
.bind(host_name)
.bind(Json(site_data))
.fetch_one(exec)
.await?;
Ok(())
}