rustploy 0.1.15

Rustploy PaaS daemon — lightweight self-hosted deployment platform
//! Tabela chave-valor de configurações do daemon editáveis pela UI (ACME,
//! registry, limpeza do Docker).

use anyhow::Result;

use super::Db;

pub async fn get(db: &Db, key: &str) -> Result<Option<String>> {
    let row = sqlx::query_scalar::<_, String>("SELECT value FROM daemon_settings WHERE key = ?")
        .bind(key)
        .fetch_optional(db)
        .await?;
    Ok(row)
}

pub async fn set(db: &Db, key: &str, value: &str) -> Result<()> {
    sqlx::query(
        "INSERT INTO daemon_settings (key, value) VALUES (?, ?)
         ON CONFLICT(key) DO UPDATE SET value = excluded.value",
    )
    .bind(key)
    .bind(value)
    .execute(db)
    .await?;
    Ok(())
}

pub async fn delete(db: &Db, key: &str) -> Result<()> {
    sqlx::query("DELETE FROM daemon_settings WHERE key = ?")
        .bind(key)
        .execute(db)
        .await?;
    Ok(())
}

/// DEPRECADA: a base pública passou a ser derivada de `[api] domain`/`port`
/// (ver `AppState::public_base_url`), então esta chave não é mais lida nem
/// escrita. Linhas remanescentes em bancos de instalações antigas são inertes.
#[allow(dead_code)]
pub const KEY_WEBHOOK_BASE_URL: &str = "webhook_base_url";
pub const KEY_ACME_EMAIL: &str = "acme_email";
pub const KEY_REGISTRY_DOMAIN: &str = "registry_domain";
/// JSON de `shared::DockerCleanupConfig` — ver `crate::features::maintenance`.
pub const KEY_DOCKER_CLEANUP_CONFIG: &str = "docker_cleanup_config";
/// JSON de `shared::DockerCleanupLastRun`, ausente até a primeira execução.
pub const KEY_DOCKER_CLEANUP_LAST_RUN: &str = "docker_cleanup_last_run";
/// JSON de `BuildCachePrune`: quando o cache de build foi limpo pela última vez
/// e com qual corte de idade.
pub const KEY_BUILD_CACHE_LAST_PRUNE: &str = "build_cache_last_prune";
/// Prefixo das chaves `job_warm:<job_id>` (JSON de `jobs::warm::WarmRecord`).
pub const KEY_JOB_WARM_PREFIX: &str = "job_warm:";
/// Prefixo das chaves `service_warm:<service_id>` (JSON de
/// `maintenance::service_warm::WarmRecord`).
pub const KEY_SERVICE_WARM_PREFIX: &str = "service_warm:";