lariv-rs 0.1.0

Compile-time plugin web application framework built on Axum, SeaORM, Maud, and HTMX
Documentation
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Select, sea_query::Expr};

use crate::plugins::users::state::AuthContext;

use super::entities::customer::{self, Entity as CustomerEntity};

pub fn scope_customers(
    query: Select<CustomerEntity>,
    auth: &AuthContext,
) -> Select<CustomerEntity> {
    if auth.user.is_superuser {
        return query;
    }
    query.filter(Expr::cust("1 = 0"))
}

pub fn apply_customer_filters(
    mut query: Select<CustomerEntity>,
    name: Option<&str>,
    email: Option<&str>,
) -> Select<CustomerEntity> {
    if let Some(n) = name.filter(|s| !s.is_empty()) {
        query = query.filter(customer::Column::Name.contains(n));
    }
    if let Some(e) = email.filter(|s| !s.is_empty()) {
        query = query.filter(customer::Column::Email.contains(e));
    }
    query
}

pub async fn find_customer_scoped(
    db: &DatabaseConnection,
    id: i64,
    auth: &AuthContext,
) -> Option<customer::Model> {
    let query = CustomerEntity::find_by_id(id);
    crate::web::opt_or_log(
        scope_customers(query, auth).one(db).await,
        "find customer scoped",
    )
}