use crate::errors::AppError;
use rusqlite::params;
pub(super) fn find_entity_name_by_id(
conn: &rusqlite::Connection,
namespace: &str,
id: i64,
enforce_namespace: bool,
) -> Result<(String, String), AppError> {
let mut stmt = if enforce_namespace {
conn.prepare_cached(
"SELECT name, namespace FROM entities WHERE id = ?1 AND namespace = ?2",
)?
} else {
conn.prepare_cached("SELECT name, namespace FROM entities WHERE id = ?1")?
};
let row = if enforce_namespace {
stmt.query_row(params![id, namespace], |r| {
Ok((r.get::<_, String>(0)?, r.get::<_, String>(1)?))
})
} else {
stmt.query_row(params![id], |r| {
Ok((r.get::<_, String>(0)?, r.get::<_, String>(1)?))
})
};
match row {
Ok((name, ns_actual)) => Ok((name, ns_actual)),
Err(rusqlite::Error::QueryReturnedNoRows) => Err(AppError::NotFound(
crate::i18n::validation::entity_id_not_found_in_namespace(id, namespace),
)),
Err(e) => Err(AppError::Database(e)),
}
}