Add functions to get followers/followings
This commit is contained in:
parent
78f3062f6d
commit
14534d1ff3
@ -1,8 +1,10 @@
|
|||||||
use diesel::{self, PgConnection, ExpressionMethods, QueryDsl, RunQueryDsl};
|
use diesel::{self, PgConnection, ExpressionMethods, QueryDsl, RunQueryDsl};
|
||||||
|
|
||||||
|
use models::users::User;
|
||||||
use schema::follows;
|
use schema::follows;
|
||||||
|
|
||||||
#[derive(Queryable, Identifiable)]
|
#[derive(Queryable, Identifiable, Associations)]
|
||||||
|
#[belongs_to(User, foreign_key = "following_id")]
|
||||||
pub struct Follow {
|
pub struct Follow {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
pub follower_id: i32,
|
pub follower_id: i32,
|
||||||
|
@ -14,6 +14,7 @@ use activity_pub::actor::{ActorType, Actor};
|
|||||||
use activity_pub::outbox::Outbox;
|
use activity_pub::outbox::Outbox;
|
||||||
use activity_pub::webfinger::{Webfinger, resolve};
|
use activity_pub::webfinger::{Webfinger, resolve};
|
||||||
use db_conn::DbConn;
|
use db_conn::DbConn;
|
||||||
|
use models::follows::Follow;
|
||||||
use models::instance::Instance;
|
use models::instance::Instance;
|
||||||
use models::post_authors::PostAuthor;
|
use models::post_authors::PostAuthor;
|
||||||
use models::posts::Post;
|
use models::posts::Post;
|
||||||
@ -180,6 +181,18 @@ impl User {
|
|||||||
let posts = posts::table.filter(posts::id.eq(any(posts_by_self))).load::<Post>(conn).unwrap();
|
let posts = posts::table.filter(posts::id.eq(any(posts_by_self))).load::<Post>(conn).unwrap();
|
||||||
posts.into_iter().map(|p| Activity::create(self, p, conn)).collect::<Vec<Activity>>()
|
posts.into_iter().map(|p| Activity::create(self, p, conn)).collect::<Vec<Activity>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_followers(&self, conn: &PgConnection) -> Vec<User> {
|
||||||
|
use schema::follows;
|
||||||
|
let follows = Follow::belonging_to(self).select(follows::follower_id);
|
||||||
|
users::table.filter(users::id.eq(any(follows))).load::<User>(conn).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_following(&self, conn: &PgConnection) -> Vec<User> {
|
||||||
|
use schema::follows;
|
||||||
|
let follows = follows::table.filter(follows::follower_id.eq(self.id)).select(follows::following_id);
|
||||||
|
users::table.filter(users::id.eq(any(follows))).load::<User>(conn).unwrap()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'r> FromRequest<'a, 'r> for User {
|
impl<'a, 'r> FromRequest<'a, 'r> for User {
|
||||||
|
Loading…
Reference in New Issue
Block a user