Skip to content

Commit ee7e60a

Browse files
committed
model/invitation: Simplify CrateOwnerInvitation::create() arguments
Passing in three `i32` arguments seems a bit error-prone...
1 parent 0f770fd commit ee7e60a

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

src/models.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
pub use self::action::{NewVersionOwnerAction, VersionAction, VersionOwnerAction};
22
pub use self::category::{Category, CrateCategory, NewCategory};
3-
pub use self::crate_owner_invitation::{CrateOwnerInvitation, NewCrateOwnerInvitationOutcome};
3+
pub use self::crate_owner_invitation::{
4+
CrateOwnerInvitation, NewCrateOwnerInvitation, NewCrateOwnerInvitationOutcome,
5+
};
46
pub use self::default_versions::{update_default_version, verify_default_version};
57
pub use self::deleted_crate::NewDeletedCrate;
68
pub use self::dependency::{Dependency, DependencyKind, ReverseDependency};

src/models/crate_owner_invitation.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ pub struct CrateOwnerInvitation {
3838

3939
impl CrateOwnerInvitation {
4040
pub async fn create(
41-
invited_user_id: i32,
42-
invited_by_user_id: i32,
43-
crate_id: i32,
41+
invite: &NewCrateOwnerInvitation,
4442
conn: &mut AsyncPgConnection,
4543
config: &config::Server,
4644
) -> QueryResult<NewCrateOwnerInvitationOutcome> {
@@ -52,7 +50,7 @@ impl CrateOwnerInvitation {
5250
// This does a SELECT FOR UPDATE + DELETE instead of a DELETE with a WHERE clause to
5351
// use the model's `is_expired` method, centralizing our expiration checking logic.
5452
let existing: Option<CrateOwnerInvitation> = crate_owner_invitations::table
55-
.find((invited_user_id, crate_id))
53+
.find((invite.invited_user_id, invite.crate_id))
5654
.for_update()
5755
.first(conn)
5856
.await
@@ -70,11 +68,7 @@ impl CrateOwnerInvitation {
7068
.await?;
7169

7270
let res: Option<CrateOwnerInvitation> = diesel::insert_into(crate_owner_invitations::table)
73-
.values(&NewCrateOwnerInvitation {
74-
invited_user_id,
75-
invited_by_user_id,
76-
crate_id,
77-
})
71+
.values(invite)
7872
// The ON CONFLICT DO NOTHING clause results in not creating the invite if another one
7973
// already exists. This does not cause problems with expired invitation as those are
8074
// deleted before doing this INSERT.

src/models/krate.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use crate::controllers::helpers::pagination::*;
1313
use crate::models::helpers::with_count::*;
1414
use crate::models::version::TopVersions;
1515
use crate::models::{
16-
CrateOwner, CrateOwnerInvitation, NewCrateOwnerInvitationOutcome, Owner, OwnerKind,
17-
ReverseDependency, User, Version,
16+
CrateOwner, CrateOwnerInvitation, NewCrateOwnerInvitation, NewCrateOwnerInvitationOutcome,
17+
Owner, OwnerKind, ReverseDependency, User, Version,
1818
};
1919
use crate::schema::*;
2020
use crate::util::errors::{bad_request, version_not_found, AppResult};
@@ -401,10 +401,15 @@ impl Crate {
401401
match owner {
402402
// Users are invited and must accept before being added
403403
Owner::User(user) => {
404-
let creation_ret =
405-
CrateOwnerInvitation::create(user.id, req_user.id, self.id, conn, &app.config)
406-
.await
407-
.map_err(BoxedAppError::from)?;
404+
let invite = NewCrateOwnerInvitation {
405+
invited_user_id: user.id,
406+
invited_by_user_id: req_user.id,
407+
crate_id: self.id,
408+
};
409+
410+
let creation_ret = CrateOwnerInvitation::create(&invite, conn, &app.config)
411+
.await
412+
.map_err(BoxedAppError::from)?;
408413

409414
match creation_ret {
410415
NewCrateOwnerInvitationOutcome::InviteCreated { plaintext_token } => {

0 commit comments

Comments
 (0)