2023-12-08 17:02:00 +01:00
|
|
|
use cfg_if::cfg_if;
|
2023-09-08 11:53:08 +02:00
|
|
|
use leptos::*;
|
2023-09-28 21:42:12 +02:00
|
|
|
use validator::Validate;
|
2023-09-22 21:26:13 +02:00
|
|
|
use crate::backend::data::{ApiResponse, Company};
|
2023-09-28 21:42:12 +02:00
|
|
|
use crate::components::data_form::ForValidation;
|
2023-09-08 11:53:08 +02:00
|
|
|
|
2023-12-08 17:02:00 +01:00
|
|
|
cfg_if! { if #[cfg(feature = "ssr")] {
|
|
|
|
|
use sqlx::{query_as, PgPool, query};
|
|
|
|
|
use crate::error::AppError;
|
2024-02-05 15:50:22 +01:00
|
|
|
use crate::backend::get_pool;
|
2023-12-08 17:02:00 +01:00
|
|
|
use log::info;
|
|
|
|
|
|
|
|
|
|
pub async fn check_company(pool: &PgPool) -> Result<(), AppError> {
|
|
|
|
|
let count: (i64,) = query_as("SELECT COUNT(id) FROM company")
|
|
|
|
|
.fetch_one(pool)
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
if count.0 == 0 {
|
|
|
|
|
info!("Creating initial company");
|
|
|
|
|
query("INSERT INTO company(name, street, house_number, zip_code, city) VALUES('Company name', '', '', '', '')")
|
|
|
|
|
.execute(pool).await?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
|
2023-09-08 11:53:08 +02:00
|
|
|
#[server(GetCompany, "/api", "Url", "get_company")]
|
2023-09-22 21:26:13 +02:00
|
|
|
pub async fn get_company() -> Result<ApiResponse<Company>, ServerFnError> {
|
|
|
|
|
use crate::perm_check;
|
|
|
|
|
|
|
|
|
|
perm_check!(is_logged_in);
|
2023-09-08 11:53:08 +02:00
|
|
|
|
2024-02-05 15:50:22 +01:00
|
|
|
let pool = get_pool().await?;
|
2023-09-08 11:53:08 +02:00
|
|
|
|
|
|
|
|
let cmp = sqlx::query_as::<_, Company>("SELECT * FROM company")
|
|
|
|
|
.fetch_one(&pool)
|
|
|
|
|
.await?;
|
|
|
|
|
|
2023-09-22 21:26:13 +02:00
|
|
|
Ok(ApiResponse::Data(cmp))
|
2023-09-08 11:53:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[server(UpdateCompany, "/api", "Url", "update_company")]
|
2023-09-22 21:26:13 +02:00
|
|
|
pub async fn update_company(company: Company) -> Result<ApiResponse<()>, ServerFnError> {
|
|
|
|
|
use crate::perm_check;
|
|
|
|
|
|
|
|
|
|
perm_check!(is_admin);
|
2023-09-08 11:53:08 +02:00
|
|
|
|
2024-02-05 15:50:22 +01:00
|
|
|
let pool = get_pool().await?;
|
2023-09-08 11:53:08 +02:00
|
|
|
|
|
|
|
|
sqlx::query(
|
|
|
|
|
"UPDATE company SET name = $1, street = $2, house_number = $3, zip_code = $4, city = $5 \
|
|
|
|
|
WHERE id = $6")
|
|
|
|
|
.bind(company.name.clone())
|
|
|
|
|
.bind(company.street.clone())
|
|
|
|
|
.bind(company.house_number.clone())
|
|
|
|
|
.bind(company.zip_code.clone())
|
|
|
|
|
.bind(company.city.clone())
|
|
|
|
|
.bind(company.id())
|
|
|
|
|
.execute(&pool)
|
|
|
|
|
.await?;
|
|
|
|
|
|
2023-09-22 21:26:13 +02:00
|
|
|
Ok(ApiResponse::Data(()))
|
2023-09-08 11:53:08 +02:00
|
|
|
}
|
2023-09-28 21:42:12 +02:00
|
|
|
|
|
|
|
|
impl ForValidation for UpdateCompany {
|
|
|
|
|
fn entity(&self) -> &dyn Validate {
|
|
|
|
|
&self.company
|
|
|
|
|
}
|
|
|
|
|
}
|