diff --git a/src/api.rs b/src/api.rs index 9c5895e..b53fe08 100644 --- a/src/api.rs +++ b/src/api.rs @@ -5,8 +5,8 @@ use serde::Deserialize; use serde_json::json; use crate::{ - data_mgt::AssetTracker, - logs::{ LogEvent, LogEventType, log_event}, + data_mgt::{Asset, AssetTracker}, + logs::{LogEvent, LogEventType, log_event}, }; #[derive(Deserialize, Debug)] @@ -45,8 +45,8 @@ async fn api_upload( Some(uploader_ip.clone()), ); - log_event(LogEventType::AssetUploaded(asset.clone())); let id = asset.id(); + log_event(LogEventType::AssetUploaded(asset.to_value())); assets.add_asset(asset).await; let response_body = json!({ "link": format!("/bhs/{}", id) }); Ok(HttpResponse::Ok().json(response_body)) @@ -93,8 +93,7 @@ async fn api_stats(assets: web::Data) -> Result) -> Result { + let asset = serde_json::from_value::(asset).unwrap_or_default(); total_uploads += 1; recent_activity.push(ActivityItem { action: "upload".to_string(), @@ -119,6 +119,7 @@ async fn api_stats(assets: web::Data) -> Result { + let asset = serde_json::from_value::(asset).unwrap_or_default(); total_deleted += 1; recent_activity.push(ActivityItem { action: "delete".to_string(), diff --git a/src/data_mgt.rs b/src/data_mgt.rs index 134a076..b80815e 100644 --- a/src/data_mgt.rs +++ b/src/data_mgt.rs @@ -10,7 +10,7 @@ use serde_json::Value; use crate::DATA_STORAGE; use crate::logs::{LogEventType, log_event}; -#[derive(Debug, Serialize, Deserialize, Clone)] +#[derive(Debug, Serialize, Deserialize, Clone, Default)] pub struct Asset { id: String, share_duration: u32, @@ -83,6 +83,10 @@ impl Asset { Ok(bytes) } + pub fn to_value(&self) -> Value { + serde_json::to_value(self).unwrap_or(Value::Null) + } + pub fn save(&self) -> Result { let id = self.id.clone(); let path = format!("{}{}", DATA_STORAGE, self.id); @@ -90,16 +94,8 @@ impl Asset { std::fs::write(&path, self.to_bytes()?)?; Ok(id) } - } -impl From for Value { - fn from(asset: Asset) -> Self { - serde_json::to_value(asset).unwrap() - } -} - - #[derive(Clone)] pub struct AssetTracker { assets: Arc>>, @@ -124,7 +120,7 @@ impl AssetTracker { let removed_assets = assets.extract_if(.., |asset| asset.is_expired()); for asset in removed_assets { println!("[{}] Removing asset: {}", chrono::Local::now().to_rfc3339(), asset.id()); - log_event(LogEventType::AssetDeleted(asset)); + log_event(LogEventType::AssetDeleted(asset.to_value())); } } diff --git a/src/logs.rs b/src/logs.rs index d8ae894..bb1a243 100644 --- a/src/logs.rs +++ b/src/logs.rs @@ -2,10 +2,10 @@ use std::{fs::OpenOptions, io::Write}; use actix_web::HttpRequest; use serde::{Deserialize, Serialize}; +use serde_json::Value; use crate::{LOG_DIR, data_mgt::Asset}; - #[derive(Debug, Serialize, Deserialize)] pub struct LogHttpRequest { pub method: String, @@ -49,8 +49,8 @@ impl From for LogHttpRequest { #[derive(Debug, Serialize, Deserialize)] pub enum LogEventType { - AssetUploaded(Asset), - AssetDeleted(Asset), + AssetUploaded(Value), + AssetDeleted(Value), HttpRequest(LogHttpRequest), }