nostr_profile_relay.rs (2051B)
1 use radroots_replica_db_schema::nostr_profile_relay::{ 2 INostrProfileRelayRelation, INostrProfileRelayResolve, 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 = "nostr_profile_relay"; 10 11 pub fn set( 12 exec: &dyn SqlExecutor, 13 opts: &INostrProfileRelayRelation, 14 ) -> Result<INostrProfileRelayResolve, IError<SqlError>> { 15 let mut query_vals: Vec<Value> = Vec::with_capacity(2); 16 let (nostr_profile_column, nostr_profile_value) = opts.nostr_profile.to_filter_param(); 17 query_vals.push(nostr_profile_value); 18 let (nostr_relay_column, nostr_relay_value) = opts.nostr_relay.to_filter_param(); 19 query_vals.push(nostr_relay_value); 20 let query = format!( 21 "INSERT INTO {} (tb_pr, tb_rl) VALUES ((SELECT id FROM nostr_profile WHERE {} = ?), (SELECT id FROM nostr_relay WHERE {} = ?));", 22 TABLE_NAME, nostr_profile_column, nostr_relay_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: &INostrProfileRelayRelation, 32 ) -> Result<INostrProfileRelayResolve, IError<SqlError>> { 33 let mut query_vals: Vec<Value> = Vec::with_capacity(2); 34 let (nostr_profile_column, nostr_profile_value) = opts.nostr_profile.to_filter_param(); 35 query_vals.push(nostr_profile_value); 36 let (nostr_relay_column, nostr_relay_value) = opts.nostr_relay.to_filter_param(); 37 query_vals.push(nostr_relay_value); 38 let query = format!( 39 "DELETE FROM {} WHERE tb_pr = (SELECT id FROM nostr_profile WHERE {} = ?) AND tb_rl = (SELECT id FROM nostr_relay WHERE {} = ?);", 40 TABLE_NAME, nostr_profile_column, nostr_relay_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 }