pricing.rs (1906B)
1 //! Product pricing models 2 //! 3 //! This module defines pricing and discount data models. 4 5 use bigdecimal::BigDecimal; 6 use chrono::{DateTime, Utc}; 7 use serde::{Deserialize, Serialize}; 8 use sqlx::FromRow; 9 use uuid::Uuid; 10 11 /// Product pricing entity 12 /// 13 /// Represents current and historical pricing for a product. 14 #[derive(Debug, Clone, Serialize, Deserialize, FromRow)] 15 pub struct ProductPricing { 16 pub id: i32, 17 pub uuid: Uuid, 18 19 // Product reference 20 pub product_uuid: Uuid, 21 pub product_asin: Option<String>, 22 23 // Pricing 24 pub final_price: BigDecimal, 25 pub initial_price: Option<BigDecimal>, 26 pub currency: Option<String>, 27 28 // Discount 29 pub discount_percentage: Option<BigDecimal>, 30 pub discount_amount: Option<BigDecimal>, 31 32 // Validity 33 pub price_valid_from: Option<DateTime<Utc>>, 34 pub price_valid_until: Option<DateTime<Utc>>, 35 36 // Status 37 pub is_active: bool, 38 39 // Timestamps 40 pub created_at: DateTime<Utc>, 41 pub updated_at: DateTime<Utc>, 42 } 43 44 /// Request body for creating/updating pricing 45 #[derive(Debug, Deserialize)] 46 pub struct UpdatePricingRequest { 47 pub final_price: BigDecimal, 48 pub initial_price: Option<BigDecimal>, 49 pub currency: Option<String>, 50 pub price_valid_from: Option<DateTime<Utc>>, 51 pub price_valid_until: Option<DateTime<Utc>>, 52 } 53 54 /// Query parameters for pricing listing 55 #[derive(Debug, Deserialize)] 56 pub struct PricingQueryParams { 57 // Pagination 58 pub page: Option<i32>, 59 pub page_size: Option<i32>, 60 61 // Filters 62 pub product_uuid: Option<Uuid>, 63 pub min_price: Option<BigDecimal>, 64 pub max_price: Option<BigDecimal>, 65 pub has_discount: Option<bool>, 66 } 67 68 /// Paginated pricing response 69 #[derive(Debug, Serialize)] 70 pub struct PricingResponse { 71 pub pricing: Vec<ProductPricing>, 72 pub total_count: i64, 73 pub page: i32, 74 pub page_size: i32, 75 pub total_pages: i32, 76 }