+ fn last_refreshed_at(&self) -> Option<NaiveDateTime> {
+ Some(self.last_refreshed_at)
+ }
+
+ #[tracing::instrument(skip_all)]
+ async fn read_from_id(
+ object_id: Url,
+ context: &Data<Self::DataType>,
+ ) -> Result<Option<Self>, LemmyError> {
+ Ok(
+ Community::read_from_apub_id(&mut context.pool(), &object_id.into())
+ .await?
+ .map(Into::into),
+ )
+ }
+
+ #[tracing::instrument(skip_all)]
+ async fn delete(self, context: &Data<Self::DataType>) -> Result<(), LemmyError> {
+ let form = CommunityUpdateForm::builder().deleted(Some(true)).build();
+ Community::update(&mut context.pool(), self.id, &form).await?;
+ Ok(())
+ }
+
+ #[tracing::instrument(skip_all)]
+ async fn into_json(self, data: &Data<Self::DataType>) -> Result<Group, LemmyError> {
+ let community_id = self.id;
+ let langs = CommunityLanguage::read(&mut data.pool(), community_id).await?;
+ let language = LanguageTag::new_multiple(langs, &mut data.pool()).await?;
+
+ let group = Group {
+ kind: GroupType::Group,
+ id: self.id().into(),
+ preferred_username: self.name.clone(),
+ name: Some(self.title.clone()),
+ summary: self.description.as_ref().map(|b| markdown_to_html(b)),
+ source: self.description.clone().map(Source::new),
+ icon: self.icon.clone().map(ImageObject::new),
+ image: self.banner.clone().map(ImageObject::new),
+ sensitive: Some(self.nsfw),
+ featured: Some(generate_featured_url(&self.actor_id)?.into()),
+ inbox: self.inbox_url.clone().into(),
+ outbox: generate_outbox_url(&self.actor_id)?.into(),
+ followers: self.followers_url.clone().into(),
+ endpoints: self.shared_inbox_url.clone().map(|s| Endpoints {
+ shared_inbox: s.into(),
+ }),
+ public_key: self.public_key(),
+ language,
+ published: Some(convert_datetime(self.published)),
+ updated: self.updated.map(convert_datetime),
+ posting_restricted_to_mods: Some(self.posting_restricted_to_mods),
+ attributed_to: Some(generate_moderators_url(&self.actor_id)?.into()),
+ };
+ Ok(group)
+ }
+
+ #[tracing::instrument(skip_all)]
+ async fn verify(
+ group: &Group,
+ expected_domain: &Url,
+ context: &Data<Self::DataType>,
+ ) -> Result<(), LemmyError> {
+ group.verify(expected_domain, context).await
+ }