feat(gpodder): add user filter for paginated users method
This commit is contained in:
parent
c7c5cf889c
commit
fce301080c
5 changed files with 41 additions and 15 deletions
|
|
@ -143,16 +143,31 @@ impl gpodder::GpodderAuthStore for SqliteRepository {
|
|||
.map_err(AuthErr::from)
|
||||
}
|
||||
|
||||
fn paginated_users(&self, page: gpodder::Page) -> Result<Vec<gpodder::User>, AuthErr> {
|
||||
Ok(users::table
|
||||
.select(User::as_select())
|
||||
.order(users::username.asc())
|
||||
.offset((page.page * page.per_page) as i64)
|
||||
.limit(page.per_page as i64)
|
||||
.get_results(&mut self.pool.get().map_err(DbError::from)?)
|
||||
.map_err(DbError::from)?
|
||||
.into_iter()
|
||||
.map(gpodder::User::from)
|
||||
.collect())
|
||||
fn paginated_users(
|
||||
&self,
|
||||
page: gpodder::Page,
|
||||
filter: &gpodder::UserFilter,
|
||||
) -> Result<Vec<gpodder::User>, AuthErr> {
|
||||
(|| {
|
||||
let mut query = users::table
|
||||
.select(User::as_select())
|
||||
.order(users::username.asc())
|
||||
.offset((page.page * page.per_page) as i64)
|
||||
.limit(page.per_page as i64)
|
||||
.into_boxed();
|
||||
|
||||
if let Some(username) = &filter.username {
|
||||
// Case insensitive by default for SQLite
|
||||
query = query.filter(users::username.like(format!("%{username}%")));
|
||||
}
|
||||
|
||||
Ok::<_, DbError>(
|
||||
query
|
||||
.load_iter(&mut self.pool.get()?)?
|
||||
.map(|res| res.map(gpodder::User::from))
|
||||
.collect::<Result<Vec<_>, _>>()?,
|
||||
)
|
||||
})()
|
||||
.map_err(AuthErr::from)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue