diff --git a/crates/app/src/public/html/stacks/manage.html b/crates/app/src/public/html/stacks/manage.html index 5df7ff2..e7093b9 100644 --- a/crates/app/src/public/html/stacks/manage.html +++ b/crates/app/src/public/html/stacks/manage.html @@ -16,13 +16,13 @@
-
+
Privacy
-
-
-
- Mode -
- -
- -
-
- -
-
- Sort -
- -
- -
-
-
{{ text "stacks:label.change_name" }} @@ -232,46 +186,6 @@ }); }; - globalThis.save_mode = (event, mode) => { - const selected = event.target.selectedOptions[0]; - fetch(`/api/v1/stacks/{{ stack.id }}/mode`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - mode: selected.value, - }), - }) - .then((res) => res.json()) - .then((res) => { - trigger("atto::toast", [ - res.ok ? "success" : "error", - res.message, - ]); - }); - }; - - globalThis.save_sort = (event, mode) => { - const selected = event.target.selectedOptions[0]; - fetch(`/api/v1/stacks/{{ stack.id }}/sort`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - sort: selected.value, - }), - }) - .then((res) => res.json()) - .then((res) => { - trigger("atto::toast", [ - res.ok ? "success" : "error", - res.message, - ]); - }); - }; - globalThis.change_name = async (e) => { e.preventDefault(); diff --git a/crates/app/src/routes/api/v1/mod.rs b/crates/app/src/routes/api/v1/mod.rs index 743c8f5..b8d2f71 100644 --- a/crates/app/src/routes/api/v1/mod.rs +++ b/crates/app/src/routes/api/v1/mod.rs @@ -23,7 +23,7 @@ use tetratto_core::model::{ communities_permissions::CommunityPermission, permissions::FinePermission, reactions::AssetType, - stacks::{StackMode, StackPrivacy, StackSort}, + stacks::StackPrivacy, }; pub fn routes() -> Router { @@ -326,8 +326,6 @@ pub fn routes() -> Router { .route("/stacks", post(stacks::create_request)) .route("/stacks/{id}/name", post(stacks::update_name_request)) .route("/stacks/{id}/privacy", post(stacks::update_privacy_request)) - .route("/stacks/{id}/mode", post(stacks::update_mode_request)) - .route("/stacks/{id}/sort", post(stacks::update_sort_request)) .route("/stacks/{id}/users", post(stacks::add_user_request)) .route("/stacks/{id}/users", delete(stacks::remove_user_request)) .route("/stacks/{id}", delete(stacks::delete_request)) @@ -533,16 +531,6 @@ pub struct UpdateStackPrivacy { pub privacy: StackPrivacy, } -#[derive(Deserialize)] -pub struct UpdateStackMode { - pub mode: StackMode, -} - -#[derive(Deserialize)] -pub struct UpdateStackSort { - pub sort: StackSort, -} - #[derive(Deserialize)] pub struct AddOrRemoveStackUser { pub username: String, diff --git a/crates/app/src/routes/api/v1/stacks.rs b/crates/app/src/routes/api/v1/stacks.rs index a33df1e..b3437e0 100644 --- a/crates/app/src/routes/api/v1/stacks.rs +++ b/crates/app/src/routes/api/v1/stacks.rs @@ -2,10 +2,7 @@ use crate::{State, get_user_from_token}; use axum::{Extension, Json, extract::Path, response::IntoResponse}; use axum_extra::extract::CookieJar; use tetratto_core::model::{stacks::UserStack, ApiReturn, Error}; -use super::{ - AddOrRemoveStackUser, CreateStack, UpdateStackMode, UpdateStackName, UpdateStackPrivacy, - UpdateStackSort, -}; +use super::{AddOrRemoveStackUser, CreateStack, UpdateStackName, UpdateStackPrivacy}; pub async fn create_request( jar: CookieJar, @@ -75,50 +72,6 @@ pub async fn update_privacy_request( } } -pub async fn update_mode_request( - jar: CookieJar, - Extension(data): Extension, - Path(id): Path, - Json(req): Json, -) -> impl IntoResponse { - let data = &(data.read().await).0; - let user = match get_user_from_token!(jar, data) { - Some(ua) => ua, - None => return Json(Error::NotAllowed.into()), - }; - - match data.update_stack_mode(id, user, req.mode).await { - Ok(_) => Json(ApiReturn { - ok: true, - message: "Stack updated".to_string(), - payload: (), - }), - Err(e) => Json(e.into()), - } -} - -pub async fn update_sort_request( - jar: CookieJar, - Extension(data): Extension, - Path(id): Path, - Json(req): Json, -) -> impl IntoResponse { - let data = &(data.read().await).0; - let user = match get_user_from_token!(jar, data) { - Some(ua) => ua, - None => return Json(Error::NotAllowed.into()), - }; - - match data.update_stack_sort(id, user, req.sort).await { - Ok(_) => Json(ApiReturn { - ok: true, - message: "Stack updated".to_string(), - payload: (), - }), - Err(e) => Json(e.into()), - } -} - pub async fn add_user_request( jar: CookieJar, Extension(data): Extension, diff --git a/crates/app/src/routes/pages/stacks.rs b/crates/app/src/routes/pages/stacks.rs index bb19b00..75eb39d 100644 --- a/crates/app/src/routes/pages/stacks.rs +++ b/crates/app/src/routes/pages/stacks.rs @@ -66,12 +66,15 @@ pub async fn posts_request( } let ignore_users = data.0.get_userblocks_receivers(user.id).await; - let list = match data - .0 - .get_stack_posts(user.id, stack.id, 12, req.page, &ignore_users) - .await - { - Ok(l) => l, + let list = match data.0.get_posts_from_stack(stack.id, 12, req.page).await { + Ok(l) => match data + .0 + .fill_posts_with_community(l, user.id, &ignore_users) + .await + { + Ok(l) => l, + Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), + }, Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), }; diff --git a/crates/core/src/database/drivers/sql/create_stacks.sql b/crates/core/src/database/drivers/sql/create_stacks.sql index e9d0def..6ec6e28 100644 --- a/crates/core/src/database/drivers/sql/create_stacks.sql +++ b/crates/core/src/database/drivers/sql/create_stacks.sql @@ -4,7 +4,5 @@ CREATE TABLE IF NOT EXISTS stacks ( owner BIGINT NOT NULL, name TEXT NOT NULL, users TEXT NOT NULL, - privacy TEXT NOT NULL, - mode TEXT NOT NULL, - sort TEXT NOT NULL + privacy TEXT NOT NULL ) diff --git a/crates/core/src/database/messages.rs b/crates/core/src/database/messages.rs index 8d34b1e..e1b013d 100644 --- a/crates/core/src/database/messages.rs +++ b/crates/core/src/database/messages.rs @@ -157,15 +157,6 @@ impl DataManager { return Err(Error::NotAllowed); } - // check if the user can read the channel - let membership = self - .get_membership_by_owner_community(user.id, channel.community) - .await?; - - if !channel.check_read(user.id, Some(membership.role)) { - continue; - } - // create notif self.create_notification(Notification::new( "You've been mentioned in a message!".to_string(), diff --git a/crates/core/src/database/posts.rs b/crates/core/src/database/posts.rs index 8cd8c23..0c2dc00 100644 --- a/crates/core/src/database/posts.rs +++ b/crates/core/src/database/posts.rs @@ -6,7 +6,6 @@ use crate::model::auth::Notification; use crate::model::communities::Question; use crate::model::communities_permissions::CommunityPermission; use crate::model::moderation::AuditLogEntry; -use crate::model::stacks::StackSort; use crate::model::{ Error, Result, auth::User, @@ -744,7 +743,6 @@ impl DataManager { id: usize, batch: usize, page: usize, - sort: StackSort, ) -> Result> { let users = self.get_stack_by_id(id).await?.users; let mut users = users.iter(); @@ -769,13 +767,8 @@ impl DataManager { let res = query_rows!( &conn, &format!( - "SELECT * FROM posts WHERE (owner = {} {query_string}) AND replying_to = 0 ORDER BY {} DESC LIMIT $1 OFFSET $2", - first, - if sort == StackSort::Created { - "created" - } else { - "likes" - } + "SELECT * FROM posts WHERE (owner = {} {query_string}) AND replying_to = 0 ORDER BY created DESC LIMIT $1 OFFSET $2", + first ), &[&(batch as i64), &((page * batch) as i64)], |x| { Self::get_post_from_row(x) } diff --git a/crates/core/src/database/stacks.rs b/crates/core/src/database/stacks.rs index 9bb32d0..c69b35d 100644 --- a/crates/core/src/database/stacks.rs +++ b/crates/core/src/database/stacks.rs @@ -1,7 +1,5 @@ use super::*; use crate::cache::Cache; -use crate::model::communities::{Community, Post, Question}; -use crate::model::stacks::{StackMode, StackSort}; use crate::model::{ Error, Result, auth::User, @@ -29,66 +27,11 @@ impl DataManager { name: get!(x->3(String)), users: serde_json::from_str(&get!(x->4(String))).unwrap(), privacy: serde_json::from_str(&get!(x->5(String))).unwrap(), - mode: serde_json::from_str(&get!(x->6(String))).unwrap(), - sort: serde_json::from_str(&get!(x->7(String))).unwrap(), } } auto_method!(get_stack_by_id(usize as i64)@get_stack_from_row -> "SELECT * FROM stacks WHERE id = $1" --name="stack" --returns=UserStack --cache-key-tmpl="atto.stack:{}"); - pub async fn get_stack_posts( - &self, - as_user_id: usize, - id: usize, - batch: usize, - page: usize, - ignore_users: &Vec, - ) -> Result< - Vec<( - Post, - User, - Community, - Option<(User, Post)>, - Option<(Question, User)>, - )>, - > { - let stack = self.get_stack_by_id(id).await?; - - Ok(match stack.mode { - StackMode::Include => { - self.fill_posts_with_community( - self.get_posts_from_stack(id, batch, page, stack.sort) - .await?, - as_user_id, - ignore_users, - ) - .await? - } - StackMode::Exclude => { - let ignore_users = [ignore_users.to_owned(), stack.users].concat(); - - match stack.sort { - StackSort::Created => { - self.fill_posts_with_community( - self.get_latest_posts(batch, page).await?, - as_user_id, - &ignore_users, - ) - .await? - } - StackSort::Likes => { - self.fill_posts_with_community( - self.get_popular_posts(batch, page, 604_800_000).await?, - as_user_id, - &ignore_users, - ) - .await? - } - } - } - }) - } - /// Get all stacks by user. /// /// # Arguments @@ -147,7 +90,7 @@ impl DataManager { let res = execute!( &conn, - "INSERT INTO stacks VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", + "INSERT INTO stacks VALUES ($1, $2, $3, $4, $5, $6)", params![ &(data.id as i64), &(data.created as i64), @@ -155,8 +98,6 @@ impl DataManager { &data.name, &serde_json::to_string(&data.users).unwrap(), &serde_json::to_string(&data.privacy).unwrap(), - &serde_json::to_string(&data.mode).unwrap(), - &serde_json::to_string(&data.sort).unwrap(), ] ); @@ -194,9 +135,6 @@ impl DataManager { } auto_method!(update_stack_name(&str)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET name = $1 WHERE id = $2" --cache-key-tmpl="atto.stack:{}"); - auto_method!(update_stack_users(Vec)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET users = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.stack:{}"); - auto_method!(update_stack_privacy(StackPrivacy)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET privacy = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.stack:{}"); - auto_method!(update_stack_mode(StackMode)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET mode = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.stack:{}"); - auto_method!(update_stack_sort(StackSort)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET sort = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.stack:{}"); + auto_method!(update_stack_users(Vec)@get_stack_by_id:MANAGE_STACKS -> "UPDATE stacks SET users = $1 WHERE id = $2" --serde --cache-key-tmpl="atto.stack:{}"); } diff --git a/crates/core/src/model/stacks.rs b/crates/core/src/model/stacks.rs index 88dd855..afe7e3c 100644 --- a/crates/core/src/model/stacks.rs +++ b/crates/core/src/model/stacks.rs @@ -15,34 +15,6 @@ impl Default for StackPrivacy { } } -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] -pub enum StackMode { - /// `users` vec contains ID of users to INCLUDE into the timeline; - /// every other user is excluded - Include, - /// `users` vec contains ID of users to EXCLUDE from the timeline; - /// every other user is included - Exclude, -} - -impl Default for StackMode { - fn default() -> Self { - Self::Include - } -} - -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] -pub enum StackSort { - Created, - Likes, -} - -impl Default for StackSort { - fn default() -> Self { - Self::Created - } -} - #[derive(Serialize, Deserialize)] pub struct UserStack { pub id: usize, @@ -51,8 +23,6 @@ pub struct UserStack { pub name: String, pub users: Vec, pub privacy: StackPrivacy, - pub mode: StackMode, - pub sort: StackSort, } impl UserStack { @@ -65,8 +35,6 @@ impl UserStack { name, users, privacy: StackPrivacy::default(), - mode: StackMode::default(), - sort: StackSort::default(), } } } diff --git a/sql_changes/stacks_mode_sort.sql b/sql_changes/stacks_mode_sort.sql deleted file mode 100644 index 35d7aa6..0000000 --- a/sql_changes/stacks_mode_sort.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE stacks -ADD COLUMN mode TEXT NOT NULL DEFAULT '"Include"'; - -ALTER TABLE stacks -ADD COLUMN sort TEXT NOT NULL DEFAULT '"Created"';