From b84971c004e2e3f80f4e89314b8616ecb42eed8d Mon Sep 17 00:00:00 2001 From: nutcas3 Date: Tue, 14 Apr 2026 15:49:58 +0300 Subject: [PATCH] feat: Add data models for charging engine API endpoints - Add AppState struct to hold shared ChargingEngine instance - Add CreditCheckRequest and CreditCheckResponse for credit validation - Add DeductRequest for byte usage deduction - Add AddCreditRequest for credit top-up operations - Add BalanceResponse for IP address balance queries - Add HealthResponse with default implementation for health check endpoint - Derive Serialize/Deserialize traits for API request/response types --- apps/charging-engine/src/models.rs | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 apps/charging-engine/src/models.rs diff --git a/apps/charging-engine/src/models.rs b/apps/charging-engine/src/models.rs new file mode 100644 index 0000000..5850436 --- /dev/null +++ b/apps/charging-engine/src/models.rs @@ -0,0 +1,48 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone)] +pub struct AppState { + pub charging_engine: std::sync::Arc, +} + +#[derive(Deserialize)] +pub struct CreditCheckRequest { + pub bytes_requested: u64, +} + +#[derive(Serialize)] +pub struct CreditCheckResponse { + pub allowed: bool, + pub remaining_bytes: i64, +} + +#[derive(Deserialize)] +pub struct DeductRequest { + pub bytes_used: u64, +} + +#[derive(Deserialize)] +pub struct AddCreditRequest { + pub bytes_to_add: u64, +} + +#[derive(Serialize)] +pub struct BalanceResponse { + pub ip: String, + pub balance_bytes: i64, +} + +#[derive(Serialize)] +pub struct HealthResponse { + pub status: String, + pub timestamp: chrono::DateTime, +} + +impl Default for HealthResponse { + fn default() -> Self { + Self { + status: "OK".to_string(), + timestamp: chrono::Utc::now(), + } + } +}