Skip to content

Commit 9519ec2

Browse files
authored
Merge pull request #9734 from Turbo87/crate-id-args
Replace `&Crate` arguments with `crate_id: i32`
2 parents b7f1b99 + 53a84fc commit 9519ec2

File tree

7 files changed

+39
-29
lines changed

7 files changed

+39
-29
lines changed

src/controllers/krate/publish.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,11 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
427427
}
428428

429429
// Update all keywords for this crate
430-
Keyword::update_crate(conn, &krate, &keywords)?;
430+
Keyword::update_crate(conn, krate.id, &keywords)?;
431431

432432
// Update all categories for this crate, collecting any invalid categories
433433
// in order to be able to return an error to the user.
434-
let unknown_categories = Category::update_crate(conn, &krate, &categories)?;
434+
let unknown_categories = Category::update_crate(conn, krate.id, &categories)?;
435435
if !unknown_categories.is_empty() {
436436
let unknown_categories = unknown_categories.join(", ");
437437
let domain = &app.config.domain_name;

src/models/category.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl Category {
4444

4545
pub fn update_crate(
4646
conn: &mut impl Conn,
47-
krate: &Crate,
47+
crate_id: i32,
4848
slugs: &[&str],
4949
) -> QueryResult<Vec<String>> {
5050
conn.transaction(|conn| {
@@ -60,14 +60,18 @@ impl Category {
6060
.iter()
6161
.map(|c| CrateCategory {
6262
category_id: c.id,
63-
crate_id: krate.id,
63+
crate_id,
6464
})
6565
.collect::<Vec<_>>();
6666

67-
delete(CrateCategory::belonging_to(krate)).execute(conn)?;
67+
delete(crates_categories::table)
68+
.filter(crates_categories::crate_id.eq(crate_id))
69+
.execute(conn)?;
70+
6871
insert_into(crates_categories::table)
6972
.values(&crate_categories)
7073
.execute(conn)?;
74+
7175
Ok(invalid_categories)
7276
})
7377
}

src/models/keyword.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,26 @@ impl Keyword {
6161
&& chars.all(|c| c.is_ascii_alphanumeric() || c == '_' || c == '-' || c == '+')
6262
}
6363

64-
pub fn update_crate(conn: &mut impl Conn, krate: &Crate, keywords: &[&str]) -> QueryResult<()> {
64+
pub fn update_crate(conn: &mut impl Conn, crate_id: i32, keywords: &[&str]) -> QueryResult<()> {
6565
conn.transaction(|conn| {
6666
let keywords = Keyword::find_or_create_all(conn, keywords)?;
67-
diesel::delete(CrateKeyword::belonging_to(krate)).execute(conn)?;
67+
68+
diesel::delete(crates_keywords::table)
69+
.filter(crates_keywords::crate_id.eq(crate_id))
70+
.execute(conn)?;
71+
6872
let crate_keywords = keywords
6973
.into_iter()
7074
.map(|kw| CrateKeyword {
71-
crate_id: krate.id,
75+
crate_id,
7276
keyword_id: kw.id,
7377
})
7478
.collect::<Vec<_>>();
79+
7580
diesel::insert_into(crates_keywords::table)
7681
.values(&crate_keywords)
7782
.execute(conn)?;
83+
7884
Ok(())
7985
})
8086
}

src/tests/builders/krate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,11 @@ impl<'a> CrateBuilder<'a> {
156156
}
157157

158158
if !self.categories.is_empty() {
159-
Category::update_crate(connection, &krate, &self.categories)?;
159+
Category::update_crate(connection, krate.id, &self.categories)?;
160160
}
161161

162162
if !self.keywords.is_empty() {
163-
Keyword::update_crate(connection, &krate, &self.keywords)?;
163+
Keyword::update_crate(connection, krate.id, &self.keywords)?;
164164
}
165165

166166
if let Some(updated_at) = self.updated_at {

src/tests/routes/categories/get.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,38 +59,38 @@ async fn update_crate() {
5959
let krate = CrateBuilder::new("foo_crate", user.id).expect_build(&mut conn);
6060

6161
// Updating with no categories has no effect
62-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
62+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
6363
assert_eq!(count(&anon, "cat1").await, 0);
6464
assert_eq!(count(&anon, "category-2").await, 0);
6565

6666
// Happy path adding one category
67-
Category::update_crate(&mut conn, &krate, &["cat1"]).unwrap();
67+
Category::update_crate(&mut conn, krate.id, &["cat1"]).unwrap();
6868
assert_eq!(count(&anon, "cat1").await, 1);
6969
assert_eq!(count(&anon, "category-2").await, 0);
7070

7171
// Replacing one category with another
72-
Category::update_crate(&mut conn, &krate, &["category-2"]).unwrap();
72+
Category::update_crate(&mut conn, krate.id, &["category-2"]).unwrap();
7373
assert_eq!(count(&anon, "cat1").await, 0);
7474
assert_eq!(count(&anon, "category-2").await, 1);
7575

7676
// Removing one category
77-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
77+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
7878
assert_eq!(count(&anon, "cat1").await, 0);
7979
assert_eq!(count(&anon, "category-2").await, 0);
8080

8181
// Adding 2 categories
82-
Category::update_crate(&mut conn, &krate, &["cat1", "category-2"]).unwrap();
82+
Category::update_crate(&mut conn, krate.id, &["cat1", "category-2"]).unwrap();
8383
assert_eq!(count(&anon, "cat1").await, 1);
8484
assert_eq!(count(&anon, "category-2").await, 1);
8585

8686
// Removing all categories
87-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
87+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
8888
assert_eq!(count(&anon, "cat1").await, 0);
8989
assert_eq!(count(&anon, "category-2").await, 0);
9090

9191
// Attempting to add one valid category and one invalid category
9292
let invalid_categories =
93-
Category::update_crate(&mut conn, &krate, &["cat1", "catnope"]).unwrap();
93+
Category::update_crate(&mut conn, krate.id, &["cat1", "catnope"]).unwrap();
9494
assert_eq!(invalid_categories, vec!["catnope"]);
9595
assert_eq!(count(&anon, "cat1").await, 1);
9696
assert_eq!(count(&anon, "category-2").await, 0);
@@ -102,7 +102,7 @@ async fn update_crate() {
102102
assert_eq!(json.meta.total, 2);
103103

104104
// Attempting to add a category by display text; must use slug
105-
Category::update_crate(&mut conn, &krate, &["Category 2"]).unwrap();
105+
Category::update_crate(&mut conn, krate.id, &["Category 2"]).unwrap();
106106
assert_eq!(count(&anon, "cat1").await, 0);
107107
assert_eq!(count(&anon, "category-2").await, 0);
108108

@@ -111,7 +111,7 @@ async fn update_crate() {
111111
.values(new_category("cat1::bar", "cat1::bar", "bar crates"))
112112
.execute(&mut conn));
113113

114-
Category::update_crate(&mut conn, &krate, &["cat1", "cat1::bar"]).unwrap();
114+
Category::update_crate(&mut conn, krate.id, &["cat1", "cat1::bar"]).unwrap();
115115

116116
assert_eq!(count(&anon, "cat1").await, 1);
117117
assert_eq!(count(&anon, "cat1::bar").await, 1);

src/tests/routes/crates/list.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ async fn index_queries() {
163163
.execute(&mut conn)
164164
.unwrap();
165165

166-
Category::update_crate(&mut conn, &krate, &["cat1"]).unwrap();
167-
Category::update_crate(&mut conn, &krate2, &["cat1::bar"]).unwrap();
166+
Category::update_crate(&mut conn, krate.id, &["cat1"]).unwrap();
167+
Category::update_crate(&mut conn, krate2.id, &["cat1::bar"]).unwrap();
168168

169169
for cl in search_both(&anon, "category=cat1").await {
170170
assert_eq!(cl.crates.len(), 2);
@@ -870,8 +870,8 @@ async fn test_default_sort_recent() {
870870
.execute(&mut conn)
871871
.unwrap();
872872

873-
Category::update_crate(&mut conn, &green_crate, &["animal"]).unwrap();
874-
Category::update_crate(&mut conn, &potato_crate, &["animal"]).unwrap();
873+
Category::update_crate(&mut conn, green_crate.id, &["animal"]).unwrap();
874+
Category::update_crate(&mut conn, potato_crate.id, &["animal"]).unwrap();
875875

876876
// test that index for categories is sorted by recent_downloads
877877
// by default

src/tests/routes/keywords/read.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,27 +50,27 @@ async fn update_crate() {
5050
Keyword::find_or_create_all(&mut conn, &["kw1", "kw2"]).unwrap();
5151
let krate = CrateBuilder::new("fookey", user.id).expect_build(&mut conn);
5252

53-
Keyword::update_crate(&mut conn, &krate, &[]).unwrap();
53+
Keyword::update_crate(&mut conn, krate.id, &[]).unwrap();
5454
assert_eq!(cnt("kw1", &anon).await, 0);
5555
assert_eq!(cnt("kw2", &anon).await, 0);
5656

57-
Keyword::update_crate(&mut conn, &krate, &["kw1"]).unwrap();
57+
Keyword::update_crate(&mut conn, krate.id, &["kw1"]).unwrap();
5858
assert_eq!(cnt("kw1", &anon).await, 1);
5959
assert_eq!(cnt("kw2", &anon).await, 0);
6060

61-
Keyword::update_crate(&mut conn, &krate, &["kw2"]).unwrap();
61+
Keyword::update_crate(&mut conn, krate.id, &["kw2"]).unwrap();
6262
assert_eq!(cnt("kw1", &anon).await, 0);
6363
assert_eq!(cnt("kw2", &anon).await, 1);
6464

65-
Keyword::update_crate(&mut conn, &krate, &[]).unwrap();
65+
Keyword::update_crate(&mut conn, krate.id, &[]).unwrap();
6666
assert_eq!(cnt("kw1", &anon).await, 0);
6767
assert_eq!(cnt("kw2", &anon).await, 0);
6868

69-
Keyword::update_crate(&mut conn, &krate, &["kw1", "kw2"]).unwrap();
69+
Keyword::update_crate(&mut conn, krate.id, &["kw1", "kw2"]).unwrap();
7070
assert_eq!(cnt("kw1", &anon).await, 1);
7171
assert_eq!(cnt("kw2", &anon).await, 1);
7272

73-
Keyword::update_crate(&mut conn, &krate, &[]).unwrap();
73+
Keyword::update_crate(&mut conn, krate.id, &[]).unwrap();
7474
assert_eq!(cnt("kw1", &anon).await, 0);
7575
assert_eq!(cnt("kw2", &anon).await, 0);
7676
}

0 commit comments

Comments
 (0)