created corresponding api functions

This commit is contained in:
lseeger 2024-12-14 15:32:38 +01:00
parent 924b76a6e6
commit c4e83912e1
7 changed files with 47 additions and 3 deletions

View file

@ -0,0 +1,25 @@
use lemmy_api_common::{post::{BlockKeywordForPost}, context::LemmyContext, SuccessResponse};
use lemmy_db_views::structs::LocalUserView;
use activitypub_federation::config::Data;
use actix_web::web::Json;
use lemmy_utils::error::LemmyResult;
use lemmy_db_schema::source::post_keyword_block::{PostKeywordBlock, PostKeywordBlockForm};
pub async fn user_block_keyword_for_posts(
data: Json<BlockKeywordForPost>,
context: Data<LemmyContext>,
local_user_view: LocalUserView
) -> LemmyResult<Json<SuccessResponse>>{
let person_id = local_user_view.person.id;
let post_block_keyword_form = PostKeywordBlockForm {
person_id,
keyword: data.keyword.clone(),
};
if(data.block){
PostKeywordBlock::block_keyword(&mut context.pool(), &post_block_keyword_form).await?;
} else {
PostKeywordBlock::unblock_keyword(&mut context.pool(), &post_block_keyword_form).await?;
}
Ok(Json(SuccessResponse::default()))
}

View file

@ -7,3 +7,4 @@ pub mod lock;
pub mod mark_many_read; pub mod mark_many_read;
pub mod mark_read; pub mod mark_read;
pub mod save; pub mod save;
pub mod block;

View file

@ -366,3 +366,12 @@ pub struct ListPostLikes {
pub struct ListPostLikesResponse { pub struct ListPostLikesResponse {
pub post_likes: Vec<VoteView>, pub post_likes: Vec<VoteView>,
} }
#[derive(Debug,Serialize,Deserialize,Clone)]
#[cfg_attr(feature = "full", derive(TS))]
#[cfg_attr(feature = "full", ts(export))]
pub struct BlockKeywordForPost {
pub keyword: String,
pub block : bool,
}

View file

@ -65,6 +65,7 @@ use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none; use serde_with::skip_serializing_none;
#[cfg(feature = "full")] #[cfg(feature = "full")]
use ts_rs::TS; use ts_rs::TS;
use lemmy_db_schema::source::post_keyword_block::PostKeywordBlock;
#[skip_serializing_none] #[skip_serializing_none]
#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] #[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)]
@ -479,6 +480,7 @@ pub struct MyUserInfo {
pub community_blocks: Vec<Community>, pub community_blocks: Vec<Community>,
pub instance_blocks: Vec<Instance>, pub instance_blocks: Vec<Instance>,
pub person_blocks: Vec<Person>, pub person_blocks: Vec<Person>,
pub post_keyword_blocks: Vec<PostKeywordBlock>,
pub discussion_languages: Vec<LanguageId>, pub discussion_languages: Vec<LanguageId>,
} }

View file

@ -6,6 +6,7 @@ use lemmy_db_schema::source::{
instance_block::InstanceBlock, instance_block::InstanceBlock,
person_block::PersonBlock, person_block::PersonBlock,
}; };
use lemmy_db_schema::source::post_keyword_block::PostKeywordBlock;
use lemmy_db_views::structs::LocalUserView; use lemmy_db_views::structs::LocalUserView;
use lemmy_db_views_actor::structs::{CommunityFollowerView, CommunityModeratorView}; use lemmy_db_views_actor::structs::{CommunityFollowerView, CommunityModeratorView};
use lemmy_utils::error::{LemmyErrorExt, LemmyErrorType, LemmyResult}; use lemmy_utils::error::{LemmyErrorExt, LemmyErrorType, LemmyResult};
@ -22,12 +23,13 @@ pub async fn get_my_user(
let local_user_id = local_user_view.local_user.id; let local_user_id = local_user_view.local_user.id;
let pool = &mut context.pool(); let pool = &mut context.pool();
let (follows, community_blocks, instance_blocks, person_blocks, moderates, discussion_languages) = let (follows, community_blocks, instance_blocks, person_blocks, post_keyword_blocks, moderates, discussion_languages) =
lemmy_db_schema::try_join_with_pool!(pool => ( lemmy_db_schema::try_join_with_pool!(pool => (
|pool| CommunityFollowerView::for_person(pool, person_id), |pool| CommunityFollowerView::for_person(pool, person_id),
|pool| CommunityBlock::for_person(pool, person_id), |pool| CommunityBlock::for_person(pool, person_id),
|pool| InstanceBlock::for_person(pool, person_id), |pool| InstanceBlock::for_person(pool, person_id),
|pool| PersonBlock::for_person(pool, person_id), |pool| PersonBlock::for_person(pool, person_id),
|pool| PostKeywordBlock::for_person(pool, person_id),
|pool| CommunityModeratorView::for_person(pool, person_id, Some(&local_user_view.local_user)), |pool| CommunityModeratorView::for_person(pool, person_id, Some(&local_user_view.local_user)),
|pool| LocalUserLanguage::read(pool, local_user_id) |pool| LocalUserLanguage::read(pool, local_user_id)
)) ))
@ -40,6 +42,7 @@ pub async fn get_my_user(
community_blocks, community_blocks,
instance_blocks, instance_blocks,
person_blocks, person_blocks,
post_keyword_blocks,
discussion_languages, discussion_languages,
})) }))
} }

View file

@ -89,6 +89,7 @@ use lemmy_api::{
}, },
sitemap::get_sitemap, sitemap::get_sitemap,
}; };
use lemmy_api::post::block::user_block_keyword_for_posts;
use lemmy_api_crud::{ use lemmy_api_crud::{
comment::{ comment::{
create::create_comment, create::create_comment,
@ -223,7 +224,8 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.route("/report", post().to(create_post_report)) .route("/report", post().to(create_post_report))
.route("/report/resolve", put().to(resolve_post_report)) .route("/report/resolve", put().to(resolve_post_report))
.route("/report/list", get().to(list_post_reports)) .route("/report/list", get().to(list_post_reports))
.route("/site_metadata", get().to(get_link_metadata)), .route("/site_metadata", get().to(get_link_metadata))
.route("/block",post().to(user_block_keyword_for_posts)),
) )
// Comment // Comment
.service( .service(

View file

@ -98,6 +98,7 @@ use lemmy_api::{
}, },
sitemap::get_sitemap, sitemap::get_sitemap,
}; };
use lemmy_api::post::block::user_block_keyword_for_posts;
use lemmy_api_crud::{ use lemmy_api_crud::{
comment::{ comment::{
create::create_comment, create::create_comment,
@ -320,7 +321,8 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
scope("/block") scope("/block")
.route("/person", post().to(user_block_person)) .route("/person", post().to(user_block_person))
.route("/community", post().to(user_block_community)) .route("/community", post().to(user_block_community))
.route("/instance", post().to(user_block_instance)), .route("/instance", post().to(user_block_instance))
.route("/post",get().to(user_block_keyword_for_posts)),
), ),
) )
// User actions // User actions