diff options
Diffstat (limited to 'src/entity/user.rs')
-rw-r--r-- | src/entity/user.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/entity/user.rs b/src/entity/user.rs index aa1207d..24315e0 100644 --- a/src/entity/user.rs +++ b/src/entity/user.rs @@ -1,3 +1,5 @@ +pub mod followers; + use activitypub_federation::{ config::Data, fetch::object_id::ObjectId, @@ -8,6 +10,7 @@ use activitypub_federation::{ }; use async_trait::async_trait; use serde::{Deserialize, Serialize}; +use sqlx::types::time::OffsetDateTime; use stack_up::{Environment, Services}; use tracing::trace; use url::Url; @@ -21,6 +24,8 @@ pub(crate) struct User { pub username: String, pub ap_id: ObjectId<User>, pub private_key: Option<String>, + pub description: Option<String>, + pub avatar_url: Option<String>, pub public_key: String, pub inbox: Url, pub outbox: Option<Url>, @@ -28,13 +33,17 @@ pub(crate) struct User { pub struct DbUser { pub id: String, + pub description: Option<String>, pub username: String, pub ap_id: String, pub private_key: Option<String>, pub public_key: String, pub inbox: String, pub outbox: Option<String>, + pub avatar_url: Option<String>, pub local: bool, + pub updated_at: OffsetDateTime, + pub created_at: OffsetDateTime, } impl TryFrom<DbUser> for User { @@ -51,6 +60,8 @@ impl TryFrom<DbUser> for User { Some(ref url) => Some(Url::parse(url)?), None => None, }, + description: value.description, + avatar_url: value.avatar_url, }) } } @@ -119,6 +130,12 @@ pub struct Person { public_key: PublicKey, #[serde(skip_serializing_if = "Option::is_none")] outbox: Option<Url>, + followers: Url, + following: Url, + #[serde(skip_serializing_if = "Option::is_none")] + summary: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + image: Option<Url>, } #[async_trait] @@ -158,6 +175,13 @@ impl Object for User { inbox: self.inbox.clone(), public_key: self.public_key(), outbox: self.outbox.clone(), + followers: Url::parse(&format!("{}/followers", self.ap_id))?, + following: Url::parse(&format!("{}/following", self.ap_id))?, + summary: self.description, + image: match self.avatar_url { + Some(ref v) => Some(Url::parse(v)?), + None => None, + }, }) } |