use serde::Serialize; use tracing::instrument; use crate::database::Database; use crate::types::http::{ResponseCode, Result}; #[derive(Serialize)] pub struct Like { pub user_id: u64, pub post_id: u64, } impl Like { #[instrument(skip(db))] pub fn add_liked(db: &Database, user_id: u64, post_id: u64) -> Result<()> { let Ok(liked) = db.add_liked(user_id, post_id) else { return Err(ResponseCode::BadRequest.text("Failed to add like status")) }; if !liked { return Err(ResponseCode::InternalServerError.text("Failed to add like status")); } Ok(()) } #[instrument(skip(db))] pub fn remove_liked(db: &Database, user_id: u64, post_id: u64) -> Result<()> { let Ok(liked) = db.remove_liked(user_id, post_id) else { return Err(ResponseCode::BadRequest.text("Failed to remove like status")) }; if !liked { return Err(ResponseCode::InternalServerError.text("Failed to remove like status")); } Ok(()) } #[instrument(skip(db))] pub fn reterieve_all(db: &Database) -> Result> { let Ok(likes) = db.get_all_likes() else { return Err(ResponseCode::InternalServerError.text("Failed to fetch likes")) }; Ok(likes) } }