diff --git a/src/models/crate_owner_invitation.rs b/src/models/crate_owner_invitation.rs index 94c5be77643..576fd53c8f4 100644 --- a/src/models/crate_owner_invitation.rs +++ b/src/models/crate_owner_invitation.rs @@ -6,7 +6,7 @@ use http::StatusCode; use secrecy::SecretString; use crate::config; -use crate::models::{CrateOwner, OwnerKind}; +use crate::models::CrateOwner; use crate::schema::{crate_owner_invitations, crate_owners, crates}; use crate::util::errors::{custom, AppResult}; @@ -131,13 +131,7 @@ impl CrateOwnerInvitation { conn.transaction(|conn| { async move { diesel::insert_into(crate_owners::table) - .values(&CrateOwner { - crate_id: self.crate_id, - owner_id: self.invited_user_id, - created_by: self.invited_by_user_id, - owner_kind: OwnerKind::User, - email_notifications: true, - }) + .values(CrateOwner::from_invite(&self)) .on_conflict(crate_owners::table.primary_key()) .do_update() .set(crate_owners::deleted.eq(false)) diff --git a/src/models/owner.rs b/src/models/owner.rs index 12d2ae45569..147a43fc732 100644 --- a/src/models/owner.rs +++ b/src/models/owner.rs @@ -4,7 +4,7 @@ use diesel::pg::Pg; use diesel::prelude::*; use diesel_async::AsyncPgConnection; -use crate::models::{Crate, Team, User}; +use crate::models::{Crate, CrateOwnerInvitation, Team, User}; use crate::schema::crate_owners; use crates_io_diesel_helpers::pg_enum; @@ -36,6 +36,16 @@ impl CrateOwner { .filter(crate_owners::owner_kind.eq(kind)) .into_boxed() } + + pub fn from_invite(invite: &CrateOwnerInvitation) -> Self { + Self { + crate_id: invite.crate_id, + owner_id: invite.invited_user_id, + created_by: invite.invited_by_user_id, + owner_kind: OwnerKind::User, + email_notifications: true, + } + } } pg_enum! {