// rocie - An enterprise grocery management system // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . use crate::{ app::App, storage::sql::{ barcode::{Barcode, BarcodeId}, unit::{UnitAmount, UnitId}, }, }; use sqlx::query; impl Barcode { pub(crate) async fn from_id(app: &App, id: BarcodeId) -> Result, from_id::Error> { let db_id = id.to_db(); let record = query!( " SELECT product_id, amount, unit FROM barcodes WHERE id = ? ", db_id ) .fetch_optional(&app.db) .await?; if let Some(record) = record { Ok(Some(Self { id, amount: UnitAmount { value: u32::try_from(record.amount).expect("Is strictly positive"), unit: UnitId::from_db(&record.unit), }, })) } else { Ok(None) } } } pub(crate) mod from_id { use actix_web::ResponseError; #[derive(thiserror::Error, Debug)] pub(crate) enum Error { #[error("Failed to execute the sql query")] SqlError(#[from] sqlx::Error), } impl ResponseError for Error {} }