1 use crate::{newtypes::DbUrl, source::activity::*, traits::Crud};
4 result::{DatabaseErrorKind, Error},
9 impl Crud for Activity {
10 type Form = ActivityForm;
12 fn read(conn: &mut PgConnection, activity_id: i32) -> Result<Self, Error> {
13 use crate::schema::activity::dsl::*;
14 activity.find(activity_id).first::<Self>(conn)
17 fn create(conn: &mut PgConnection, new_activity: &ActivityForm) -> Result<Self, Error> {
18 use crate::schema::activity::dsl::*;
21 .get_result::<Self>(conn)
25 conn: &mut PgConnection,
27 new_activity: &ActivityForm,
28 ) -> Result<Self, Error> {
29 use crate::schema::activity::dsl::*;
30 diesel::update(activity.find(activity_id))
32 .get_result::<Self>(conn)
34 fn delete(conn: &mut PgConnection, activity_id: i32) -> Result<usize, Error> {
35 use crate::schema::activity::dsl::*;
36 diesel::delete(activity.find(activity_id)).execute(conn)
41 /// Returns true if the insert was successful
43 conn: &mut PgConnection,
48 ) -> Result<bool, Error> {
49 let activity_form = ActivityForm {
56 match Activity::create(conn, &activity_form) {
59 if let Error::DatabaseError(DatabaseErrorKind::UniqueViolation, _) = e {
67 pub fn read_from_apub_id(conn: &mut PgConnection, object_id: &DbUrl) -> Result<Activity, Error> {
68 use crate::schema::activity::dsl::*;
69 activity.filter(ap_id.eq(object_id)).first::<Self>(conn)
72 pub fn delete_olds(conn: &mut PgConnection) -> Result<usize, Error> {
73 use crate::schema::activity::dsl::*;
74 diesel::delete(activity.filter(published.lt(now - 6.months()))).execute(conn)
84 activity::{Activity, ActivityForm},
85 person::{Person, PersonForm},
87 utils::establish_unpooled_connection,
89 use serde_json::Value;
90 use serial_test::serial;
96 let conn = &mut establish_unpooled_connection();
98 let creator_form = PersonForm {
99 name: "activity_creator_pm".into(),
100 public_key: Some("pubkey".to_string()),
101 ..PersonForm::default()
104 let inserted_creator = Person::create(conn, &creator_form).unwrap();
106 let ap_id: DbUrl = Url::parse(
107 "https://enterprise.lemmy.ml/activities/delete/f1b5d57c-80f8-4e03-a615-688d552e946c",
111 let test_json: Value = serde_json::from_str(
113 "@context": "https://www.w3.org/ns/activitystreams",
114 "id": "https://enterprise.lemmy.ml/activities/delete/f1b5d57c-80f8-4e03-a615-688d552e946c",
116 "actor": "https://enterprise.lemmy.ml/u/riker",
117 "to": "https://www.w3.org/ns/activitystreams#Public",
119 "https://enterprise.lemmy.ml/c/main/"
121 "object": "https://enterprise.lemmy.ml/post/32"
125 let activity_form = ActivityForm {
126 ap_id: ap_id.clone(),
127 data: test_json.to_owned(),
133 let inserted_activity = Activity::create(conn, &activity_form).unwrap();
135 let expected_activity = Activity {
136 ap_id: ap_id.clone(),
137 id: inserted_activity.id,
140 sensitive: Some(false),
141 published: inserted_activity.published,
145 let read_activity = Activity::read(conn, inserted_activity.id).unwrap();
146 let read_activity_by_apub_id = Activity::read_from_apub_id(conn, &ap_id).unwrap();
147 Person::delete(conn, inserted_creator.id).unwrap();
148 Activity::delete(conn, inserted_activity.id).unwrap();
150 assert_eq!(expected_activity, read_activity);
151 assert_eq!(expected_activity, read_activity_by_apub_id);
152 assert_eq!(expected_activity, inserted_activity);