mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-12-01 16:51:21 +00:00
Changing recipient to target, adding unfollow to block action.
This commit is contained in:
parent
22c5d81e86
commit
7e45d9a7ac
12 changed files with 47 additions and 32 deletions
|
@ -16,7 +16,7 @@
|
||||||
"eslint": "^7.30.0",
|
"eslint": "^7.30.0",
|
||||||
"eslint-plugin-jane": "^9.0.3",
|
"eslint-plugin-jane": "^9.0.3",
|
||||||
"jest": "^27.0.6",
|
"jest": "^27.0.6",
|
||||||
"lemmy-js-client": "0.11.4-rc.8",
|
"lemmy-js-client": "0.11.4-rc.9",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"ts-jest": "^27.0.3",
|
"ts-jest": "^27.0.3",
|
||||||
|
|
|
@ -3076,10 +3076,10 @@ language-tags@^1.0.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
language-subtag-registry "~0.3.2"
|
language-subtag-registry "~0.3.2"
|
||||||
|
|
||||||
lemmy-js-client@0.11.4-rc.8:
|
lemmy-js-client@0.11.4-rc.9:
|
||||||
version "0.11.4-rc.8"
|
version "0.11.4-rc.9"
|
||||||
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.4-rc.8.tgz#c333fbd5e46fe76b0d029f3effb9e539ad00160f"
|
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.4-rc.9.tgz#f7b3c73691e4c1600daf3840d22d9cfbddc5f363"
|
||||||
integrity sha512-cDOlaX0nUtXFwJoz0SLxbkHXeFb6Uu4jomTBk6drpmJbvmWY4WuUtnZPiIUIsE00U/3KbpgsKc2Qm7XL9bb6Ng==
|
integrity sha512-zP8JxWzQU+yuyE8cMG0GzR8aR3lJ++G5zzbynsXwDevzAZXhOm0ObNNtJiA3Q5msStFVKVYa3GwZxBv4XiYshw==
|
||||||
|
|
||||||
leven@^3.1.0:
|
leven@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
|
|
|
@ -133,6 +133,23 @@ impl Perform for BlockCommunity {
|
||||||
if blocking(context.pool(), block).await?.is_err() {
|
if blocking(context.pool(), block).await?.is_err() {
|
||||||
return Err(ApiError::err("community_block_already_exists").into());
|
return Err(ApiError::err("community_block_already_exists").into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Also, unfollow the community, and send a federated unfollow
|
||||||
|
let community_follower_form = CommunityFollowerForm {
|
||||||
|
community_id: data.community_id,
|
||||||
|
person_id,
|
||||||
|
pending: false,
|
||||||
|
};
|
||||||
|
blocking(context.pool(), move |conn: &'_ _| {
|
||||||
|
CommunityFollower::unfollow(conn, &community_follower_form)
|
||||||
|
})
|
||||||
|
.await?
|
||||||
|
.ok();
|
||||||
|
let community = blocking(context.pool(), move |conn| {
|
||||||
|
Community::read(conn, community_id)
|
||||||
|
})
|
||||||
|
.await??;
|
||||||
|
UndoFollowCommunity::send(&local_user_view.person, &community, context).await?;
|
||||||
} else {
|
} else {
|
||||||
let unblock = move |conn: &'_ _| CommunityBlock::unblock(conn, &community_block_form);
|
let unblock = move |conn: &'_ _| CommunityBlock::unblock(conn, &community_block_form);
|
||||||
if blocking(context.pool(), unblock).await?.is_err() {
|
if blocking(context.pool(), unblock).await?.is_err() {
|
||||||
|
@ -140,8 +157,6 @@ impl Perform for BlockCommunity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO does any federated stuff need to be done here?
|
|
||||||
|
|
||||||
let community_view = blocking(context.pool(), move |conn| {
|
let community_view = blocking(context.pool(), move |conn| {
|
||||||
CommunityView::read(conn, community_id, Some(person_id))
|
CommunityView::read(conn, community_id, Some(person_id))
|
||||||
})
|
})
|
||||||
|
|
|
@ -483,17 +483,17 @@ impl Perform for BlockPerson {
|
||||||
let data: &BlockPerson = self;
|
let data: &BlockPerson = self;
|
||||||
let local_user_view = get_local_user_view_from_jwt(&data.auth, context.pool()).await?;
|
let local_user_view = get_local_user_view_from_jwt(&data.auth, context.pool()).await?;
|
||||||
|
|
||||||
let recipient_id = data.person_id;
|
let target_id = data.person_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
||||||
// Don't let a person block themselves
|
// Don't let a person block themselves
|
||||||
if recipient_id == person_id {
|
if target_id == person_id {
|
||||||
return Err(ApiError::err("cant_block_yourself").into());
|
return Err(ApiError::err("cant_block_yourself").into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let person_block_form = PersonBlockForm {
|
let person_block_form = PersonBlockForm {
|
||||||
person_id,
|
person_id,
|
||||||
recipient_id,
|
target_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
if data.block {
|
if data.block {
|
||||||
|
@ -511,7 +511,7 @@ impl Perform for BlockPerson {
|
||||||
// TODO does any federated stuff need to be done here?
|
// TODO does any federated stuff need to be done here?
|
||||||
|
|
||||||
let person_view = blocking(context.pool(), move |conn| {
|
let person_view = blocking(context.pool(), move |conn| {
|
||||||
PersonViewSafe::read(conn, recipient_id)
|
PersonViewSafe::read(conn, target_id)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ pub trait PersonBlock_ {
|
||||||
fn read(
|
fn read(
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
person_id: PersonId,
|
person_id: PersonId,
|
||||||
recipient_id: PersonId,
|
target_id: PersonId,
|
||||||
) -> Result<PersonBlock, Error>;
|
) -> Result<PersonBlock, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ impl PersonBlock_ for PersonBlock {
|
||||||
use lemmy_db_schema::schema::person_block::dsl::*;
|
use lemmy_db_schema::schema::person_block::dsl::*;
|
||||||
person_block
|
person_block
|
||||||
.filter(person_id.eq(for_person_id))
|
.filter(person_id.eq(for_person_id))
|
||||||
.filter(recipient_id.eq(for_recipient_id))
|
.filter(target_id.eq(for_recipient_id))
|
||||||
.first::<Self>(conn)
|
.first::<Self>(conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ impl Blockable for PersonBlock {
|
||||||
use lemmy_db_schema::schema::person_block::dsl::*;
|
use lemmy_db_schema::schema::person_block::dsl::*;
|
||||||
insert_into(person_block)
|
insert_into(person_block)
|
||||||
.values(person_block_form)
|
.values(person_block_form)
|
||||||
.on_conflict((person_id, recipient_id))
|
.on_conflict((person_id, target_id))
|
||||||
.do_update()
|
.do_update()
|
||||||
.set(person_block_form)
|
.set(person_block_form)
|
||||||
.get_result::<Self>(conn)
|
.get_result::<Self>(conn)
|
||||||
|
@ -43,7 +43,7 @@ impl Blockable for PersonBlock {
|
||||||
diesel::delete(
|
diesel::delete(
|
||||||
person_block
|
person_block
|
||||||
.filter(person_id.eq(person_block_form.person_id))
|
.filter(person_id.eq(person_block_form.person_id))
|
||||||
.filter(recipient_id.eq(person_block_form.recipient_id)),
|
.filter(target_id.eq(person_block_form.target_id)),
|
||||||
)
|
)
|
||||||
.execute(conn)
|
.execute(conn)
|
||||||
}
|
}
|
||||||
|
|
|
@ -469,7 +469,7 @@ table! {
|
||||||
person_block (id) {
|
person_block (id) {
|
||||||
id -> Int4,
|
id -> Int4,
|
||||||
person_id -> Int4,
|
person_id -> Int4,
|
||||||
recipient_id -> Int4,
|
target_id -> Int4,
|
||||||
published -> Timestamp,
|
published -> Timestamp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -561,7 +561,7 @@ joinable!(post_report -> person_alias_2 (resolver_id));
|
||||||
joinable!(comment_report -> person_alias_2 (resolver_id));
|
joinable!(comment_report -> person_alias_2 (resolver_id));
|
||||||
|
|
||||||
joinable!(person_block -> person (person_id));
|
joinable!(person_block -> person (person_id));
|
||||||
joinable!(person_block -> person_alias_1 (recipient_id));
|
joinable!(person_block -> person_alias_1 (target_id));
|
||||||
|
|
||||||
joinable!(comment -> person (creator_id));
|
joinable!(comment -> person (creator_id));
|
||||||
joinable!(comment -> post (post_id));
|
joinable!(comment -> post (post_id));
|
||||||
|
|
|
@ -6,7 +6,7 @@ use serde::Serialize;
|
||||||
pub struct PersonBlock {
|
pub struct PersonBlock {
|
||||||
pub id: PersonBlockId,
|
pub id: PersonBlockId,
|
||||||
pub person_id: PersonId,
|
pub person_id: PersonId,
|
||||||
pub recipient_id: PersonId,
|
pub target_id: PersonId,
|
||||||
pub published: chrono::NaiveDateTime,
|
pub published: chrono::NaiveDateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,5 +14,5 @@ pub struct PersonBlock {
|
||||||
#[table_name = "person_block"]
|
#[table_name = "person_block"]
|
||||||
pub struct PersonBlockForm {
|
pub struct PersonBlockForm {
|
||||||
pub person_id: PersonId,
|
pub person_id: PersonId,
|
||||||
pub recipient_id: PersonId,
|
pub target_id: PersonId,
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ impl CommentView {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
comment::creator_id
|
comment::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -333,7 +333,7 @@ impl<'a> CommentQueryBuilder<'a> {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
comment::creator_id
|
comment::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -559,7 +559,7 @@ mod tests {
|
||||||
|
|
||||||
let timmy_blocks_sara_form = PersonBlockForm {
|
let timmy_blocks_sara_form = PersonBlockForm {
|
||||||
person_id: inserted_person.id,
|
person_id: inserted_person.id,
|
||||||
recipient_id: inserted_person_2.id,
|
target_id: inserted_person_2.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
let inserted_block = PersonBlock::block(&conn, &timmy_blocks_sara_form).unwrap();
|
let inserted_block = PersonBlock::block(&conn, &timmy_blocks_sara_form).unwrap();
|
||||||
|
@ -567,7 +567,7 @@ mod tests {
|
||||||
let expected_block = PersonBlock {
|
let expected_block = PersonBlock {
|
||||||
id: inserted_block.id,
|
id: inserted_block.id,
|
||||||
person_id: inserted_person.id,
|
person_id: inserted_person.id,
|
||||||
recipient_id: inserted_person_2.id,
|
target_id: inserted_person_2.id,
|
||||||
published: inserted_block.published,
|
published: inserted_block.published,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ impl PostView {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
post::creator_id
|
post::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -319,7 +319,7 @@ impl<'a> PostQueryBuilder<'a> {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
post::creator_id
|
post::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -557,7 +557,7 @@ mod tests {
|
||||||
// block that person
|
// block that person
|
||||||
let person_block = PersonBlockForm {
|
let person_block = PersonBlockForm {
|
||||||
person_id: inserted_person.id,
|
person_id: inserted_person.id,
|
||||||
recipient_id: inserted_blocked_person.id,
|
target_id: inserted_blocked_person.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
PersonBlock::block(&conn, &person_block).unwrap();
|
PersonBlock::block(&conn, &person_block).unwrap();
|
||||||
|
|
|
@ -10,7 +10,7 @@ use serde::Serialize;
|
||||||
#[derive(Debug, Serialize, Clone)]
|
#[derive(Debug, Serialize, Clone)]
|
||||||
pub struct PersonBlockView {
|
pub struct PersonBlockView {
|
||||||
pub person: PersonSafe,
|
pub person: PersonSafe,
|
||||||
pub recipient: PersonSafeAlias1,
|
pub target: PersonSafeAlias1,
|
||||||
}
|
}
|
||||||
|
|
||||||
type PersonBlockViewTuple = (PersonSafe, PersonSafeAlias1);
|
type PersonBlockViewTuple = (PersonSafe, PersonSafeAlias1);
|
||||||
|
@ -39,7 +39,7 @@ impl ViewToVec for PersonBlockView {
|
||||||
.iter()
|
.iter()
|
||||||
.map(|a| Self {
|
.map(|a| Self {
|
||||||
person: a.0.to_owned(),
|
person: a.0.to_owned(),
|
||||||
recipient: a.1.to_owned(),
|
target: a.1.to_owned(),
|
||||||
})
|
})
|
||||||
.collect::<Vec<Self>>()
|
.collect::<Vec<Self>>()
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,7 @@ impl PersonMentionView {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
comment::creator_id
|
comment::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -255,7 +255,7 @@ impl<'a> PersonMentionQueryBuilder<'a> {
|
||||||
.left_join(
|
.left_join(
|
||||||
person_block::table.on(
|
person_block::table.on(
|
||||||
comment::creator_id
|
comment::creator_id
|
||||||
.eq(person_block::recipient_id)
|
.eq(person_block::target_id)
|
||||||
.and(person_block::person_id.eq(person_id_join)),
|
.and(person_block::person_id.eq(person_id_join)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
create table person_block (
|
create table person_block (
|
||||||
id serial primary key,
|
id serial primary key,
|
||||||
person_id int references person on update cascade on delete cascade not null,
|
person_id int references person on update cascade on delete cascade not null,
|
||||||
recipient_id int references person on update cascade on delete cascade not null,
|
target_id int references person on update cascade on delete cascade not null,
|
||||||
published timestamp not null default now(),
|
published timestamp not null default now(),
|
||||||
unique(person_id, recipient_id)
|
unique(person_id, target_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
create table community_block (
|
create table community_block (
|
||||||
|
|
Loading…
Reference in a new issue