@@ -22,12 +22,16 @@ const NUM_ITEMS: i64 = 10;
22
22
23
23
#[ derive( Serialize , Deserialize ) ]
24
24
pub struct SyncCrateFeed {
25
+ crate_id : Option < i32 > ,
25
26
name : String ,
26
27
}
27
28
28
29
impl SyncCrateFeed {
29
- pub fn new ( name : String ) -> Self {
30
- Self { name }
30
+ pub fn new ( crate_id : i32 , name : String ) -> Self {
31
+ Self {
32
+ crate_id : Some ( crate_id) ,
33
+ name,
34
+ }
31
35
}
32
36
}
33
37
@@ -43,8 +47,13 @@ impl BackgroundJob for SyncCrateFeed {
43
47
44
48
info ! ( "Loading latest {NUM_ITEMS} version updates for `{name}` from the database…" ) ;
45
49
let mut conn = ctx. deadpool . get ( ) . await ?;
50
+ let crate_id = if let Some ( crate_id) = self . crate_id {
51
+ crate_id
52
+ } else {
53
+ load_crate_id ( name, & mut conn) . await ?
54
+ } ;
46
55
47
- let version_updates = load_version_updates ( name , & mut conn) . await ?;
56
+ let version_updates = load_version_updates ( crate_id , & mut conn) . await ?;
48
57
49
58
let feed_id = FeedId :: Crate { name } ;
50
59
@@ -89,21 +98,28 @@ impl BackgroundJob for SyncCrateFeed {
89
98
}
90
99
}
91
100
101
+ async fn load_crate_id ( name : & str , conn : & mut AsyncPgConnection ) -> QueryResult < i32 > {
102
+ crates:: table
103
+ . filter ( crates:: name. eq ( name) )
104
+ . select ( crates:: id)
105
+ . first :: < i32 > ( conn)
106
+ . await
107
+ }
108
+
92
109
/// Load the latest versions from the database.
93
110
///
94
111
/// This function will load all versions from the database that are younger
95
112
/// than [`ALWAYS_INCLUDE_AGE`]. If there are less than [`NUM_ITEMS`] versions
96
113
/// then the list will be padded with older versions until [`NUM_ITEMS`] are
97
114
/// returned.
98
115
async fn load_version_updates (
99
- name : & str ,
116
+ crate_id : i32 ,
100
117
conn : & mut AsyncPgConnection ,
101
118
) -> QueryResult < Vec < VersionUpdate > > {
102
119
let threshold_dt = chrono:: Utc :: now ( ) . naive_utc ( ) - ALWAYS_INCLUDE_AGE ;
103
120
104
121
let updates = versions:: table
105
- . inner_join ( crates:: table)
106
- . filter ( crates:: name. eq ( name) )
122
+ . filter ( versions:: crate_id. eq ( crate_id) )
107
123
. filter ( versions:: created_at. gt ( threshold_dt) )
108
124
. order ( versions:: created_at. desc ( ) )
109
125
. select ( VersionUpdate :: as_select ( ) )
@@ -116,8 +132,7 @@ async fn load_version_updates(
116
132
}
117
133
118
134
versions:: table
119
- . inner_join ( crates:: table)
120
- . filter ( crates:: name. eq ( name) )
135
+ . filter ( versions:: crate_id. eq ( crate_id) )
121
136
. order ( versions:: created_at. desc ( ) )
122
137
. select ( VersionUpdate :: as_select ( ) )
123
138
. limit ( NUM_ITEMS )
0 commit comments