trade_product_media.rs (2051B)
1 use radroots_replica_db_schema::trade_product_media::{ 2 ITradeProductMediaRelation, ITradeProductMediaResolve, 3 }; 4 use radroots_sql_core::error::SqlError; 5 use radroots_sql_core::{SqlExecutor, utils}; 6 use radroots_types::types::{IError, IResultPass}; 7 use serde_json::Value; 8 9 const TABLE_NAME: &str = "trade_product_media"; 10 11 pub fn set( 12 exec: &dyn SqlExecutor, 13 opts: &ITradeProductMediaRelation, 14 ) -> Result<ITradeProductMediaResolve, IError<SqlError>> { 15 let mut query_vals: Vec<Value> = Vec::with_capacity(2); 16 let (trade_product_column, trade_product_value) = opts.trade_product.to_filter_param(); 17 query_vals.push(trade_product_value); 18 let (media_image_column, media_image_value) = opts.media_image.to_filter_param(); 19 query_vals.push(media_image_value); 20 let query = format!( 21 "INSERT INTO {} (tb_tp, tb_mu) VALUES ((SELECT id FROM trade_product WHERE {} = ?), (SELECT id FROM media_image WHERE {} = ?));", 22 TABLE_NAME, trade_product_column, media_image_column 23 ); 24 let params_json = utils::to_params_json(query_vals).expect("serialize bind params"); 25 let _ = exec.exec(&query, ¶ms_json)?; 26 Ok(IResultPass { pass: true }) 27 } 28 29 pub fn unset( 30 exec: &dyn SqlExecutor, 31 opts: &ITradeProductMediaRelation, 32 ) -> Result<ITradeProductMediaResolve, IError<SqlError>> { 33 let mut query_vals: Vec<Value> = Vec::with_capacity(2); 34 let (trade_product_column, trade_product_value) = opts.trade_product.to_filter_param(); 35 query_vals.push(trade_product_value); 36 let (media_image_column, media_image_value) = opts.media_image.to_filter_param(); 37 query_vals.push(media_image_value); 38 let query = format!( 39 "DELETE FROM {} WHERE tb_tp = (SELECT id FROM trade_product WHERE {} = ?) AND tb_mu = (SELECT id FROM media_image WHERE {} = ?);", 40 TABLE_NAME, trade_product_column, media_image_column 41 ); 42 let params_json = utils::to_params_json(query_vals).expect("serialize bind params"); 43 let _ = exec.exec(&query, ¶ms_json)?; 44 Ok(IResultPass { pass: true }) 45 }