summaryrefslogtreecommitdiff
path: root/src/database/likes.rs
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2023-02-15 00:01:44 -0500
committerTyler Murphy <tylermurphy534@gmail.com>2023-02-15 00:01:44 -0500
commitaec4fdecc10be35cde5dc42308960f10bc452187 (patch)
tree67233229c6839c78d1bd3db0147467da30843f44 /src/database/likes.rs
parentbug fixes (diff)
downloadxssbook-aec4fdecc10be35cde5dc42308960f10bc452187.tar.gz
xssbook-aec4fdecc10be35cde5dc42308960f10bc452187.tar.bz2
xssbook-aec4fdecc10be35cde5dc42308960f10bc452187.zip
make database calls 1 conn
Diffstat (limited to 'src/database/likes.rs')
-rw-r--r--src/database/likes.rs136
1 files changed, 71 insertions, 65 deletions
diff --git a/src/database/likes.rs b/src/database/likes.rs
index f6a130b..b313c97 100644
--- a/src/database/likes.rs
+++ b/src/database/likes.rs
@@ -1,75 +1,81 @@
use rusqlite::OptionalExtension;
use tracing::instrument;
-use crate::{database, types::like::Like};
+use crate::types::like::Like;
-pub fn init() -> Result<(), rusqlite::Error> {
- let sql = "
- CREATE TABLE IF NOT EXISTS likes (
- user_id INTEGER NOT NULL,
- post_id INTEGER NOT NULL,
- FOREIGN KEY(user_id) REFERENCES users(user_id),
- FOREIGN KEY(post_id) REFERENCES posts(post_id),
- PRIMARY KEY (user_id, post_id)
- );
- ";
- let conn = database::connect()?;
- conn.execute(sql, ())?;
- Ok(())
-}
+use super::Database;
-#[instrument()]
-pub fn get_like_count(post_id: u64) -> Result<Option<u64>, rusqlite::Error> {
- tracing::trace!("Retrieving like count");
- let conn = database::connect()?;
- let mut stmt = conn.prepare("SELECT COUNT(post_id) FROM likes WHERE post_id = ?")?;
- let row = stmt
- .query_row([post_id], |row| {
- let row = row.get(0)?;
- Ok(row)
- })
- .optional()?;
- Ok(row)
-}
+impl Database {
+ pub fn init_likes(&self) -> Result<(), rusqlite::Error> {
+ let sql = "
+ CREATE TABLE IF NOT EXISTS likes (
+ user_id INTEGER NOT NULL,
+ post_id INTEGER NOT NULL,
+ FOREIGN KEY(user_id) REFERENCES users(user_id),
+ FOREIGN KEY(post_id) REFERENCES posts(post_id),
+ PRIMARY KEY (user_id, post_id)
+ );
+ ";
+ self.0.execute(sql, ())?;
+ Ok(())
+ }
-#[instrument()]
-pub fn get_liked(user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
- tracing::trace!("Retrieving if liked");
- let conn = database::connect()?;
- let mut stmt = conn.prepare("SELECT * FROM likes WHERE user_id = ? AND post_id = ?")?;
- let liked = stmt.query_row([user_id, post_id], |_| Ok(())).optional()?;
- Ok(liked.is_some())
-}
+ #[instrument(skip(self))]
+ pub fn get_like_count(&self, post_id: u64) -> Result<Option<u64>, rusqlite::Error> {
+ tracing::trace!("Retrieving like count");
+ let mut stmt = self
+ .0
+ .prepare("SELECT COUNT(post_id) FROM likes WHERE post_id = ?")?;
+ let row = stmt
+ .query_row([post_id], |row| {
+ let row = row.get(0)?;
+ Ok(row)
+ })
+ .optional()?;
+ Ok(row)
+ }
-#[instrument()]
-pub fn add_liked(user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
- tracing::trace!("Adding like");
- let conn = database::connect()?;
- let mut stmt = conn.prepare("INSERT OR REPLACE INTO likes (user_id, post_id) VALUES (?,?)")?;
- let changes = stmt.execute([user_id, post_id])?;
- Ok(changes == 1)
-}
+ #[instrument(skip(self))]
+ pub fn get_liked(&self, user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
+ tracing::trace!("Retrieving if liked");
+ let mut stmt = self
+ .0
+ .prepare("SELECT * FROM likes WHERE user_id = ? AND post_id = ?")?;
+ let liked = stmt.query_row([user_id, post_id], |_| Ok(())).optional()?;
+ Ok(liked.is_some())
+ }
-#[instrument()]
-pub fn remove_liked(user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
- tracing::trace!("Removing like");
- let conn = database::connect()?;
- let mut stmt = conn.prepare("DELETE FROM likes WHERE user_id = ? AND post_id = ?;")?;
- let changes = stmt.execute((user_id, post_id))?;
- Ok(changes == 1)
-}
+ #[instrument(skip(self))]
+ pub fn add_liked(&self, user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
+ tracing::trace!("Adding like");
+ let mut stmt = self
+ .0
+ .prepare("INSERT OR REPLACE INTO likes (user_id, post_id) VALUES (?,?)")?;
+ let changes = stmt.execute([user_id, post_id])?;
+ Ok(changes == 1)
+ }
+
+ #[instrument(skip(self))]
+ pub fn remove_liked(&self, user_id: u64, post_id: u64) -> Result<bool, rusqlite::Error> {
+ tracing::trace!("Removing like");
+ let mut stmt = self
+ .0
+ .prepare("DELETE FROM likes WHERE user_id = ? AND post_id = ?;")?;
+ let changes = stmt.execute((user_id, post_id))?;
+ Ok(changes == 1)
+ }
-#[instrument()]
-pub fn get_all_likes() -> Result<Vec<Like>, rusqlite::Error> {
- tracing::trace!("Retrieving comments page");
- let conn = database::connect()?;
- let mut stmt = conn.prepare("SELECT * FROM likes")?;
- let row = stmt.query_map([], |row| {
- let like = Like {
- user_id: row.get(0)?,
- post_id: row.get(1)?,
- };
- Ok(like)
- })?;
- Ok(row.into_iter().flatten().collect())
+ #[instrument(skip(self))]
+ pub fn get_all_likes(&self) -> Result<Vec<Like>, rusqlite::Error> {
+ tracing::trace!("Retrieving comments page");
+ let mut stmt = self.0.prepare("SELECT * FROM likes")?;
+ let row = stmt.query_map([], |row| {
+ let like = Like {
+ user_id: row.get(0)?,
+ post_id: row.get(1)?,
+ };
+ Ok(like)
+ })?;
+ Ok(row.into_iter().flatten().collect())
+ }
}