aboutsummaryrefslogtreecommitdiff
path: root/src/database.rs
diff options
context:
space:
mode:
authorcurly <curlybryce@protonmail.com>2023-02-15 12:33:12 -0700
committercurly <curlybryce@protonmail.com>2023-02-15 12:33:12 -0700
commitc47bd9c8e48de50610bfb107252d8f55af211ce6 (patch)
tree5ff85076940434a12c044495d41dd8d92da8b053 /src/database.rs
parent3caac1927468112ff4bf883aaa271b0205362b40 (diff)
downloadrocket_test-c47bd9c8e48de50610bfb107252d8f55af211ce6.tar.gz
rocket_test-c47bd9c8e48de50610bfb107252d8f55af211ce6.tar.bz2
rocket_test-c47bd9c8e48de50610bfb107252d8f55af211ce6.zip
keep deleted message content in db, cleanup
Diffstat (limited to 'src/database.rs')
-rw-r--r--src/database.rs73
1 files changed, 31 insertions, 42 deletions
diff --git a/src/database.rs b/src/database.rs
index 89cc213..0faa0d3 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -13,26 +13,8 @@ impl Database {
let statement = self.db.prepare(query).unwrap().into_iter().bind((":id", id as i64)).unwrap();
for row in statement.map(|row| row.unwrap()) {
- let msg = row.read::<&str, _>("message");
- let reply_to = row.read::<Option<i64>, _>("reply_to");
- let reply_to = match reply_to {
- Some(n) => Some(n.into()),
- None => None
- };
-
- let date = row.read::<i64, _>("date").into();
- let deleted = row.read::<i64, _>("deleted");
- let deleted = if deleted < 1 {
- false
- } else {
- true
- };
-
- let sender = row.read::<i64, _>("sender").into();
- let id = row.read::<i64, _>("id").into();
-
+ let msg = self.message_from_row(row);
- let msg = Message::construct(String::from(msg), sender, id, reply_to, date, deleted);
return Some(msg)
}
@@ -65,6 +47,34 @@ impl Database {
}
}
+ fn message_from_row(&self, row: sqlite::Row) -> Message{
+ let reply_to = row.read::<Option<i64>, _>("reply_to");
+ let reply_to = match reply_to {
+ Some(n) => Some(n.into()),
+ None => None
+ };
+
+ let date = row.read::<i64, _>("date").into();
+ let deleted = row.read::<i64, _>("deleted");
+ let deleted = if deleted < 1 {
+ false
+ } else {
+ true
+ };
+
+ let msg = if deleted {
+ ""
+ } else {
+ row.read::<&str, _>("message")
+ };
+
+ let sender = row.read::<i64, _>("sender").into();
+ let id = row.read::<i64, _>("id").into();
+
+
+ Message::construct(String::from(msg), sender, id, reply_to, date, deleted)
+ }
+
pub fn get_message_list(&self, id_start: UID, id_end: UID) -> Vec<Message> {
let query = "SELECT * FROM messages WHERE id BETWEEN :id_start AND :id_end";
let statement = self.db.prepare(query).unwrap().into_iter().bind::<&[(_, sqlite::Value)]>(&[
@@ -75,27 +85,7 @@ impl Database {
let mut message_id_vec: Vec<Message> = vec![];
for row in statement.map(|row| row.unwrap()) {
- let msg = row.read::<&str, _>("message");
- let reply_to = row.read::<Option<i64>, _>("reply_to");
- let reply_to = match reply_to {
- Some(n) => Some(n.into()),
- None => None
- };
-
- let date = row.read::<i64, _>("date").into();
- let deleted = row.read::<i64, _>("deleted");
- let deleted = if deleted < 1 {
- false
- } else {
- true
- };
-
- let sender = row.read::<i64, _>("sender").into();
- let id = row.read::<i64, _>("id").into();
-
-
- let msg = Message::construct(String::from(msg), sender, id, reply_to, date, deleted);
-
+ let msg = self.message_from_row(row);
message_id_vec.push(msg);
}
@@ -151,10 +141,9 @@ impl Database {
}
pub fn delete_message(&mut self, id: UID) -> Result<&'static str, &'static str> {
- let query = "UPDATE messages SET message=:message, deleted=:deleted WHERE id IS :id AND deleted IS false";
+ let query = "UPDATE messages SET deleted=:deleted WHERE id IS :id AND deleted IS false";
let statement = self.db.prepare(query).unwrap().into_iter()
.bind::<&[(_, sqlite::Value)]>(&[
- (":message", "".into()),
(":deleted", 1.into()),
(":id", id.into()),
]);