backbone-inventory 0.17.2

Inventory: stock ledger of record (SLE) + moving-average valuation; emits COGS/asset AccountingPost (Delivery/Receipt -> GL)
Documentation
//! DTOs (Data Transfer Objects)
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides DTOs for the presentation layer,
//! with OpenAPI schema support.

pub mod picking_batch_dto;
pub mod delivery_note_dto;
pub mod delivery_note_item_dto;
pub mod inventory_company_setting_dto;
pub mod landed_cost_dto;
pub mod landed_cost_line_dto;
pub mod landed_cost_adjustment_line_dto;
pub mod location_dto;
pub mod stock_move_dto;
pub mod stock_move_line_dto;
pub mod operation_type_dto;
pub mod transfer_dto;
pub mod route_dto;
pub mod route_rule_dto;
pub mod reordering_rule_dto;
pub mod purchase_receipt_dto;
pub mod purchase_receipt_item_dto;
pub mod quant_dto;
pub mod scrap_dto;
pub mod scrap_reason_tag_dto;
pub mod stock_entry_dto;
pub mod stock_entry_item_dto;
pub mod stock_ledger_entry_dto;
pub mod bin_dto;
pub mod stock_reconciliation_dto;
pub mod stock_reconciliation_item_dto;
pub mod package_type_dto;
pub mod storage_category_dto;
pub mod storage_category_capacity_dto;
pub mod putaway_rule_dto;
pub mod lot_dto;
pub mod package_dto;
pub mod warehouse_dto;
pub mod stock_item_dto;

// Re-exports
pub use picking_batch_dto::{
    CreatePickingBatchDto,
    UpdatePickingBatchDto,
    PatchPickingBatchDto,
    PickingBatchResponseDto,
    PickingBatchListResponseDto,
    PickingBatchSummaryDto,
};
pub use delivery_note_dto::{
    CreateDeliveryNoteDto,
    UpdateDeliveryNoteDto,
    PatchDeliveryNoteDto,
    DeliveryNoteResponseDto,
    DeliveryNoteListResponseDto,
    DeliveryNoteSummaryDto,
};
pub use delivery_note_item_dto::{
    CreateDeliveryNoteItemDto,
    UpdateDeliveryNoteItemDto,
    PatchDeliveryNoteItemDto,
    DeliveryNoteItemResponseDto,
    DeliveryNoteItemListResponseDto,
    DeliveryNoteItemSummaryDto,
};
pub use inventory_company_setting_dto::{
    CreateInventoryCompanySettingDto,
    UpdateInventoryCompanySettingDto,
    PatchInventoryCompanySettingDto,
    InventoryCompanySettingResponseDto,
    InventoryCompanySettingListResponseDto,
    InventoryCompanySettingSummaryDto,
};
pub use landed_cost_dto::{
    CreateLandedCostDto,
    UpdateLandedCostDto,
    PatchLandedCostDto,
    LandedCostResponseDto,
    LandedCostListResponseDto,
    LandedCostSummaryDto,
};
pub use landed_cost_line_dto::{
    CreateLandedCostLineDto,
    UpdateLandedCostLineDto,
    PatchLandedCostLineDto,
    LandedCostLineResponseDto,
    LandedCostLineListResponseDto,
    LandedCostLineSummaryDto,
};
pub use landed_cost_adjustment_line_dto::{
    CreateLandedCostAdjustmentLineDto,
    UpdateLandedCostAdjustmentLineDto,
    PatchLandedCostAdjustmentLineDto,
    LandedCostAdjustmentLineResponseDto,
    LandedCostAdjustmentLineListResponseDto,
    LandedCostAdjustmentLineSummaryDto,
};
pub use location_dto::{
    CreateLocationDto,
    UpdateLocationDto,
    PatchLocationDto,
    LocationResponseDto,
    LocationListResponseDto,
    LocationSummaryDto,
};
pub use stock_move_dto::{
    CreateStockMoveDto,
    UpdateStockMoveDto,
    PatchStockMoveDto,
    StockMoveResponseDto,
    StockMoveListResponseDto,
    StockMoveSummaryDto,
};
pub use stock_move_line_dto::{
    CreateStockMoveLineDto,
    UpdateStockMoveLineDto,
    PatchStockMoveLineDto,
    StockMoveLineResponseDto,
    StockMoveLineListResponseDto,
    StockMoveLineSummaryDto,
};
pub use operation_type_dto::{
    CreateOperationTypeDto,
    UpdateOperationTypeDto,
    PatchOperationTypeDto,
    OperationTypeResponseDto,
    OperationTypeListResponseDto,
    OperationTypeSummaryDto,
};
pub use transfer_dto::{
    CreateTransferDto,
    UpdateTransferDto,
    PatchTransferDto,
    TransferResponseDto,
    TransferListResponseDto,
    TransferSummaryDto,
};
pub use route_dto::{
    CreateRouteDto,
    UpdateRouteDto,
    PatchRouteDto,
    RouteResponseDto,
    RouteListResponseDto,
    RouteSummaryDto,
};
pub use route_rule_dto::{
    CreateRouteRuleDto,
    UpdateRouteRuleDto,
    PatchRouteRuleDto,
    RouteRuleResponseDto,
    RouteRuleListResponseDto,
    RouteRuleSummaryDto,
};
pub use reordering_rule_dto::{
    CreateReorderingRuleDto,
    UpdateReorderingRuleDto,
    PatchReorderingRuleDto,
    ReorderingRuleResponseDto,
    ReorderingRuleListResponseDto,
    ReorderingRuleSummaryDto,
};
pub use purchase_receipt_dto::{
    CreatePurchaseReceiptDto,
    UpdatePurchaseReceiptDto,
    PatchPurchaseReceiptDto,
    PurchaseReceiptResponseDto,
    PurchaseReceiptListResponseDto,
    PurchaseReceiptSummaryDto,
};
pub use purchase_receipt_item_dto::{
    CreatePurchaseReceiptItemDto,
    UpdatePurchaseReceiptItemDto,
    PatchPurchaseReceiptItemDto,
    PurchaseReceiptItemResponseDto,
    PurchaseReceiptItemListResponseDto,
    PurchaseReceiptItemSummaryDto,
};
pub use quant_dto::{
    CreateQuantDto,
    UpdateQuantDto,
    PatchQuantDto,
    QuantResponseDto,
    QuantListResponseDto,
    QuantSummaryDto,
};
pub use scrap_dto::{
    CreateScrapDto,
    UpdateScrapDto,
    PatchScrapDto,
    ScrapResponseDto,
    ScrapListResponseDto,
    ScrapSummaryDto,
};
pub use scrap_reason_tag_dto::{
    CreateScrapReasonTagDto,
    UpdateScrapReasonTagDto,
    PatchScrapReasonTagDto,
    ScrapReasonTagResponseDto,
    ScrapReasonTagListResponseDto,
    ScrapReasonTagSummaryDto,
};
pub use stock_entry_dto::{
    CreateStockEntryDto,
    UpdateStockEntryDto,
    PatchStockEntryDto,
    StockEntryResponseDto,
    StockEntryListResponseDto,
    StockEntrySummaryDto,
};
pub use stock_entry_item_dto::{
    CreateStockEntryItemDto,
    UpdateStockEntryItemDto,
    PatchStockEntryItemDto,
    StockEntryItemResponseDto,
    StockEntryItemListResponseDto,
    StockEntryItemSummaryDto,
};
pub use stock_ledger_entry_dto::{
    CreateStockLedgerEntryDto,
    UpdateStockLedgerEntryDto,
    PatchStockLedgerEntryDto,
    StockLedgerEntryResponseDto,
    StockLedgerEntryListResponseDto,
    StockLedgerEntrySummaryDto,
};
pub use bin_dto::{
    CreateBinDto,
    UpdateBinDto,
    PatchBinDto,
    BinResponseDto,
    BinListResponseDto,
    BinSummaryDto,
};
pub use stock_reconciliation_dto::{
    CreateStockReconciliationDto,
    UpdateStockReconciliationDto,
    PatchStockReconciliationDto,
    StockReconciliationResponseDto,
    StockReconciliationListResponseDto,
    StockReconciliationSummaryDto,
};
pub use stock_reconciliation_item_dto::{
    CreateStockReconciliationItemDto,
    UpdateStockReconciliationItemDto,
    PatchStockReconciliationItemDto,
    StockReconciliationItemResponseDto,
    StockReconciliationItemListResponseDto,
    StockReconciliationItemSummaryDto,
};
pub use package_type_dto::{
    CreatePackageTypeDto,
    UpdatePackageTypeDto,
    PatchPackageTypeDto,
    PackageTypeResponseDto,
    PackageTypeListResponseDto,
    PackageTypeSummaryDto,
};
pub use storage_category_dto::{
    CreateStorageCategoryDto,
    UpdateStorageCategoryDto,
    PatchStorageCategoryDto,
    StorageCategoryResponseDto,
    StorageCategoryListResponseDto,
    StorageCategorySummaryDto,
};
pub use storage_category_capacity_dto::{
    CreateStorageCategoryCapacityDto,
    UpdateStorageCategoryCapacityDto,
    PatchStorageCategoryCapacityDto,
    StorageCategoryCapacityResponseDto,
    StorageCategoryCapacityListResponseDto,
    StorageCategoryCapacitySummaryDto,
};
pub use putaway_rule_dto::{
    CreatePutawayRuleDto,
    UpdatePutawayRuleDto,
    PatchPutawayRuleDto,
    PutawayRuleResponseDto,
    PutawayRuleListResponseDto,
    PutawayRuleSummaryDto,
};
pub use lot_dto::{
    CreateLotDto,
    UpdateLotDto,
    PatchLotDto,
    LotResponseDto,
    LotListResponseDto,
    LotSummaryDto,
};
pub use package_dto::{
    CreatePackageDto,
    UpdatePackageDto,
    PatchPackageDto,
    PackageResponseDto,
    PackageListResponseDto,
    PackageSummaryDto,
};
pub use warehouse_dto::{
    CreateWarehouseDto,
    UpdateWarehouseDto,
    PatchWarehouseDto,
    WarehouseResponseDto,
    WarehouseListResponseDto,
    WarehouseSummaryDto,
};
pub use stock_item_dto::{
    CreateStockItemDto,
    UpdateStockItemDto,
    PatchStockItemDto,
    StockItemResponseDto,
    StockItemListResponseDto,
    StockItemSummaryDto,
};

// Common pagination types
use serde::Serialize;

#[cfg(feature = "openapi")]
#[cfg(feature = "openapi")]
use utoipa::ToSchema;

/// Pagination parameters for list requests
#[derive(Debug, Clone, Default, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct PaginationParams {
    /// Page number (1-indexed)
    #[serde(default = "default_page")]
    pub page: u32,
    /// Items per page
    #[serde(default = "default_per_page")]
    pub per_page: u32,
    /// Field to sort by
    pub sort_by: Option<String>,
    /// Sort order (asc/desc)
    pub sort_order: Option<String>,
}

fn default_page() -> u32 { 1 }
fn default_per_page() -> u32 { 20 }

/// API response wrapper
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ApiResponse<T> {
    pub success: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<T>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub error: Option<ApiError>,
}

#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct ApiError {
    pub code: String,
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub details: Option<serde_json::Value>,
}

impl<T> ApiResponse<T> {
    pub fn ok(data: T) -> Self {
        Self { success: true, data: Some(data), error: None }
    }

    pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
        Self {
            success: false,
            data: None,
            error: Some(ApiError {
                code: code.into(),
                message: message.into(),
                details: None,
            }),
        }
    }
}