Make POST /contributors API idempotent

Max Brunsfeld and Marshall created

Co-authored-by: Marshall <marshall@zed.dev>

Change summary

crates/collab/src/db/queries/contributors.rs | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

Detailed changes

crates/collab/src/db/queries/contributors.rs 🔗

@@ -37,11 +37,17 @@ impl Database {
                     &*tx,
                 )
                 .await?;
-            contributor::ActiveModel {
+
+            contributor::Entity::insert(contributor::ActiveModel {
                 user_id: ActiveValue::Set(user.id),
                 signed_at: ActiveValue::NotSet,
-            }
-            .insert(&*tx)
+            })
+            .on_conflict(
+                OnConflict::column(contributor::Column::UserId)
+                    .do_nothing()
+                    .to_owned(),
+            )
+            .exec_without_returning(&*tx)
             .await?;
             Ok(())
         })