use crate::newtypes::{CommunityId, DbUrl, LanguageId, PersonId, PostId};
use serde::{Deserialize, Serialize};
+use typed_builder::TypedBuilder;
#[cfg(feature = "full")]
use crate::schema::{post, post_like, post_read, post_saved};
pub language_id: LanguageId,
}
-#[derive(Default)]
+#[derive(Debug, Clone, TypedBuilder)]
+#[builder(field_defaults(default))]
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = post))]
-pub struct PostForm {
+pub struct PostInsertForm {
+ #[builder(!default)]
pub name: String,
+ #[builder(!default)]
pub creator_id: PersonId,
+ #[builder(!default)]
pub community_id: CommunityId,
pub nsfw: Option<bool>,
+ pub url: Option<DbUrl>,
+ pub body: Option<String>,
+ pub removed: Option<bool>,
+ pub locked: Option<bool>,
+ pub updated: Option<chrono::NaiveDateTime>,
+ pub published: Option<chrono::NaiveDateTime>,
+ pub deleted: Option<bool>,
+ pub stickied: Option<bool>,
+ pub embed_title: Option<String>,
+ pub embed_description: Option<String>,
+ pub embed_video_url: Option<DbUrl>,
+ pub thumbnail_url: Option<DbUrl>,
+ pub ap_id: Option<DbUrl>,
+ pub local: Option<bool>,
+ pub language_id: Option<LanguageId>,
+}
+
+#[derive(Debug, Clone, TypedBuilder)]
+#[builder(field_defaults(default))]
+#[cfg_attr(feature = "full", derive(AsChangeset))]
+#[cfg_attr(feature = "full", diesel(table_name = post))]
+pub struct PostUpdateForm {
+ pub name: Option<String>,
+ pub nsfw: Option<bool>,
pub url: Option<Option<DbUrl>>,
pub body: Option<Option<String>>,
pub removed: Option<bool>,
pub locked: Option<bool>,
pub published: Option<chrono::NaiveDateTime>,
- pub updated: Option<chrono::NaiveDateTime>,
+ pub updated: Option<Option<chrono::NaiveDateTime>>,
pub deleted: Option<bool>,
pub stickied: Option<bool>,
pub embed_title: Option<Option<String>>,