use sqlx::PgPool;
use uuid::Uuid;
use crate::domain::assumptions::Assumption;
pub struct NewAssumption<'a> {
pub statement: &'a str,
pub status: &'a str,
pub confidence: &'a str,
}
pub async fn create(pool: &PgPool, new: NewAssumption<'_>) -> Result<Assumption, sqlx::Error> {
let id = Uuid::new_v4();
sqlx::query_as::<_, Assumption>(
r#"
INSERT INTO assumptions (id, statement, status, confidence)
VALUES ($1, $2, $3, $4)
RETURNING id, statement, status, confidence, last_validated_at, created_at, updated_at
"#,
)
.bind(id)
.bind(new.statement)
.bind(new.status)
.bind(new.confidence)
.fetch_one(pool)
.await
}
pub async fn get(pool: &PgPool, id: Uuid) -> Result<Option<Assumption>, sqlx::Error> {
sqlx::query_as::<_, Assumption>(
r#"
SELECT id, statement, status, confidence, last_validated_at, created_at, updated_at
FROM assumptions
WHERE id = $1
"#,
)
.bind(id)
.fetch_optional(pool)
.await
}
pub async fn list(pool: &PgPool, limit: i64) -> Result<Vec<Assumption>, sqlx::Error> {
sqlx::query_as::<_, Assumption>(
r#"
SELECT id, statement, status, confidence, last_validated_at, created_at, updated_at
FROM assumptions
ORDER BY created_at DESC
LIMIT $1
"#,
)
.bind(limit)
.fetch_all(pool)
.await
}