use chrono::{DateTime, Utc}; use postgres_types::FromSql; use serde_json::Value; use uuid::Uuid; use crate::errors::ValidationError; use crate::utils::html::clean_html; #[derive(Clone, FromSql)] #[postgres(name = "actor_profile")] pub struct DbActorProfile { pub id: Uuid, pub username: String, pub acct: String, pub display_name: Option, pub bio: Option, // html pub bio_source: Option, // plaintext or markdown pub avatar_file_name: Option, pub banner_file_name: Option, pub follower_count: i32, pub following_count: i32, pub post_count: i32, pub created_at: DateTime, pub actor_json: Option, } pub struct ProfileCreateData { pub username: String, pub display_name: Option, pub acct: String, pub bio: Option, pub avatar: Option, pub banner: Option, pub actor: Option, } pub struct ProfileUpdateData { pub display_name: Option, pub bio: Option, pub bio_source: Option, pub avatar: Option, pub banner: Option, } impl ProfileUpdateData { /// Validate and clean bio. pub fn clean(&mut self) -> Result<(), ValidationError> { self.bio = self.bio.as_ref().map(|val| clean_html(val)); Ok(()) } }