first commit

This commit is contained in:
gustavooth
2026-07-26 21:12:38 -03:00
commit e6badb0d79
133 changed files with 38368 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
use uuid::Uuid;
use crate::db::models::{ContactEvidence, NewContactEvidence};
use crate::db::{Db, db_error};
use crate::error::AppResult;
pub async fn upsert(db: &Db, input: &NewContactEvidence) -> AppResult<ContactEvidence> {
let client = db.client().await?;
let row = client
.query_one(
"WITH inserted AS (
INSERT INTO contact_evidence
(contact_id, origin_id, page_url, evidence_text, evidence_hash, confidence)
VALUES ($1,$2,$3,$4,$5,$6)
ON CONFLICT DO NOTHING
RETURNING *
)
SELECT * FROM inserted
UNION ALL
SELECT * FROM contact_evidence
WHERE contact_id = $1 AND origin_id = $2 AND page_url = $3
AND COALESCE(evidence_hash, '') = COALESCE($5, '')
LIMIT 1",
&[
&input.contact_id,
&input.origin_id,
&input.page_url,
&input.evidence_text,
&input.evidence_hash,
&input.confidence,
],
)
.await
.map_err(db_error)?;
ContactEvidence::from_row(&row).map_err(db_error)
}
pub async fn list_by_contact(db: &Db, contact_id: Uuid) -> AppResult<Vec<ContactEvidence>> {
let client = db.client().await?;
let rows = client
.query(
"SELECT * FROM contact_evidence WHERE contact_id = $1 ORDER BY collected_at DESC, id DESC",
&[&contact_id],
)
.await
.map_err(db_error)?;
rows.iter()
.map(ContactEvidence::from_row)
.collect::<Result<Vec<_>, _>>()
.map_err(db_error)
}
pub async fn delete(db: &Db, id: Uuid) -> AppResult<bool> {
let client = db.client().await?;
Ok(client
.execute("DELETE FROM contact_evidence WHERE id = $1", &[&id])
.await
.map_err(db_error)?
> 0)
}