Skip to main content

lariv_rs/docs/
patch.rs

1//! Query patchers for list/detail layers.
2//!
3//! # Query patchers
4//!
5//! [`QueryPatcher`](crate::layers::QueryPatcher) modifies SeaORM selects before list or detail
6//! layers execute. Use them for:
7//!
8//! - Eager-loading relations (avoid N+1 queries)
9//! - Tenant or account scoping (`WHERE account_id = ?`)
10//! - Full-text search filters from query params
11//! - Custom sort orders
12//!
13//! ```ignore
14//! use lariv_rs::layers::QueryPatcher;
15//! use sea_orm::{ColumnTrait, QueryFilter, QuerySelect};
16//!
17//! struct PublishedOnly;
18//!
19//! impl QueryPatcher<BlogPostEntity> for PublishedOnly {
20//!     fn patch(&self, query: sea_orm::Select<BlogPostEntity>) -> sea_orm::Select<BlogPostEntity> {
21//!         query.filter(blog_post::Column::Published.eq(true))
22//!     }
23//! }
24//!
25//! // Attach to DetailLayer via query_patchers field
26//! ```
27//!
28//! Fold multiple patchers as an HList with [`FoldQueryPatchers`](crate::layers::FoldQueryPatchers).
29//!
30//! # Built-in patterns
31//!
32//! The blog plugin demonstrates tag hierarchy filters; the users plugin applies role-based
33//! query scoping on list views. Browse those plugins' `layers.rs` files for real patcher impls.