use serde::Serialize; use tracing::instrument; use crate::database; use crate::types::http::{ResponseCode, Result}; #[derive(Serialize)] pub struct Like { pub user_id: u64, pub post_id: u64 } impl Like { #[instrument()] pub fn add_liked(user_id: u64, post_id: u64) -> Result<()> { let Ok(liked) = database::likes::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()] pub fn remove_liked(user_id: u64, post_id: u64) -> Result<()> { let Ok(liked) = database::likes::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()] pub fn reterieve_all() -> Result> { let Ok(likes) = database::likes::get_all_likes() else { return Err(ResponseCode::InternalServerError.text("Failed to fetch likes")) }; Ok(likes) } }