diff --git a/crates/crates_io_database/src/models/krate.rs b/crates/crates_io_database/src/models/krate.rs index 7b84462aa74..6a8a926891e 100644 --- a/crates/crates_io_database/src/models/krate.rs +++ b/crates/crates_io_database/src/models/krate.rs @@ -18,18 +18,6 @@ use tracing::instrument; use super::Team; -#[derive(Debug, Queryable, Identifiable, Associations, Clone, Copy)] -#[diesel( - table_name = recent_crate_downloads, - check_for_backend(diesel::pg::Pg), - primary_key(crate_id), - belongs_to(Crate), -)] -pub struct RecentCrateDownloads { - pub crate_id: i32, - pub downloads: i32, -} - #[derive(Debug, Clone, Queryable, Selectable)] #[diesel(table_name = crates, check_for_backend(diesel::pg::Pg))] pub struct CrateName { diff --git a/crates/crates_io_database/src/models/mod.rs b/crates/crates_io_database/src/models/mod.rs index 25c7726ecfa..d69fbfcbb7f 100644 --- a/crates/crates_io_database/src/models/mod.rs +++ b/crates/crates_io_database/src/models/mod.rs @@ -10,7 +10,7 @@ pub use self::download::VersionDownload; pub use self::email::{Email, NewEmail}; pub use self::follow::Follow; pub use self::keyword::{CrateKeyword, Keyword}; -pub use self::krate::{Crate, CrateName, NewCrate, RecentCrateDownloads}; +pub use self::krate::{Crate, CrateName, NewCrate}; pub use self::owner::{CrateOwner, Owner, OwnerKind}; pub use self::team::{NewTeam, Team}; pub use self::token::ApiToken; diff --git a/src/controllers/krate/metadata.rs b/src/controllers/krate/metadata.rs index f2416327718..8132279bce8 100644 --- a/src/controllers/krate/metadata.rs +++ b/src/controllers/krate/metadata.rs @@ -7,8 +7,8 @@ use crate::app::AppState; use crate::controllers::krate::CratePath; use crate::models::{ - Category, Crate, CrateCategory, CrateKeyword, Keyword, RecentCrateDownloads, TopVersions, User, - Version, VersionOwnerAction, + Category, Crate, CrateCategory, CrateKeyword, Keyword, TopVersions, User, Version, + VersionOwnerAction, }; use crate::schema::*; use crate::util::errors::{ @@ -136,7 +136,7 @@ pub async fn find_crate( ), load_keywords(&mut conn, &krate, include.keywords), load_categories(&mut conn, &krate, include.categories), - load_recent_downloads(&mut conn, &krate, include.downloads), + load_recent_downloads(&mut conn, krate.id, include.downloads), )?; let ids = versions_and_publishers @@ -285,16 +285,17 @@ fn load_categories<'a>( async move { Ok(Some(fut.await?)) }.boxed() } -fn load_recent_downloads<'a>( +fn load_recent_downloads( conn: &mut AsyncPgConnection, - krate: &'a Crate, + crate_id: i32, includes: bool, -) -> BoxFuture<'a, AppResult>> { +) -> BoxFuture<'_, AppResult>> { if !includes { return always_ready(|| Ok(None)).boxed(); } - let fut = RecentCrateDownloads::belonging_to(&krate) + let fut = recent_crate_downloads::table + .filter(recent_crate_downloads::crate_id.eq(crate_id)) .select(recent_crate_downloads::downloads) .get_result(conn); async move { Ok(fut.await.optional()?) }.boxed()