mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-12-28 05:41:34 +00:00
Nutomic
9eee61dd06
* Post scheduling (fixes #234) * clippy * replace map_err with inspect_err * ignore unpublished posts in read queries * add api test * fmt * add some checks * address some review comments * allow updating schedule time * rewrite scheduled task * fmt * machete * compare date in sql, more filters * check for community ban in sql * remove api test (scheduled task only runs every 10 mins) * remove mut * add index * remove Post::read impl * fmt * fix * correctly handle changes to schedule time * normal users can only schedule up to 10 posts
38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use chrono::{DateTime, TimeZone, Utc};
|
|
use lemmy_api_common::context::LemmyContext;
|
|
use lemmy_db_schema::source::post::Post;
|
|
use lemmy_db_views::structs::LocalUserView;
|
|
use lemmy_utils::{error::LemmyResult, LemmyErrorType};
|
|
|
|
pub mod create;
|
|
pub mod delete;
|
|
pub mod read;
|
|
pub mod remove;
|
|
pub mod update;
|
|
|
|
async fn convert_published_time(
|
|
scheduled_publish_time: Option<i64>,
|
|
local_user_view: &LocalUserView,
|
|
context: &LemmyContext,
|
|
) -> LemmyResult<Option<DateTime<Utc>>> {
|
|
const MAX_SCHEDULED_POSTS: i64 = 10;
|
|
if let Some(scheduled_publish_time) = scheduled_publish_time {
|
|
let converted = Utc
|
|
.timestamp_opt(scheduled_publish_time, 0)
|
|
.single()
|
|
.ok_or(LemmyErrorType::InvalidUnixTime)?;
|
|
if converted < Utc::now() {
|
|
Err(LemmyErrorType::PostScheduleTimeMustBeInFuture)?;
|
|
}
|
|
if !local_user_view.local_user.admin {
|
|
let count =
|
|
Post::user_scheduled_post_count(local_user_view.person.id, &mut context.pool()).await?;
|
|
if count >= MAX_SCHEDULED_POSTS {
|
|
Err(LemmyErrorType::TooManyScheduledPosts)?;
|
|
}
|
|
}
|
|
Ok(Some(converted))
|
|
} else {
|
|
Ok(None)
|
|
}
|
|
}
|