feat(gpodder): add user filter for paginated users method

This commit is contained in:
Jef Roosens 2025-06-29 10:23:30 +02:00
parent c7c5cf889c
commit fce301080c
No known key found for this signature in database
GPG key ID: 21FD3D77D56BAF49
5 changed files with 41 additions and 15 deletions

View file

@ -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)
}
}