X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fsource%2Flocal_user.rs;h=d9e1bde756910bbbcbf3599866070651e1583ea4;hb=9b5e765364ecf7de64c9cbc7a452ccfaabce5449;hp=68a8bdcfc72fa5e1c989177f84583f007817b906;hpb=ddf4a667b1ba15222287b30455a202bd3a336547;p=lemmy.git diff --git a/crates/db_schema/src/source/local_user.rs b/crates/db_schema/src/source/local_user.rs index 68a8bdcf..d9e1bde7 100644 --- a/crates/db_schema/src/source/local_user.rs +++ b/crates/db_schema/src/source/local_user.rs @@ -1,56 +1,113 @@ +#[cfg(feature = "full")] use crate::schema::local_user; -use serde::Serialize; +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: i32, - pub person_id: i32, - pub password_encrypted: String, - pub email: Option, - pub admin: bool, - 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 matrix_user_id: Option, + 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: 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)] -#[table_name = "local_user"] -pub struct LocalUserForm { - pub person_id: i32, - pub password_encrypted: String, - pub email: Option>, - pub admin: Option, - pub show_nsfw: Option, - pub theme: Option, - pub default_sort_type: Option, - pub default_listing_type: Option, - pub lang: Option, - pub show_avatars: Option, - pub send_notifications_to_email: Option, - pub matrix_user_id: Option>, +#[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 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, } -/// A local user view that removes password encrypted -#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)] -#[table_name = "local_user"] -pub struct LocalUserSettings{ - pub id: i32, - pub person_id: i32, - pub email: Option, - pub admin: bool, - 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 matrix_user_id: Option, +#[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, }