use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: String,
#[serde(default)]
pub linkid: String,
pub nickname: String,
pub avatar: Option<String>,
pub status: String,
#[serde(default)]
pub online: bool,
#[serde(default)]
pub device_type: Option<String>,
#[serde(default)]
pub phone_verified: bool,
pub created_at: String,
pub updated_at: String,
#[serde(default)]
pub login_methods: Vec<UserLoginMethod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserLoginMethod {
pub id: String,
pub user_id: String,
pub login_type: String,
pub identifier: String,
pub verified: bool,
pub is_primary: bool,
pub created_at: String,
pub updated_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserPrivacySettings {
pub user_id: String,
pub allow_friend_request: bool,
pub require_verification: bool,
pub friend_request_question: Option<String>,
pub moments_visibility: String,
pub allow_stranger_view_moments: bool,
pub show_online_status: bool,
pub show_phone_to: String,
pub find_by_phone: bool,
pub allow_search_by_linkid: bool,
pub show_qrcode: bool,
pub share_location: bool,
pub created_at: String,
pub updated_at: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct UpdatePrivacySettingsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_friend_request: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_verification: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub friend_request_question: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub moments_visibility: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_stranger_view_moments: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_online_status: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_phone_to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub find_by_phone: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_search_by_linkid: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_qrcode: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub share_location: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlacklistEntry {
pub id: String,
pub user_id: String,
pub blocked_user_id: String,
pub reason: Option<String>,
pub is_mutual: bool,
pub created_at: String,
pub updated_at: String,
pub blocked_user: Option<User>,
}
#[derive(Debug, Clone, Serialize)]
pub struct AddToBlacklistRequest {
pub blocked_user_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}