forked from alemi/upub
feat: naive attempt to resolve followers/following
This commit is contained in:
parent
bcfd71eb06
commit
c94bfdcbe8
2 changed files with 63 additions and 1 deletions
|
@ -61,6 +61,8 @@ pub enum Relation {
|
||||||
Mentions,
|
Mentions,
|
||||||
#[sea_orm(has_many = "super::object::Entity")]
|
#[sea_orm(has_many = "super::object::Entity")]
|
||||||
Objects,
|
Objects,
|
||||||
|
#[sea_orm(has_many = "super::relation::Entity")]
|
||||||
|
Relations,
|
||||||
#[sea_orm(has_many = "super::session::Entity")]
|
#[sea_orm(has_many = "super::session::Entity")]
|
||||||
Sessions,
|
Sessions,
|
||||||
}
|
}
|
||||||
|
@ -125,6 +127,12 @@ impl Related<super::object::Entity> for Entity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Related<super::relation::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::Relations.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Related<super::session::Entity> for Entity {
|
impl Related<super::session::Entity> for Entity {
|
||||||
fn to() -> RelationDef {
|
fn to() -> RelationDef {
|
||||||
Relation::Sessions.def()
|
Relation::Sessions.def()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use sea_orm::entity::prelude::*;
|
use sea_orm::{entity::prelude::*, QuerySelect, SelectColumns};
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
|
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
|
||||||
#[sea_orm(table_name = "relations")]
|
#[sea_orm(table_name = "relations")]
|
||||||
|
@ -47,4 +47,58 @@ pub enum Relation {
|
||||||
ActorsFollowing,
|
ActorsFollowing,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Related<super::actor::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::ActorsFollowing.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Related<super::activity::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::ActivitiesFollow.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl ActiveModelBehavior for ActiveModel {}
|
impl ActiveModelBehavior for ActiveModel {}
|
||||||
|
|
||||||
|
impl Entity {
|
||||||
|
pub async fn followers(uid: &str, db: &DatabaseConnection) -> crate::Result<Vec<String>> {
|
||||||
|
let internal_id = super::actor::Entity::ap_to_internal(uid, db).await?;
|
||||||
|
let out = Entity::find()
|
||||||
|
.join(
|
||||||
|
sea_orm::JoinType::InnerJoin,
|
||||||
|
Entity::belongs_to(super::actor::Entity)
|
||||||
|
.from(Column::Follower)
|
||||||
|
.to(super::actor::Column::Internal)
|
||||||
|
.into()
|
||||||
|
)
|
||||||
|
.filter(Column::Following.eq(internal_id))
|
||||||
|
.select_only()
|
||||||
|
.select_column(super::actor::Column::Id)
|
||||||
|
.into_tuple::<String>()
|
||||||
|
.all(db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn following(uid: &str, db: &DatabaseConnection) -> crate::Result<Vec<String>> {
|
||||||
|
let internal_id = super::actor::Entity::ap_to_internal(uid, db).await?;
|
||||||
|
let out = Entity::find()
|
||||||
|
.join(
|
||||||
|
sea_orm::JoinType::InnerJoin,
|
||||||
|
Entity::belongs_to(super::actor::Entity)
|
||||||
|
.from(Column::Following)
|
||||||
|
.to(super::actor::Column::Internal)
|
||||||
|
.into()
|
||||||
|
)
|
||||||
|
.filter(Column::Follower.eq(internal_id))
|
||||||
|
.select_only()
|
||||||
|
.select_column(super::actor::Column::Id)
|
||||||
|
.into_tuple::<String>()
|
||||||
|
.all(db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue