From 6842d4e5b2b606118ea0a9151b3a461454daa4b0 Mon Sep 17 00:00:00 2001 From: Horhik Date: Thu, 18 Mar 2021 09:05:00 +0300 Subject: [PATCH] add some functions for interacting with message table --- src/db/messages.rs | 62 +++++++++++++++++++++++++++++++--------------- src/db/mod.rs | 48 ++++++++++++++++++++++++++++++++++- src/main.rs | 16 +++++++----- 3 files changed, 99 insertions(+), 27 deletions(-) diff --git a/src/db/messages.rs b/src/db/messages.rs index 505edd5..ddd262a 100644 --- a/src/db/messages.rs +++ b/src/db/messages.rs @@ -2,31 +2,53 @@ use super::types::Message; use rusqlite::{params, Connection, Result}; -pub fn select_message_by_id(id: u64, conn: &Connection) -> Result { - unimplemented!(); +fn ret_mes(row: &rusqlite::Row<'_>) -> Result { + Ok(Message { + id: row.get(0)?, + user_id: row.get(1)?, + date: row.get(2)?, + message: row.get(3)?, + }) } -pub fn select_all_user_message(id: u64, conn: &Connection) -> Result> { - unimplemented!(); +pub fn select_message_by_id(user_id: u32, id: u32, conn: &Connection) -> Result { + let mut selected = conn.prepare("SELECT * FROM messages WHERE id = ?1 AND user_id = ?2")?; + let mut message_iter = selected.query_map(params![id, user_id], |row| ret_mes(row))?; + let message = message_iter.next().unwrap(); + log::info!("Message {:} founded", id); + message } -pub fn select_n_last_messages(user_id: u32, start: u32, count: u32, conn: &Connection) -> Result> { - let mut selected = conn.prepare("SELECT * FROM messages WHERE user_id = ?1 AND id > ?2 LIMIT ?3")?; - let message_iter = selected.query_map(params![user_id, start, count], |row| { - Ok(Message { - id: row.get(0)?, - date: row.get(1)?, - user_id: row.get(2)?, - message: row.get(3)?, - }) - })?; - let mut users: Vec = Vec::new(); +pub fn select_all_user_message(id: u32, conn: &Connection) -> Result> { + let mut selected = + conn.prepare("SELECT * FROM messages WHERE user_id = ?1 ORDER BY date DESC")?; + let message_iter = selected.query_map(params![id], |row| ret_mes(row))?; + let mut messages: Vec = Vec::new(); for message in message_iter { - log::info!("User: {:?}", (&message)); - users.push(message?); + log::info!("Message: {:?}", (&message)); + messages.push(message?); } - log::info!("All users loaded to memory"); - Ok(users) + log::info!("All messages loaded to memory"); + Ok(messages) +} + +pub fn select_n_last_messages( + user_id: u32, + start: u32, + count: u32, + conn: &Connection, +) -> Result> { + let mut selected = conn.prepare( + "SELECT * FROM messages WHERE user_id = ?1 AND id >= ?2 LIMIT ?3 ORDER BY date DESC", + )?; + let message_iter = selected.query_map(params![user_id, start, count], |row| ret_mes(row))?; + let mut messages: Vec = Vec::new(); + for message in message_iter { + log::info!("Message: {:?}", (&message)); + messages.push(message?); + } + log::info!("All messages loaded to memory"); + Ok(messages) } pub fn add_message(message: Message, conn: &Connection) -> Result<()> { @@ -37,7 +59,7 @@ pub fn add_message(message: Message, conn: &Connection) -> Result<()> { date, message ) VALUES (?1, ?2, ?3, ?4)", - params![message.id,message.user_id, message.date, message.message], + params![message.id, message.user_id, message.date, message.message], ) { Ok(_) => log::info!("message {:} added succsessfully!", message.id), Err(e) => { diff --git a/src/db/mod.rs b/src/db/mod.rs index 8427a49..f4b3218 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -22,7 +22,7 @@ fn create_db(conn: &Connection) -> Result<()> { match conn.execute( "CREATE TABLE messages ( id INTEGER PRIMARY KEY, - user_id TEXT NOT NULL, + user_id INTEGER NOT NULL, date datetime NOT NULL, message TEXT NOT NULL )", @@ -46,3 +46,49 @@ pub fn start_db() -> Result { Connection::open(DB_PATH) } } + +// ### A little stupid test ### // + //let conn = db::start_db().unwrap(); + /* + users::add_user(db::types::User{ + id: 9349, + name: "Nick".to_string(), + sign_key: "string".to_string(), + insert_key: fcpv2::types::SSK::parse("SSK@Rgt0qM8D24DltliV2-JE9tYLcrgGAKeDwkz41I3JBPs,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU").unwrap(), + messages_count: 1, + }, &conn); + let time: chrono::DateTime = + chrono::DateTime::parse_from_rfc3339("2021-03-18T04:22:42.501Z").unwrap(); + db::messages::add_message( + db::types::Message { + user_id: 9349, + id: 4, + date: time.naive_utc(), + message: "HI?".to_string(), + }, + &conn, + ) + .unwrap(); + db::messages::add_message( + db::types::Message { + user_id: 9349, + id: 5, + date: time.naive_utc(), + message: "I AM NICK!".to_string(), + }, + &conn, + ) + .unwrap(); + db::messages::add_message( + db::types::Message { + user_id: 9349, + id: 6, + date: time.naive_utc(), + message: "I'LL FIND that".to_string(), + }, + &conn, + ) + .unwrap(); + + let messages = db::messages::select_message_by_id(9349, 3, &conn).unwrap(); + */ diff --git a/src/main.rs b/src/main.rs index 765ab8a..cbf9e09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -48,6 +48,7 @@ use std::{ fn main() -> io::Result<()> { SimpleLogger::new().init().unwrap(); let conn = db::start_db().unwrap(); + /* users::add_user(db::types::User{ id: 9349, name: "Nick".to_string(), @@ -60,9 +61,9 @@ fn main() -> io::Result<()> { db::messages::add_message( db::types::Message { user_id: 9349, - id: 1, + id: 4, date: time.naive_utc(), - message: "hey duude".to_string(), + message: "HI?".to_string(), }, &conn, ) @@ -70,9 +71,9 @@ fn main() -> io::Result<()> { db::messages::add_message( db::types::Message { user_id: 9349, - id: 2, + id: 5, date: time.naive_utc(), - message: "what do you think".to_string(), + message: "I AM NICK!".to_string(), }, &conn, ) @@ -80,14 +81,17 @@ fn main() -> io::Result<()> { db::messages::add_message( db::types::Message { user_id: 9349, - id: 3, + id: 6, date: time.naive_utc(), - message: "about that".to_string(), + message: "I'LL FIND that".to_string(), }, &conn, ) .unwrap(); + let messages = db::messages::select_message_by_id(9349, 3, &conn).unwrap(); + */ + let (to_server_sender, server_receiver): (Sender, Receiver) = mpsc::channel();