mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-22 16:02:24 +00:00
ccc4806b9a
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
87 lines
2.8 KiB
Rust
87 lines
2.8 KiB
Rust
use sqlx::PgExecutor;
|
|
|
|
use crate::{error, scripts::ScriptHash};
|
|
|
|
pub use windmill_types::assets::*;
|
|
|
|
pub async fn insert_static_asset_usage<'e>(
|
|
executor: impl PgExecutor<'e>,
|
|
workspace_id: &str,
|
|
asset: &AssetWithAltAccessType,
|
|
usage_path: &str,
|
|
usage_kind: AssetUsageKind,
|
|
) -> error::Result<()> {
|
|
// Convert columns BTreeMap to JSONB format
|
|
let columns_json = asset
|
|
.columns
|
|
.as_ref()
|
|
.map(|cols| serde_json::to_value(cols).unwrap_or(serde_json::Value::Null));
|
|
|
|
sqlx::query!(
|
|
r#"INSERT INTO asset (workspace_id, path, kind, usage_access_type, usage_path, usage_kind, columns)
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7) ON CONFLICT DO NOTHING"#,
|
|
workspace_id,
|
|
asset.path,
|
|
asset.kind as AssetKind,
|
|
(asset.access_type.or(asset.alt_access_type)) as Option<AssetUsageAccessType>,
|
|
usage_path,
|
|
usage_kind as AssetUsageKind,
|
|
columns_json as Option<serde_json::Value>
|
|
)
|
|
.execute(executor)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn clear_static_asset_usage<'e>(
|
|
executor: impl PgExecutor<'e>,
|
|
workspace_id: &str,
|
|
usage_path: &str,
|
|
usage_kind: AssetUsageKind,
|
|
) -> error::Result<()> {
|
|
sqlx::query!(
|
|
r#"DELETE FROM asset WHERE workspace_id = $1 AND usage_path = $2 AND usage_kind = $3"#,
|
|
workspace_id,
|
|
usage_path,
|
|
usage_kind as AssetUsageKind
|
|
)
|
|
.execute(executor)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn clear_static_asset_usage_by_script_hash<'e>(
|
|
executor: impl PgExecutor<'e>,
|
|
workspace_id: &str,
|
|
script_hash: ScriptHash,
|
|
) -> error::Result<()> {
|
|
sqlx::query!(
|
|
"DELETE FROM asset WHERE workspace_id = $1 AND usage_kind = 'script' AND usage_path = (SELECT path FROM script WHERE hash = $2 AND workspace_id = $1)",
|
|
workspace_id,
|
|
script_hash.0
|
|
)
|
|
.execute(executor)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
pub fn asset_kind_from_parser(parser_kind: windmill_parser::asset_parser::AssetKind) -> AssetKind {
|
|
match parser_kind {
|
|
windmill_parser::asset_parser::AssetKind::S3Object => AssetKind::S3Object,
|
|
windmill_parser::asset_parser::AssetKind::Resource => AssetKind::Resource,
|
|
windmill_parser::asset_parser::AssetKind::Ducklake => AssetKind::Ducklake,
|
|
windmill_parser::asset_parser::AssetKind::DataTable => AssetKind::DataTable,
|
|
}
|
|
}
|
|
|
|
pub fn asset_access_type_from_parser(
|
|
parser_kind: windmill_parser::asset_parser::AssetUsageAccessType,
|
|
) -> AssetUsageAccessType {
|
|
match parser_kind {
|
|
windmill_parser::asset_parser::AssetUsageAccessType::R => AssetUsageAccessType::R,
|
|
windmill_parser::asset_parser::AssetUsageAccessType::W => AssetUsageAccessType::W,
|
|
windmill_parser::asset_parser::AssetUsageAccessType::RW => AssetUsageAccessType::RW,
|
|
}
|
|
}
|