X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fsource%2Flocal_user.rs;h=d9e1bde756910bbbcbf3599866070651e1583ea4;hb=9b5e765364ecf7de64c9cbc7a452ccfaabce5449;hp=6f28a8fbcdba6e4e1c44d0f1696ec0684291aaa7;hpb=eb45bf2d0a8533c20ccd8c47b98ee0f6473e7715;p=lemmy.git diff --git a/crates/db_schema/src/source/local_user.rs b/crates/db_schema/src/source/local_user.rs index 6f28a8fb..d9e1bde7 100644 --- a/crates/db_schema/src/source/local_user.rs +++ b/crates/db_schema/src/source/local_user.rs @@ -1,52 +1,113 @@ -use crate::{schema::local_user, LocalUserId, PersonId}; -use serde::Serialize; +#[cfg(feature = "full")] +use crate::schema::local_user; +use crate::{ + newtypes::{LocalUserId, PersonId}, + ListingType, + SortType, +}; +use serde::{Deserialize, Serialize}; +use serde_with::skip_serializing_none; +#[cfg(feature = "full")] +use ts_rs::TS; +use typed_builder::TypedBuilder; -#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)] -#[table_name = "local_user"] +#[skip_serializing_none] +#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "full", derive(Queryable, Identifiable, TS))] +#[cfg_attr(feature = "full", diesel(table_name = local_user))] +#[cfg_attr(feature = "full", ts(export))] +/// A local user. pub struct LocalUser { pub id: LocalUserId, + /// The person_id for the local user. pub person_id: PersonId, + #[serde(skip)] pub password_encrypted: String, pub email: Option, + /// Whether to show NSFW content. pub show_nsfw: bool, pub theme: String, - pub default_sort_type: i16, - pub default_listing_type: i16, - pub lang: String, + pub default_sort_type: SortType, + pub default_listing_type: ListingType, + pub interface_language: String, + /// Whether to show avatars. pub show_avatars: bool, pub send_notifications_to_email: bool, + /// A validation ID used in logging out sessions. pub validator_time: chrono::NaiveDateTime, + /// Whether to show comment / post scores. + pub show_scores: bool, + /// Whether to show bot accounts. + pub show_bot_accounts: bool, + /// Whether to show read posts. + pub show_read_posts: bool, + /// Whether to show new posts as notifications. + pub show_new_post_notifs: bool, + /// Whether their email has been verified. + pub email_verified: bool, + /// Whether their registration application has been accepted. + pub accepted_application: bool, + #[serde(skip)] + pub totp_2fa_secret: Option, + /// A URL to add their 2-factor auth. + pub totp_2fa_url: Option, + /// Open links in a new tab. + pub open_links_in_new_tab: bool, + /// Whether infinite scroll is enabled. + pub infinite_scroll_enabled: bool, } -// TODO redo these, check table defaults -#[derive(Insertable, AsChangeset, Clone, Default)] -#[table_name = "local_user"] -pub struct LocalUserForm { +#[derive(Clone, TypedBuilder)] +#[builder(field_defaults(default))] +#[cfg_attr(feature = "full", derive(Insertable))] +#[cfg_attr(feature = "full", diesel(table_name = local_user))] +pub struct LocalUserInsertForm { + #[builder(!default)] pub person_id: PersonId, + #[builder(!default)] pub password_encrypted: String, - pub email: Option>, + pub email: Option, pub show_nsfw: Option, pub theme: Option, - pub default_sort_type: Option, - pub default_listing_type: Option, - pub lang: Option, + pub default_sort_type: Option, + pub default_listing_type: Option, + pub interface_language: Option, pub show_avatars: Option, pub send_notifications_to_email: Option, + pub show_bot_accounts: Option, + pub show_scores: Option, + pub show_read_posts: Option, + pub show_new_post_notifs: Option, + pub email_verified: Option, + pub accepted_application: Option, + pub totp_2fa_secret: Option>, + pub totp_2fa_url: Option>, + pub open_links_in_new_tab: Option, + pub infinite_scroll_enabled: Option, } -/// A local user view that removes password encrypted -#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)] -#[table_name = "local_user"] -pub struct LocalUserSettings { - pub id: LocalUserId, - pub person_id: PersonId, - pub email: Option, - pub show_nsfw: bool, - pub theme: String, - pub default_sort_type: i16, - pub default_listing_type: i16, - pub lang: String, - pub show_avatars: bool, - pub send_notifications_to_email: bool, - pub validator_time: chrono::NaiveDateTime, +#[derive(Clone, TypedBuilder)] +#[builder(field_defaults(default))] +#[cfg_attr(feature = "full", derive(AsChangeset))] +#[cfg_attr(feature = "full", diesel(table_name = local_user))] +pub struct LocalUserUpdateForm { + pub password_encrypted: Option, + pub email: Option>, + pub show_nsfw: Option, + pub theme: Option, + pub default_sort_type: Option, + pub default_listing_type: Option, + pub interface_language: Option, + pub show_avatars: Option, + pub send_notifications_to_email: Option, + pub show_bot_accounts: Option, + pub show_scores: Option, + pub show_read_posts: Option, + pub show_new_post_notifs: Option, + pub email_verified: Option, + pub accepted_application: Option, + pub totp_2fa_secret: Option>, + pub totp_2fa_url: Option>, + pub open_links_in_new_tab: Option, + pub infinite_scroll_enabled: Option, }