]> Untitled Git - lemmy.git/blobdiff - crates/db_schema/src/impls/activity.rs
Dont log error if duplicate activity is received (fixes #2146) (#2148)
[lemmy.git] / crates / db_schema / src / impls / activity.rs
index d946d628f95edeab7b359477075dfc8e58893f08..261a89cbee6b00334c2f043ed6929f587e250957 100644 (file)
@@ -1,7 +1,10 @@
 use crate::{newtypes::DbUrl, source::activity::*, traits::Crud};
-use diesel::{dsl::*, result::Error, *};
+use diesel::{
+  dsl::*,
+  result::{DatabaseErrorKind, Error},
+  *,
+};
 use serde_json::Value;
-use std::io::{Error as IoError, ErrorKind};
 
 impl Crud for Activity {
   type Form = ActivityForm;
@@ -35,13 +38,14 @@ impl Crud for Activity {
 }
 
 impl Activity {
+  /// Returns true if the insert was successful
   pub fn insert(
     conn: &PgConnection,
     ap_id: DbUrl,
     data: Value,
     local: bool,
     sensitive: bool,
-  ) -> Result<Activity, IoError> {
+  ) -> Result<bool, Error> {
     let activity_form = ActivityForm {
       ap_id,
       data,
@@ -49,13 +53,14 @@ impl Activity {
       sensitive,
       updated: None,
     };
-    let result = Activity::create(conn, &activity_form);
-    match result {
-      Ok(s) => Ok(s),
-      Err(e) => Err(IoError::new(
-        ErrorKind::Other,
-        format!("Failed to insert activity into database: {}", e),
-      )),
+    match Activity::create(conn, &activity_form) {
+      Ok(_) => Ok(true),
+      Err(e) => {
+        if let Error::DatabaseError(DatabaseErrorKind::UniqueViolation, _) = e {
+          return Ok(false);
+        }
+        Err(e)
+      }
     }
   }