parent
cf41ae5fda
commit
08a21c7a04
@ -9,6 +9,8 @@ use activity_pub::object::Object;
|
|||||||
pub trait Activity {
|
pub trait Activity {
|
||||||
fn get_id(&self) -> String;
|
fn get_id(&self) -> String;
|
||||||
|
|
||||||
|
fn get_type(&self) -> String;
|
||||||
|
|
||||||
fn serialize(&self) -> serde_json::Value;
|
fn serialize(&self) -> serde_json::Value;
|
||||||
|
|
||||||
// fn deserialize(serde_json::Value) -> Self;
|
// fn deserialize(serde_json::Value) -> Self;
|
||||||
@ -25,7 +27,7 @@ pub struct Accept {
|
|||||||
impl Accept {
|
impl Accept {
|
||||||
pub fn new<A: Activity, B: Actor>(who: &B, what: &A, conn: &PgConnection) -> Accept {
|
pub fn new<A: Activity, B: Actor>(who: &B, what: &A, conn: &PgConnection) -> Accept {
|
||||||
Accept {
|
Accept {
|
||||||
id: "TODO".to_string(),
|
id: format!("{}/accept/{}/{}", who.compute_id(conn), what.get_type().to_lowercase(), what.get_id()),
|
||||||
actor: serde_json::Value::String(who.compute_id(conn)),
|
actor: serde_json::Value::String(who.compute_id(conn)),
|
||||||
object: serde_json::Value::String(what.get_id()),
|
object: serde_json::Value::String(what.get_id()),
|
||||||
date: chrono::Utc::now()
|
date: chrono::Utc::now()
|
||||||
@ -38,6 +40,10 @@ impl Activity for Accept {
|
|||||||
self.id.clone()
|
self.id.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_type(&self) -> String {
|
||||||
|
"Accept".to_string()
|
||||||
|
}
|
||||||
|
|
||||||
fn serialize(&self) -> serde_json::Value {
|
fn serialize(&self) -> serde_json::Value {
|
||||||
json!({
|
json!({
|
||||||
"type": "Accept",
|
"type": "Accept",
|
||||||
@ -59,7 +65,7 @@ pub struct Create {
|
|||||||
impl Create {
|
impl Create {
|
||||||
pub fn new<A: Actor, B: Object>(actor: &A, obj: &B, conn: &PgConnection) -> Create {
|
pub fn new<A: Actor, B: Object>(actor: &A, obj: &B, conn: &PgConnection) -> Create {
|
||||||
Create {
|
Create {
|
||||||
id: "TODO".to_string(),
|
id: format!("{}/activity", obj.compute_id(conn)),
|
||||||
actor: serde_json::Value::String(actor.compute_id(conn)),
|
actor: serde_json::Value::String(actor.compute_id(conn)),
|
||||||
object: obj.serialize(conn),
|
object: obj.serialize(conn),
|
||||||
date: chrono::Utc::now()
|
date: chrono::Utc::now()
|
||||||
@ -72,6 +78,10 @@ impl Activity for Create {
|
|||||||
self.id.clone()
|
self.id.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_type(&self) -> String {
|
||||||
|
"Create".to_string()
|
||||||
|
}
|
||||||
|
|
||||||
fn serialize(&self) -> serde_json::Value {
|
fn serialize(&self) -> serde_json::Value {
|
||||||
json!({
|
json!({
|
||||||
"type": "Create",
|
"type": "Create",
|
||||||
@ -93,7 +103,7 @@ pub struct Follow {
|
|||||||
impl Follow {
|
impl Follow {
|
||||||
pub fn new<A: Actor, B: Actor>(follower: &A, following: &B, conn: &PgConnection) -> Follow {
|
pub fn new<A: Actor, B: Actor>(follower: &A, following: &B, conn: &PgConnection) -> Follow {
|
||||||
Follow {
|
Follow {
|
||||||
id: "TODO".to_string(),
|
id: format!("{}/follow/{}", follower.compute_id(conn), following.compute_id(conn)),
|
||||||
actor: serde_json::Value::String(follower.compute_id(conn)),
|
actor: serde_json::Value::String(follower.compute_id(conn)),
|
||||||
object: serde_json::Value::String(following.compute_id(conn)),
|
object: serde_json::Value::String(following.compute_id(conn)),
|
||||||
date: chrono::Utc::now()
|
date: chrono::Utc::now()
|
||||||
@ -119,6 +129,10 @@ impl Activity for Follow {
|
|||||||
self.id.clone()
|
self.id.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_type(&self) -> String {
|
||||||
|
"Follow".to_string()
|
||||||
|
}
|
||||||
|
|
||||||
fn serialize(&self) -> serde_json::Value {
|
fn serialize(&self) -> serde_json::Value {
|
||||||
json!({
|
json!({
|
||||||
"type": "Follow",
|
"type": "Follow",
|
||||||
|
@ -5,6 +5,8 @@ use activity_pub::actor::Actor;
|
|||||||
|
|
||||||
pub trait Object {
|
pub trait Object {
|
||||||
fn serialize(&self, conn: &PgConnection) -> serde_json::Value;
|
fn serialize(&self, conn: &PgConnection) -> serde_json::Value;
|
||||||
|
|
||||||
|
fn compute_id(&self, conn: &PgConnection) -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Attribuable {
|
pub trait Attribuable {
|
||||||
|
@ -3,9 +3,11 @@ use diesel::{self, PgConnection, RunQueryDsl, QueryDsl, ExpressionMethods, Belon
|
|||||||
use diesel::dsl::any;
|
use diesel::dsl::any;
|
||||||
use serde_json;
|
use serde_json;
|
||||||
|
|
||||||
use activity_pub::PUBLIC_VISIBILTY;
|
use BASE_URL;
|
||||||
|
use activity_pub::{PUBLIC_VISIBILTY, ap_url};
|
||||||
use activity_pub::actor::Actor;
|
use activity_pub::actor::Actor;
|
||||||
use activity_pub::object::Object;
|
use activity_pub::object::Object;
|
||||||
|
use models::blogs::Blog;
|
||||||
use models::users::User;
|
use models::users::User;
|
||||||
use models::post_authors::PostAuthor;
|
use models::post_authors::PostAuthor;
|
||||||
use schema::posts;
|
use schema::posts;
|
||||||
@ -63,9 +65,22 @@ impl Post {
|
|||||||
let author_list = PostAuthor::belonging_to(self).select(post_authors::author_id);
|
let author_list = PostAuthor::belonging_to(self).select(post_authors::author_id);
|
||||||
users::table.filter(users::id.eq(any(author_list))).load::<User>(conn).unwrap()
|
users::table.filter(users::id.eq(any(author_list))).load::<User>(conn).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_blog(&self, conn: &PgConnection) -> Blog {
|
||||||
|
use schema::blogs;
|
||||||
|
blogs::table.filter(blogs::id.eq(self.blog_id))
|
||||||
|
.limit(1)
|
||||||
|
.load::<Blog>(conn)
|
||||||
|
.expect("Couldn't load blog associted to post")
|
||||||
|
.into_iter().nth(0).unwrap()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Object for Post {
|
impl Object for Post {
|
||||||
|
fn compute_id(&self, conn: &PgConnection) -> String {
|
||||||
|
ap_url(format!("{}/{}/{}", BASE_URL.as_str(), self.get_blog(conn).actor_id, self.slug))
|
||||||
|
}
|
||||||
|
|
||||||
fn serialize(&self, conn: &PgConnection) -> serde_json::Value {
|
fn serialize(&self, conn: &PgConnection) -> serde_json::Value {
|
||||||
json!({
|
json!({
|
||||||
"type": "Article",
|
"type": "Article",
|
||||||
|
Loading…
Reference in New Issue
Block a user