Skip to content

Commit d727811

Browse files
committed
refactor: [#801] fixed filtering and sorting not working
1 parent 357a21f commit d727811

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

src/databases/mysql.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::models::torrent_file::{
1919
};
2020
use crate::models::torrent_tag::{TagId, TorrentTag};
2121
use crate::models::tracker_key::TrackerKey;
22-
use crate::models::user::{User, UserAuthentication, UserCompact, UserId, UserProfile};
22+
use crate::models::user::{User, UserAuthentication, UserCompact, UserId, UserListing, UserProfile};
2323
use crate::services::torrent::{CanonicalInfoHashGroup, DbTorrentInfoHash};
2424
use crate::utils::clock::{self, datetime_now, DATETIME_FORMAT};
2525
use crate::utils::hex::from_bytes;
@@ -204,22 +204,18 @@ impl Database for Mysql {
204204
match sanitized_filter {
205205
UsersFilters::EmailNotVerified => filter_query.push_str("email_verified = false"),
206206
UsersFilters::EmailVerified => filter_query.push_str("email_verified = true"),
207-
_ => break,
207+
_ => continue,
208208
};
209209

210-
let mut str = format!("'{}'", filter_query);
210+
let mut str = format!("AND {}", filter_query);
211211
if i > 0 {
212212
str = format!(" AND {str}");
213213
}
214214
where_filters.push_str(&str);
215215
i += 1;
216216
}
217217
}
218-
if where_filters.is_empty() {
219-
String::new()
220-
} else {
221-
String::new()
222-
}
218+
where_filters
223219
} else {
224220
String::new()
225221
};
@@ -254,7 +250,7 @@ impl Database for Mysql {
254250

255251
query_string = format!("{query_string} ORDER BY {sort_query} LIMIT ?, ?");
256252

257-
let res: Vec<UserProfile> = sqlx::query_as::<_, UserProfile>(&query_string)
253+
let res: Vec<UserListing> = sqlx::query_as::<_, UserListing>(&query_string)
258254
.bind(user_name.clone())
259255
.bind(i64::saturating_add_unsigned(0, offset))
260256
.bind(limit)

src/databases/sqlite.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::models::torrent_file::{
1919
};
2020
use crate::models::torrent_tag::{TagId, TorrentTag};
2121
use crate::models::tracker_key::TrackerKey;
22-
use crate::models::user::{User, UserAuthentication, UserCompact, UserId, UserProfile};
22+
use crate::models::user::{User, UserAuthentication, UserCompact, UserId, UserListing, UserProfile};
2323
use crate::services::torrent::{CanonicalInfoHashGroup, DbTorrentInfoHash};
2424
use crate::utils::clock::{self, datetime_now, DATETIME_FORMAT};
2525
use crate::utils::hex::from_bytes;
@@ -205,22 +205,18 @@ impl Database for Sqlite {
205205
match sanitized_filter {
206206
UsersFilters::EmailNotVerified => filter_query.push_str("email_verified = false"),
207207
UsersFilters::EmailVerified => filter_query.push_str("email_verified = true"),
208-
_ => break,
208+
_ => continue,
209209
};
210210

211-
let mut str = format!("'{}'", filter_query);
211+
let mut str = format!("AND {}", filter_query);
212212
if i > 0 {
213213
str = format!(" AND {str}");
214214
}
215215
where_filters.push_str(&str);
216216
i += 1;
217217
}
218218
}
219-
if where_filters.is_empty() {
220-
String::new()
221-
} else {
222-
String::new()
223-
}
219+
where_filters
224220
} else {
225221
String::new()
226222
};
@@ -255,13 +251,16 @@ impl Database for Sqlite {
255251

256252
query_string = format!("{query_string} ORDER BY {sort_query} LIMIT ?, ?");
257253

258-
let res: Vec<UserProfile> = sqlx::query_as::<_, UserProfile>(&query_string)
254+
let res: Vec<UserListing> = sqlx::query_as::<_, UserListing>(&query_string)
259255
.bind(user_name.clone())
260256
.bind(i64::saturating_add_unsigned(0, offset))
261257
.bind(limit)
262258
.fetch_all(&self.pool)
263259
.await
264-
.map_err(|_| database::Error::Error)?;
260+
.map_err(|e| {
261+
eprintln!("Database error: {:?}", e);
262+
database::Error::Error
263+
})?;
265264

266265
Ok(UserProfilesResponse {
267266
total: u32::try_from(count).expect("variable `count` is larger than u32"),

src/services/user.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn no_email() -> String {
3636
pub struct ListingRequest {
3737
/// Expects comma separated string
3838
pub filters: Option<String>,
39-
pub sort: Option<UsersSorting>,
39+
pub sort: Option<String>,
4040
pub page_size: Option<u8>,
4141
pub page: Option<u32>,
4242
pub search: Option<String>,
@@ -409,7 +409,15 @@ impl ListingService {
409409

410410
let offset = u64::from(page * u32::from(page_size));
411411

412-
let sort = request.sort.unwrap_or(UsersSorting::UsernameAZ);
412+
let sort = request.sort.clone().unwrap_or("UsernameAZ".to_string());
413+
414+
let sort = match sort.as_str() {
415+
"dateRegisteredASC" => UsersSorting::DateRegisteredNewest,
416+
"dateRegisteredDESC" => UsersSorting::DateRegisteredOldest,
417+
"usernameASC" => UsersSorting::UsernameAZ,
418+
"usernameDESC" => UsersSorting::UsernameZA,
419+
_ => UsersSorting::UsernameAZ,
420+
};
413421

414422
let filters = request.filters.as_csv::<String>().unwrap_or(None);
415423

0 commit comments

Comments
 (0)