mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-12-23 11:21:32 +00:00
created new table post_keyword_block related to a person and corresponding functions in diesel
This commit is contained in:
parent
8d91543a13
commit
924b76a6e6
7 changed files with 113 additions and 0 deletions
|
@ -36,3 +36,4 @@ pub mod registration_application;
|
||||||
pub mod secret;
|
pub mod secret;
|
||||||
pub mod site;
|
pub mod site;
|
||||||
pub mod tagline;
|
pub mod tagline;
|
||||||
|
mod post_keyword_block;
|
||||||
|
|
53
crates/db_schema/src/impls/post_keyword_block.rs
Normal file
53
crates/db_schema/src/impls/post_keyword_block.rs
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
use diesel::{delete, insert_into};
|
||||||
|
use diesel::result::Error;
|
||||||
|
use diesel::prelude::*;
|
||||||
|
use diesel::QueryDsl;
|
||||||
|
use diesel_async::RunQueryDsl;
|
||||||
|
use crate::{
|
||||||
|
newtypes::{PersonId},
|
||||||
|
schema::post_keyword_block,
|
||||||
|
source::{
|
||||||
|
post_keyword_block::{PostKeywordBlock, PostKeywordBlockForm},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
use crate::traits::Crud;
|
||||||
|
use crate::utils::{get_conn, DbPool};
|
||||||
|
|
||||||
|
impl PostKeywordBlock {
|
||||||
|
|
||||||
|
|
||||||
|
pub async fn for_person(
|
||||||
|
pool: &mut DbPool<'_>,
|
||||||
|
person_id: PersonId,
|
||||||
|
) -> Result<Vec<PostKeywordBlock>, Error> {
|
||||||
|
let conn = &mut get_conn(pool).await?;
|
||||||
|
post_keyword_block::table
|
||||||
|
.filter(post_keyword_block::person_id.eq(person_id))
|
||||||
|
.load::<PostKeywordBlock>(conn)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn block_keyword(
|
||||||
|
pool: &mut DbPool<'_>,
|
||||||
|
post_keyword_block_form: &PostKeywordBlockForm
|
||||||
|
) -> Result<Self, Error> {
|
||||||
|
let conn = &mut get_conn(pool).await?;
|
||||||
|
insert_into(post_keyword_block::table)
|
||||||
|
.values(post_keyword_block_form)
|
||||||
|
.get_result::<Self>(conn)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn unblock_keyword(
|
||||||
|
pool: &mut DbPool<'_>,
|
||||||
|
post_keyword_block_form: &PostKeywordBlockForm,
|
||||||
|
) -> QueryResult<usize> {
|
||||||
|
let conn = &mut get_conn(pool).await?;
|
||||||
|
delete(post_keyword_block::table)
|
||||||
|
.filter(post_keyword_block::person_id.eq(post_keyword_block_form.person_id))
|
||||||
|
.filter(post_keyword_block::keyword.eq(&post_keyword_block_form.keyword))
|
||||||
|
.execute(conn)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -121,6 +121,12 @@ pub struct LanguageId(pub i32);
|
||||||
/// The comment reply id.
|
/// The comment reply id.
|
||||||
pub struct CommentReplyId(i32);
|
pub struct CommentReplyId(i32);
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
|
||||||
|
#[cfg_attr(feature = "full", derive(DieselNewType, TS))]
|
||||||
|
#[cfg_attr(feature = "full", ts(export))]
|
||||||
|
/// The comment reply id.
|
||||||
|
pub struct PostKeywordBlockId(i32);
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default, Ord, PartialOrd,
|
Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default, Ord, PartialOrd,
|
||||||
)]
|
)]
|
||||||
|
|
|
@ -826,6 +826,15 @@ diesel::table! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
diesel::table! {
|
||||||
|
post_keyword_block (id) {
|
||||||
|
id -> Int4,
|
||||||
|
#[max_length = 50]
|
||||||
|
keyword -> Varchar,
|
||||||
|
person_id -> Int4,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
diesel::table! {
|
diesel::table! {
|
||||||
private_message (id) {
|
private_message (id) {
|
||||||
id -> Int4,
|
id -> Int4,
|
||||||
|
|
|
@ -41,6 +41,7 @@ pub mod registration_application;
|
||||||
pub mod secret;
|
pub mod secret;
|
||||||
pub mod site;
|
pub mod site;
|
||||||
pub mod tagline;
|
pub mod tagline;
|
||||||
|
pub mod post_keyword_block;
|
||||||
|
|
||||||
/// Default value for columns like [community::Community.inbox_url] which are marked as serde(skip).
|
/// Default value for columns like [community::Community.inbox_url] which are marked as serde(skip).
|
||||||
///
|
///
|
||||||
|
|
31
crates/db_schema/src/source/post_keyword_block.rs
Normal file
31
crates/db_schema/src/source/post_keyword_block.rs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
use crate::newtypes::{PersonId, PostKeywordBlockId};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
#[cfg(feature = "full")]
|
||||||
|
use crate::schema::post_keyword_block;
|
||||||
|
#[cfg(feature = "full")]
|
||||||
|
use ts_rs::TS;
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "full",
|
||||||
|
derive(Queryable, Selectable, Associations, Identifiable,TS)
|
||||||
|
)]
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "full",
|
||||||
|
diesel(belongs_to(crate::source::person::Person))
|
||||||
|
)]
|
||||||
|
#[cfg_attr(feature = "full", diesel(table_name = post_keyword_block))]
|
||||||
|
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
|
||||||
|
#[cfg_attr(feature = "full", ts(export))]
|
||||||
|
pub struct PostKeywordBlock {
|
||||||
|
pub id : PostKeywordBlockId,
|
||||||
|
pub keyword: String,
|
||||||
|
pub person_id: PersonId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
|
||||||
|
#[cfg_attr(feature = "full", diesel(table_name = post_keyword_block))]
|
||||||
|
pub struct PostKeywordBlockForm {
|
||||||
|
pub person_id: PersonId,
|
||||||
|
pub keyword: String,
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ use lemmy_db_schema::{
|
||||||
post,
|
post,
|
||||||
post_actions,
|
post_actions,
|
||||||
post_aggregates,
|
post_aggregates,
|
||||||
|
post_keyword_block
|
||||||
},
|
},
|
||||||
source::{
|
source::{
|
||||||
community::{CommunityFollower, CommunityFollowerState},
|
community::{CommunityFollower, CommunityFollowerState},
|
||||||
|
@ -85,6 +86,10 @@ fn queries<'a>() -> Queries<
|
||||||
.inner_join(community::table)
|
.inner_join(community::table)
|
||||||
.inner_join(post::table)
|
.inner_join(post::table)
|
||||||
.left_join(image_details::table.on(post::thumbnail_url.eq(image_details::link.nullable())))
|
.left_join(image_details::table.on(post::thumbnail_url.eq(image_details::link.nullable())))
|
||||||
|
.left_join(post_keyword_block::table.on(
|
||||||
|
post_keyword_block::person_id.eq(my_person_id.unwrap_or(PersonId(-1))),
|
||||||
|
),
|
||||||
|
)
|
||||||
.left_join(actions(
|
.left_join(actions(
|
||||||
community_actions::table,
|
community_actions::table,
|
||||||
my_person_id,
|
my_person_id,
|
||||||
|
@ -115,6 +120,7 @@ fn queries<'a>() -> Queries<
|
||||||
person::all_columns,
|
person::all_columns,
|
||||||
community::all_columns,
|
community::all_columns,
|
||||||
image_details::all_columns.nullable(),
|
image_details::all_columns.nullable(),
|
||||||
|
post_keyword_block::keyword,
|
||||||
creator_community_actions
|
creator_community_actions
|
||||||
.field(community_actions::received_ban)
|
.field(community_actions::received_ban)
|
||||||
.nullable()
|
.nullable()
|
||||||
|
@ -208,6 +214,8 @@ fn queries<'a>() -> Queries<
|
||||||
options.local_user.person_id(),
|
options.local_user.person_id(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
query.filter
|
||||||
|
|
||||||
// hide posts from deleted communities
|
// hide posts from deleted communities
|
||||||
query = query.filter(community::deleted.eq(false));
|
query = query.filter(community::deleted.eq(false));
|
||||||
|
|
||||||
|
@ -351,6 +359,10 @@ fn queries<'a>() -> Queries<
|
||||||
query = query.filter(community_actions::blocked.is_null());
|
query = query.filter(community_actions::blocked.is_null());
|
||||||
query = query.filter(instance_actions::blocked.is_null());
|
query = query.filter(instance_actions::blocked.is_null());
|
||||||
query = query.filter(person_actions::blocked.is_null());
|
query = query.filter(person_actions::blocked.is_null());
|
||||||
|
query = query.filter(
|
||||||
|
not(post::name.like(any(post_keyword_block::keyword)))
|
||||||
|
.and(not(post::body.like(any(post_keyword_block::keyword))))
|
||||||
|
.and(not(post::url.like(any(post_keyword_block::keyword)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
let (limit, offset) = limit_and_offset(options.page, options.limit)?;
|
let (limit, offset) = limit_and_offset(options.page, options.limit)?;
|
||||||
|
|
Loading…
Reference in a new issue