use sqlx::{Postgres, Transaction};
use uuid::Uuid;
use crate::error::Post3Error;
use crate::models::BlockRow;
pub struct BlocksRepository;
impl BlocksRepository {
pub async fn insert_in_tx(
tx: &mut Transaction<'_, Postgres>,
object_id: Uuid,
block_index: i32,
data: &[u8],
) -> Result<(), Post3Error> {
let block_size = data.len() as i32;
sqlx::query(
"INSERT INTO blocks (object_id, block_index, data, block_size) \
VALUES ($1, $2, $3, $4)",
)
.bind(object_id)
.bind(block_index)
.bind(data)
.bind(block_size)
.execute(&mut **tx)
.await?;
Ok(())
}
pub async fn get_all(
db: &sqlx::PgPool,
object_id: Uuid,
) -> Result<Vec<BlockRow>, Post3Error> {
let rows = sqlx::query_as::<_, BlockRow>(
"SELECT * FROM blocks WHERE object_id = $1 ORDER BY block_index ASC",
)
.bind(object_id)
.fetch_all(db)
.await?;
Ok(rows)
}
}