server: rename RequestFilter to UserRequestFilter

This commit is contained in:
Valentin Tolmer
2022-02-11 09:10:28 +01:00
committed by nitnelave
parent d20bd196bc
commit a1fe703bf0
5 changed files with 55 additions and 49 deletions

View File

@@ -43,10 +43,10 @@ pub struct BindRequest {
}
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
pub enum RequestFilter {
And(Vec<RequestFilter>),
Or(Vec<RequestFilter>),
Not(Box<RequestFilter>),
pub enum UserRequestFilter {
And(Vec<UserRequestFilter>),
Or(Vec<UserRequestFilter>),
Not(Box<UserRequestFilter>),
Equality(String, String),
// Check if a user belongs to a group identified by name.
MemberOf(String),
@@ -93,7 +93,7 @@ pub struct GroupIdAndName(pub GroupId, pub String);
#[async_trait]
pub trait BackendHandler: Clone + Send {
async fn list_users(&self, filters: Option<RequestFilter>) -> Result<Vec<User>>;
async fn list_users(&self, filters: Option<UserRequestFilter>) -> Result<Vec<User>>;
async fn list_groups(&self) -> Result<Vec<Group>>;
async fn get_user_details(&self, user_id: &str) -> Result<User>;
async fn get_group_details(&self, group_id: GroupId) -> Result<GroupIdAndName>;
@@ -116,7 +116,7 @@ mockall::mock! {
}
#[async_trait]
impl BackendHandler for TestBackendHandler {
async fn list_users(&self, filters: Option<RequestFilter>) -> Result<Vec<User>>;
async fn list_users(&self, filters: Option<UserRequestFilter>) -> Result<Vec<User>>;
async fn list_groups(&self) -> Result<Vec<Group>>;
async fn get_user_details(&self, user_id: &str) -> Result<User>;
async fn get_group_details(&self, group_id: GroupId) -> Result<GroupIdAndName>;

View File

@@ -21,10 +21,10 @@ impl SqlBackendHandler {
struct RequiresGroup(bool);
// Returns the condition for the SQL query, and whether it requires joining with the groups table.
fn get_filter_expr(filter: RequestFilter) -> (RequiresGroup, SimpleExpr) {
use RequestFilter::*;
fn get_filter_expr(filter: UserRequestFilter) -> (RequiresGroup, SimpleExpr) {
use UserRequestFilter::*;
fn get_repeated_filter(
fs: Vec<RequestFilter>,
fs: Vec<UserRequestFilter>,
field: &dyn Fn(SimpleExpr, SimpleExpr) -> SimpleExpr,
) -> (RequiresGroup, SimpleExpr) {
let mut requires_group = false;
@@ -74,7 +74,7 @@ fn get_filter_expr(filter: RequestFilter) -> (RequiresGroup, SimpleExpr) {
#[async_trait]
impl BackendHandler for SqlBackendHandler {
async fn list_users(&self, filters: Option<RequestFilter>) -> Result<Vec<User>> {
async fn list_users(&self, filters: Option<UserRequestFilter>) -> Result<Vec<User>> {
let query = {
let mut query_builder = Query::select()
.column((Users::Table, Users::UserId))
@@ -88,11 +88,15 @@ impl BackendHandler for SqlBackendHandler {
.order_by((Users::Table, Users::UserId), Order::Asc)
.to_owned();
if let Some(filter) = filters {
if filter == RequestFilter::Not(Box::new(RequestFilter::And(Vec::new()))) {
if filter
== UserRequestFilter::Not(Box::new(
UserRequestFilter::And(Vec::new()),
))
{
return Ok(Vec::new());
}
if filter != RequestFilter::And(Vec::new())
&& filter != RequestFilter::Or(Vec::new())
if filter != UserRequestFilter::And(Vec::new())
&& filter != UserRequestFilter::Or(Vec::new())
{
let (RequiresGroup(requires_group), condition) = get_filter_expr(filter);
query_builder.and_where(condition);
@@ -516,7 +520,7 @@ mod tests {
}
{
let users = handler
.list_users(Some(RequestFilter::Equality(
.list_users(Some(UserRequestFilter::Equality(
"user_id".to_string(),
"bob".to_string(),
)))
@@ -529,9 +533,9 @@ mod tests {
}
{
let users = handler
.list_users(Some(RequestFilter::Or(vec![
RequestFilter::Equality("user_id".to_string(), "bob".to_string()),
RequestFilter::Equality("user_id".to_string(), "John".to_string()),
.list_users(Some(UserRequestFilter::Or(vec![
UserRequestFilter::Equality("user_id".to_string(), "bob".to_string()),
UserRequestFilter::Equality("user_id".to_string(), "John".to_string()),
])))
.await
.unwrap()
@@ -542,7 +546,7 @@ mod tests {
}
{
let users = handler
.list_users(Some(RequestFilter::Not(Box::new(RequestFilter::Equality(
.list_users(Some(UserRequestFilter::Not(Box::new(UserRequestFilter::Equality(
"user_id".to_string(),
"bob".to_string(),
)))))