backbone_inventory/infrastructure/persistence/
stock_reconciliation_item_repository.rs1use anyhow::Result;
12use rust_decimal::Decimal;
13use sqlx::PgPool;
14use uuid::Uuid;
15
16use crate::domain::entity::StockReconciliationItem;
17
18pub const TABLE_NAME: &str = "inventory.stock_reconciliation_items";
20
21pub struct StockReconciliationItemRepository(
26 backbone_orm::GenericCrudRepository<StockReconciliationItem, backbone_orm::SoftDelete>,
27);
28
29impl std::ops::Deref for StockReconciliationItemRepository {
30 type Target = backbone_orm::GenericCrudRepository<StockReconciliationItem, backbone_orm::SoftDelete>;
31 fn deref(&self) -> &Self::Target { &self.0 }
32}
33
34impl StockReconciliationItemRepository {
35 pub fn new(pool: PgPool) -> Self {
37 Self(backbone_orm::GenericCrudRepository::new(pool, TABLE_NAME))
38 }
39}
40
41pub struct NewReconciliationItemRow {
47 pub id: Uuid,
48 pub reconciliation_id: Uuid,
49 pub item_id: Uuid,
50 pub counted_qty: Decimal,
51 pub counted_rate: Decimal,
52 pub qty_difference: Decimal,
53 pub value_difference: Decimal,
54}
55
56impl StockReconciliationItemRepository {
58 pub async fn insert_item(
62 &self,
63 conn: &mut sqlx::PgConnection,
64 l: &NewReconciliationItemRow,
65 ) -> Result<(), sqlx::Error> {
66 sqlx::query(
67 r#"INSERT INTO inventory.stock_reconciliation_items
68 (id, reconciliation_id, item_id, counted_qty, counted_rate, qty_difference, value_difference)
69 VALUES ($1,$2,$3,$4,$5,$6,$7)"#,
70 )
71 .bind(l.id).bind(l.reconciliation_id).bind(l.item_id).bind(l.counted_qty)
72 .bind(l.counted_rate).bind(l.qty_difference).bind(l.value_difference)
73 .execute(conn)
74 .await?;
75 Ok(())
76 }
77}
78
79backbone_core::impl_crud_repository!(StockReconciliationItemRepository, StockReconciliationItem, soft_delete);