Skip to content

Commit 5fefa61

Browse files
committed
models/action: Extract NewVersionOwnerAction struct
... including `insert()` fn
1 parent 907435d commit 5fefa61

File tree

4 files changed

+37
-31
lines changed

4 files changed

+37
-31
lines changed

src/controllers/krate/publish.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use tokio::runtime::Handle;
2424
use url::Url;
2525

2626
use crate::models::{
27-
default_versions::Version as DefaultVersion, insert_version_owner_action, Category, Crate,
28-
DependencyKind, Keyword, NewCrate, NewVersion, Rights, VersionAction,
27+
default_versions::Version as DefaultVersion, Category, Crate, DependencyKind, Keyword,
28+
NewCrate, NewVersion, NewVersionOwnerAction, Rights, VersionAction,
2929
};
3030

3131
use crate::licenses::parse_license_expr;
@@ -415,13 +415,13 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
415415
}
416416
})?;
417417

418-
insert_version_owner_action(
419-
conn,
420-
version.id,
421-
user.id,
422-
api_token_id,
423-
VersionAction::Publish,
424-
)?;
418+
NewVersionOwnerAction::builder()
419+
.version_id(version.id)
420+
.user_id(user.id)
421+
.maybe_api_token_id(api_token_id)
422+
.action(VersionAction::Publish)
423+
.build()
424+
.insert(conn)?;
425425

426426
// Link this new version to all dependencies
427427
add_dependencies(conn, &deps, version.id)?;

src/controllers/version/metadata.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ use crate::app::AppState;
2121
use crate::auth::{AuthCheck, Authentication};
2222
use crate::models::token::EndpointScope;
2323
use crate::models::{
24-
insert_version_owner_action, Crate, Dependency, Rights, Version, VersionAction,
25-
VersionOwnerAction,
24+
Crate, Dependency, NewVersionOwnerAction, Rights, Version, VersionAction, VersionOwnerAction,
2625
};
2726
use crate::rate_limiter::LimitedAction;
2827
use crate::schema::versions;
@@ -247,7 +246,13 @@ pub fn perform_version_yank_update(
247246
} else {
248247
VersionAction::Unyank
249248
};
250-
insert_version_owner_action(conn, version.id, user.id, api_token_id, action)?;
249+
NewVersionOwnerAction::builder()
250+
.version_id(version.id)
251+
.user_id(user.id)
252+
.maybe_api_token_id(api_token_id)
253+
.action(action)
254+
.build()
255+
.insert(conn)?;
251256

252257
SyncToGitIndex::new(&krate.name).enqueue(conn)?;
253258
SyncToSparseIndex::new(&krate.name).enqueue(conn)?;

src/models.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pub use self::action::{insert_version_owner_action, VersionAction, VersionOwnerAction};
1+
pub use self::action::{NewVersionOwnerAction, VersionAction, VersionOwnerAction};
22
pub use self::category::{Category, CrateCategory, NewCategory};
33
pub use self::crate_owner_invitation::{CrateOwnerInvitation, NewCrateOwnerInvitationOutcome};
44
pub use self::default_versions::{update_default_version, verify_default_version};

src/models/action.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::schema::*;
33
use crate::sql::pg_enum;
44
use crate::util::diesel::prelude::*;
55
use crate::util::diesel::Conn;
6+
use bon::Builder;
67
use chrono::NaiveDateTime;
78
use diesel_async::AsyncPgConnection;
89

@@ -95,22 +96,22 @@ impl VersionOwnerAction {
9596
}
9697
}
9798

98-
pub fn insert_version_owner_action(
99-
conn: &mut impl Conn,
100-
version_id_: i32,
101-
user_id_: i32,
102-
api_token_id_: Option<i32>,
103-
action_: VersionAction,
104-
) -> QueryResult<VersionOwnerAction> {
105-
use diesel::RunQueryDsl;
106-
use version_owner_actions::dsl::{action, api_token_id, user_id, version_id};
107-
108-
diesel::insert_into(version_owner_actions::table)
109-
.values((
110-
version_id.eq(version_id_),
111-
user_id.eq(user_id_),
112-
api_token_id.eq(api_token_id_),
113-
action.eq(action_),
114-
))
115-
.get_result(conn)
99+
#[derive(Insertable, Debug, Builder)]
100+
#[diesel(table_name = version_owner_actions, check_for_backend(diesel::pg::Pg))]
101+
pub struct NewVersionOwnerAction {
102+
version_id: i32,
103+
user_id: i32,
104+
api_token_id: Option<i32>,
105+
#[builder(into)]
106+
action: VersionAction,
107+
}
108+
109+
impl NewVersionOwnerAction {
110+
pub fn insert(&self, conn: &mut impl Conn) -> QueryResult<VersionOwnerAction> {
111+
use diesel::RunQueryDsl;
112+
113+
diesel::insert_into(version_owner_actions::table)
114+
.values(self)
115+
.get_result(conn)
116+
}
116117
}

0 commit comments

Comments
 (0)