exercises

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }