pub struct QuantRepository(/* private fields */);Expand description
Repository for Quant entities.
All standard CRUD, soft-delete, pagination, and bulk methods are
provided automatically via Deref to backbone_orm::GenericCrudRepository.
Implementations§
Source§impl QuantRepository
Hand-written quant SQL — the reservation apex. Lives here (not in the move engine) per the
module’s 4-layer rule: services orchestrate, repositories hold SQL.
impl QuantRepository
Hand-written quant SQL — the reservation apex. Lives here (not in the move engine) per the module’s 4-layer rule: services orchestrate, repositories hold SQL.
Sourcepub async fn lock_or_init(
&self,
conn: &mut PgConnection,
dims: QuantDims,
) -> Result<QuantRow, Error>
pub async fn lock_or_init( &self, conn: &mut PgConnection, dims: QuantDims, ) -> Result<QuantRow, Error>
Lock the quant row for a dimension tuple FOR UPDATE, creating a zeroed row if absent —
the reservation-engine analogue of BinRepository::lock_or_init.
This row lock is what serializes competing reservations: two _action_assign calls
racing for the same stock queue on this row; the second reads the first’s committed
reservation once the lock is granted (READ COMMITTED re-evaluates the row under lock), so
reserved_quantity can never exceed what the on-hand actually allowed (R22).
Creation is serialized by a transaction-scoped advisory lock on the dimension key because
the partial unique index (item, location, lot, package, owner) WHERE deleted_at IS NULL
does NOT dedup NULL dimensions — without the advisory lock two first-writers could both
insert. The lock auto-releases at commit/rollback of the caller’s transaction.
Sourcepub async fn lock_or_init_on(
conn: &mut PgConnection,
dims: QuantDims,
) -> Result<QuantRow, Error>
pub async fn lock_or_init_on( conn: &mut PgConnection, dims: QuantDims, ) -> Result<QuantRow, Error>
Self::lock_or_init for a caller that holds no repository: every path that may create
a quant goes through this one, so they all take the same creation lock.
Sourcepub async fn adjust_reserved(
&self,
conn: &mut PgConnection,
quant_id: Uuid,
delta: Decimal,
) -> Result<QuantRow, Error>
pub async fn adjust_reserved( &self, conn: &mut PgConnection, quant_id: Uuid, delta: Decimal, ) -> Result<QuantRow, Error>
The RESERVED step of _synchronize_quant (spec §3): move delta onto
reserved_quantity — the authoritative counter. available_quantity (the stored T2
compute) is rewritten in the SAME statement as the derived shadow quantity - reserved,
so it can never drift. The caller holds the row’s FOR UPDATE from Self::lock_or_init.
delta > 0 reserves; delta < 0 releases. The table CHECK (reserved_quantity >= 0)
backstops release-over-reserve (a raw-SQL writer cannot underflow it — ADR-0015).
Sourcepub async fn apply_qty(
&self,
conn: &mut PgConnection,
quant_id: Uuid,
qty_delta: Decimal,
reserved_delta: Decimal,
) -> Result<QuantRow, Error>
pub async fn apply_qty( &self, conn: &mut PgConnection, quant_id: Uuid, qty_delta: Decimal, reserved_delta: Decimal, ) -> Result<QuantRow, Error>
The AVAILABLE step of _synchronize_quant (spec §3): physically move stock —
qty_delta onto quantity (negative = stock leaves this quant), plus a simultaneous
reserved_delta (normally the release of the reservation this move consumed). The stored
T2 compute is rewritten in lockstep. Stamp in_date on first arrival (FIFO ordering
within the lot) when the quant transitions to a positive on-hand from non-positive.
Sourcepub async fn fetch_reservation_candidates(
&self,
conn: &mut PgConnection,
item_id: Uuid,
location_id: Uuid,
) -> Result<Vec<QuantRow>, Error>
pub async fn fetch_reservation_candidates( &self, conn: &mut PgConnection, item_id: Uuid, location_id: Uuid, ) -> Result<Vec<QuantRow>, Error>
Reservation candidates at one (item, location): the quants with free availability,
oldest arrival first (in_date FIFO ordering — the default removal strategy; explicit
fifo/lifo/fefo strategies layer on top when the tracking surface lands). Takes the
caller’s transaction: _action_assign locks each candidate as it reserves it.
Sourcepub async fn recompute_reserved_from_mirror(
&self,
conn: &mut PgConnection,
quant_id: Uuid,
dims: QuantDims,
) -> Result<QuantRow, Error>
pub async fn recompute_reserved_from_mirror( &self, conn: &mut PgConnection, quant_id: Uuid, dims: QuantDims, ) -> Result<QuantRow, Error>
Re-derive one quant’s authoritative reserved_quantity from the MIRROR arm: the sum of
the live move-line quantities matching this quant’s dimension tuple (state not
done/cancel). This is the triangle’s self-heal — the reserved step of
_synchronize_quant after a move’s lines flip out of the live set (done or cancel),
including the partial-validate case where an operator shrinks a line below what it had
reserved (the residual would otherwise stay held by no move). The mirror can only ever
reflect reservations the engine minted, so the SUM is the truth by construction.
Takes the caller’s transaction; the caller holds the quant’s FOR UPDATE from
Self::lock_or_init. Returns the recomputed row.
Source§impl QuantRepository
impl QuantRepository
Sourcepub async fn fetch_on_hand(
&self,
pool: &PgPool,
item_id: Uuid,
location_id: Uuid,
) -> Result<QuantOnHandRow, Error>
pub async fn fetch_on_hand( &self, pool: &PgPool, item_id: Uuid, location_id: Uuid, ) -> Result<QuantOnHandRow, Error>
SUM(quantity) / SUM(reserved_quantity) over one (item, location). Zeroed row when no quant exists (an unreceived item is unavailable, not an error).
Sourcepub async fn fetch_warehouse_on_hand(
&self,
pool: &PgPool,
item_ids: &[Uuid],
warehouse_id: Uuid,
) -> Result<Vec<QuantWarehouseRow>, Error>
pub async fn fetch_warehouse_on_hand( &self, pool: &PgPool, item_ids: &[Uuid], warehouse_id: Uuid, ) -> Result<Vec<QuantWarehouseRow>, Error>
One warehouse-scope availability row (the shop-pivot read): SUM(quantity) /
SUM(reserved_quantity) over every quant whose location belongs to the pivot warehouse and
holds stock (usage internal). available is NOT read off the stored
available_quantity column — the caller computes on_hand − reserved per call, so the
number is fresh off the reservation triangle regardless of any stored-compute staleness.
Batch over item_ids = ANY($1); items with no quant rows in the warehouse are simply
absent from the result (the caller projects them as zeroed, unavailable rows — an
unreceived item is unavailable, not an error). Pool-based and org-scoped: the read rides
the ambient org scope the composing service set per request (ADR-0029).
Methods from Deref<Target = GenericCrudRepository<Quant, SoftDelete>>§
pub fn pool(&self) -> &Pool<Postgres>
pub fn table_name(&self) -> &str
Sourcepub async fn create(&self, entity: &T) -> Result<T, Error>
pub async fn create(&self, entity: &T) -> Result<T, Error>
Insert a new entity row and return the created row.
Sourcepub async fn bulk_create(&self, entities: &[T]) -> Result<Vec<T>, Error>
pub async fn bulk_create(&self, entities: &[T]) -> Result<Vec<T>, Error>
Insert multiple entity rows inside a single transaction.
Sourcepub async fn run_filtered_query(
&self,
pagination: PaginationParams,
base_condition: Option<&str>,
filters: &HashMap<String, String>,
column_types: &HashMap<String, String>,
search_fields: &[&str],
) -> Result<PaginatedResult<T>, Error>
pub async fn run_filtered_query( &self, pagination: PaginationParams, base_condition: Option<&str>, filters: &HashMap<String, String>, column_types: &HashMap<String, String>, search_fields: &[&str], ) -> Result<PaginatedResult<T>, Error>
Execute a filtered / paginated query against this entity’s table.
base_condition — when Some, it is inserted as the __base_condition
filter key which the ORM injects verbatim into the WHERE clause. Use
this to add soft-delete guards without touching the caller-supplied
filters.
NOTE: prefer the *_scoped entry points for anything a client can reach —
they compose the company fence into this condition. This raw form applies no
fence and is for internal/job callers that have already established scope.
Sourcepub async fn run_aggregate_query(
&self,
spec: &AggregateSpec,
base_condition: Option<&str>,
filters: &HashMap<String, String>,
column_types: &HashMap<String, String>,
search_fields: &[&str],
) -> Result<AggregateResult, Error>
pub async fn run_aggregate_query( &self, spec: &AggregateSpec, base_condition: Option<&str>, filters: &HashMap<String, String>, column_types: &HashMap<String, String>, search_fields: &[&str], ) -> Result<AggregateResult, Error>
The aggregate twin of Self::run_filtered_query.
Takes the same base_condition so an aggregate is computed over exactly
the row set the matching list would return — a total that counted
soft-deleted rows, or another tenant’s, would be wrong in a way no
caller could see.
Sourcepub async fn find_by_text_field(
&self,
field: &str,
value: &str,
) -> Result<Option<T>, Error>
pub async fn find_by_text_field( &self, field: &str, value: &str, ) -> Result<Option<T>, Error>
Find an active entity by a unique text field.
Filters metadata->>'deleted_at' IS NULL automatically.
Sourcepub async fn exists_by_text_field(
&self,
field: &str,
value: &str,
) -> Result<bool, Error>
pub async fn exists_by_text_field( &self, field: &str, value: &str, ) -> Result<bool, Error>
Check existence by a unique text field (active records only).
Sourcepub async fn find_by_uuid_field(
&self,
field: &str,
value: Uuid,
) -> Result<Option<T>, Error>
pub async fn find_by_uuid_field( &self, field: &str, value: Uuid, ) -> Result<Option<T>, Error>
Find an active entity by a unique UUID field.
Sourcepub async fn exists_by_uuid_field(
&self,
field: &str,
value: Uuid,
) -> Result<bool, Error>
pub async fn exists_by_uuid_field( &self, field: &str, value: Uuid, ) -> Result<bool, Error>
Check existence by a unique UUID field (active records only).
Sourcepub async fn list_paginated_filtered(
&self,
pagination: PaginationParams,
filters: Option<&HashMap<String, String>>,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_paginated_filtered( &self, pagination: PaginationParams, filters: Option<&HashMap<String, String>>, ) -> Result<PaginatedResult<T>, Error>
Paginate active entities with filter and search support.
Requires T: EntityRepoMeta for column type hints and search fields.
Sourcepub async fn aggregate_filtered(
&self,
spec: &AggregateSpec,
filters: Option<&HashMap<String, String>>,
) -> Result<AggregateResult, Error>
pub async fn aggregate_filtered( &self, spec: &AggregateSpec, filters: Option<&HashMap<String, String>>, ) -> Result<AggregateResult, Error>
Group and reduce active entities, skipping the soft-deleted.
Sourcepub async fn list_paginated_filtered_scoped(
&self,
pagination: PaginationParams,
filters: Option<&HashMap<String, String>>,
company: Option<Uuid>,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_paginated_filtered_scoped( &self, pagination: PaginationParams, filters: Option<&HashMap<String, String>>, company: Option<Uuid>, ) -> Result<PaginatedResult<T>, Error>
Paginate active entities, fenced to company.
The company-scoped counterpart of Self::list_paginated_filtered and the one any
client-reachable read should use. Fails closed: a fenced entity with no company
returns MissingCompanyScope rather than every company’s rows.
The fence is ANDed into the same __base_condition the soft-delete guard uses, so
it lands in SQL — which is what keeps total honest. A post-filter in the handler
would fetch limit rows and return the survivors, leaving callers unable to tell
“end of data” from “filtered”, and could not fix COUNT at all.
Sourcepub async fn list_deleted_filtered_scoped(
&self,
pagination: PaginationParams,
filters: Option<&HashMap<String, String>>,
company: Option<Uuid>,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_deleted_filtered_scoped( &self, pagination: PaginationParams, filters: Option<&HashMap<String, String>>, company: Option<Uuid>, ) -> Result<PaginatedResult<T>, Error>
Paginate soft-deleted entities, fenced to company.
/trash is the worse leak of the two: it serves rows whose owners were told the
data is gone. Same fence, same fail-closed contract.
Sourcepub async fn list_deleted_filtered(
&self,
pagination: PaginationParams,
filters: Option<&HashMap<String, String>>,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_deleted_filtered( &self, pagination: PaginationParams, filters: Option<&HashMap<String, String>>, ) -> Result<PaginatedResult<T>, Error>
Paginate soft-deleted entities with filter support.
Sourcepub async fn find_by_id(&self, id: &str) -> Result<Option<T>, Error>
pub async fn find_by_id(&self, id: &str) -> Result<Option<T>, Error>
Find an active (non-deleted) entity by primary key.
Sourcepub async fn find_all(&self) -> Result<Vec<T>, Error>
pub async fn find_all(&self) -> Result<Vec<T>, Error>
Return all active (non-deleted) entities.
Sourcepub async fn update(&self, id: &str, entity: &T) -> Result<Option<T>, Error>
pub async fn update(&self, id: &str, entity: &T) -> Result<Option<T>, Error>
Full update — skips silently if the record is already soft-deleted.
Sourcepub async fn delete(&self, id: &str) -> Result<bool, Error>
pub async fn delete(&self, id: &str) -> Result<bool, Error>
Soft-delete an entity (sets metadata.deleted_at).
Sourcepub async fn exists(&self, id: &str) -> Result<bool, Error>
pub async fn exists(&self, id: &str) -> Result<bool, Error>
Return true if an active entity with the given ID exists.
Sourcepub async fn list_paginated(
&self,
pagination: PaginationParams,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_paginated( &self, pagination: PaginationParams, ) -> Result<PaginatedResult<T>, Error>
Paginate active entities (most-recent-first by ID).
Sourcepub async fn soft_delete(&self, id: &str) -> Result<bool, Error>
pub async fn soft_delete(&self, id: &str) -> Result<bool, Error>
Set metadata.deleted_at to NOW() (soft delete).
Sourcepub async fn restore(&self, id: &str) -> Result<Option<T>, Error>
pub async fn restore(&self, id: &str) -> Result<Option<T>, Error>
Remove deleted_at from metadata, restoring the entity.
Sourcepub async fn list_deleted(
&self,
pagination: PaginationParams,
) -> Result<PaginatedResult<T>, Error>
pub async fn list_deleted( &self, pagination: PaginationParams, ) -> Result<PaginatedResult<T>, Error>
Paginate soft-deleted entities (trash view).
Sourcepub async fn empty_trash(&self) -> Result<u64, Error>
pub async fn empty_trash(&self) -> Result<u64, Error>
Permanently delete all soft-deleted rows (empty trash).
Sourcepub async fn find_deleted_by_id(&self, id: &str) -> Result<Option<T>, Error>
pub async fn find_deleted_by_id(&self, id: &str) -> Result<Option<T>, Error>
Find a soft-deleted entity by primary key.
Sourcepub async fn permanent_delete(&self, id: &str) -> Result<bool, Error>
pub async fn permanent_delete(&self, id: &str) -> Result<bool, Error>
Permanently delete a soft-deleted entity by primary key.
Sourcepub async fn count_active(&self) -> Result<u64, Error>
pub async fn count_active(&self) -> Result<u64, Error>
Count active (non-deleted) entities.
Sourcepub async fn count_deleted(&self) -> Result<u64, Error>
pub async fn count_deleted(&self) -> Result<u64, Error>
Count soft-deleted entities.
Sourcepub async fn bulk_soft_delete(&self, ids: &[String]) -> Result<u64, Error>
pub async fn bulk_soft_delete(&self, ids: &[String]) -> Result<u64, Error>
Soft-delete many active rows atomically.
Sourcepub async fn bulk_restore(&self, ids: &[String]) -> Result<Vec<T>, Error>
pub async fn bulk_restore(&self, ids: &[String]) -> Result<Vec<T>, Error>
Restore many soft-deleted rows atomically, returning the restored rows.
Sourcepub async fn bulk_permanent_delete(&self, ids: &[String]) -> Result<u64, Error>
pub async fn bulk_permanent_delete(&self, ids: &[String]) -> Result<u64, Error>
Permanently delete many soft-deleted rows atomically.
Sourcepub async fn restore_all(&self) -> Result<Vec<T>, Error>
pub async fn restore_all(&self) -> Result<Vec<T>, Error>
Restore every soft-deleted row, returning the restored rows. A single
UPDATE ... RETURNING is atomic, and the returned rows let the service
layer emit a Restored event per entity.
Trait Implementations§
Source§impl CrudRepository<Quant> for QuantRepository
impl CrudRepository<Quant> for QuantRepository
?include= relations: fetch rows from table by id list, as JSON
(raw row_to_json). table comes from EntityRepoMeta::relations()
(generator-emitted), never client input. Default: no expansion. The
Postgres-backed generated repos override this via impl_crud_repository!.Source§fn create<'life0, 'async_trait>(
&'life0 self,
entity: Quant,
) -> Pin<Box<dyn Future<Output = Result<Quant, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create<'life0, 'async_trait>(
&'life0 self,
entity: Quant,
) -> Pin<Box<dyn Future<Output = Result<Quant, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn find_by_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn find_by_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn find_by_id_including_deleted<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn find_by_id_including_deleted<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn update<'life0, 'async_trait>(
&'life0 self,
entity: Quant,
) -> Pin<Box<dyn Future<Output = Result<Quant, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update<'life0, 'async_trait>(
&'life0 self,
entity: Quant,
) -> Pin<Box<dyn Future<Output = Result<Quant, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn soft_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn soft_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn restore<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn restore<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn hard_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn hard_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn list_filtered<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_filtered<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn list_filtered_with_info<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, PaginationInfo), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_filtered_with_info<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, PaginationInfo), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
list_filtered, carrying the pagination info (cursor positions
included) so the HTTP layer can surface keyset paging. Default: the
tuple form with the cursor fields absent; the generated Postgres
repositories override this with the real keyset walk.Source§fn table_name(&self) -> Option<&str>
fn table_name(&self) -> Option<&str>
list_filtered. Read morefn aggregate_filtered<'life0, 'life1, 'async_trait>(
&'life0 self,
spec: &'life1 AggregateSpec,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<AggregateResult, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_deleted<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_deleted<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Quant>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn count_deleted<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_deleted<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn bulk_create<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Quant>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn bulk_create<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Quant>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn empty_trash<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn empty_trash<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn bulk_soft_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn bulk_soft_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn bulk_restore<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn bulk_restore<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn bulk_hard_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn bulk_hard_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<u64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn restore_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn restore_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Quant>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for QuantRepository
impl !UnwindSafe for QuantRepository
impl Freeze for QuantRepository
impl Send for QuantRepository
impl Sync for QuantRepository
impl Unpin for QuantRepository
impl UnsafeUnpin for QuantRepository
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more