use crate::models::clips::hosted::CommentVisibility;
use chrono::{DateTime, FixedOffset};
use serde::{Deserialize, Serialize};
use strum_macros::{AsRefStr, Display};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct UsersLimitResponse {
pub limit_id: String,
pub limit_name: String,
pub limit_mb: i32,
pub limit_description: Option<String>,
pub used_mb: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub enum SearchIndexingVisibility {
Hidden,
Clips,
Profile,
ProfileAndClips,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(
feature = "openapi",
derive(utoipa::ToSchema),
derive(sea_orm::FromJsonQueryResult)
)]
pub struct NotificationPreferences {
pub user_follow: bool,
pub clip_upload: bool,
pub reaction_create: bool,
pub comment_create: bool,
}
impl Default for NotificationPreferences {
fn default() -> Self {
Self {
user_follow: true,
clip_upload: true,
reaction_create: true,
comment_create: true,
}
}
}
impl From<serde_json::Value> for NotificationPreferences {
fn from(value: serde_json::Value) -> Self {
serde_json::from_value(value).unwrap_or_default()
}
}
#[derive(Serialize, Deserialize, Display, Clone, Debug, PartialEq, Eq, AsRefStr, Default)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[allow(missing_docs)]
pub enum SupportedLanguages {
#[serde(rename = "en-US")]
#[strum(serialize = "en-US")]
#[default]
EnUs,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct UsersResponse {
pub user_id: String,
pub username: String,
pub email: String,
pub about_me: Option<String>,
pub language: SupportedLanguages,
pub location: String,
pub avatar_url: String,
pub storage_limit_id: Option<String>,
pub search_indexing_visibility: SearchIndexingVisibility,
pub default_comment_visibility: CommentVisibility,
pub notification_preferences: NotificationPreferences,
pub unread_notifications: i32,
pub created_at: DateTime<FixedOffset>,
pub updated_at: DateTime<FixedOffset>,
pub banned_at: Option<DateTime<FixedOffset>>,
pub verified_at: Option<DateTime<FixedOffset>>,
pub deleted_at: Option<DateTime<FixedOffset>>,
}