pub struct Attribute {
pub id: Uuid,
pub code: String,
pub name: String,
pub attribute_type: AttributeType,
pub status: CatalogStatus,
pub metadata: AuditMetadata,
}Fields§
§id: Uuid§code: String§name: String§attribute_type: AttributeType§status: CatalogStatus§metadata: AuditMetadataImplementations§
Source§impl Attribute
impl Attribute
Sourcepub fn builder() -> AttributeBuilder
pub fn builder() -> AttributeBuilder
Create a builder for Attribute
Sourcepub fn new(
code: String,
name: String,
attribute_type: AttributeType,
status: CatalogStatus,
) -> Self
pub fn new( code: String, name: String, attribute_type: AttributeType, status: CatalogStatus, ) -> Self
Create a new Attribute with required fields
Sourcepub fn typed_id(&self) -> AttributeId
pub fn typed_id(&self) -> AttributeId
Get a strongly-typed ID for this entity
Sourcepub fn created_at(&self) -> Option<&DateTime<Utc>>
pub fn created_at(&self) -> Option<&DateTime<Utc>>
Get when this entity was created
Sourcepub fn updated_at(&self) -> Option<&DateTime<Utc>>
pub fn updated_at(&self) -> Option<&DateTime<Utc>>
Get when this entity was last updated
Sourcepub fn is_deleted(&self) -> bool
pub fn is_deleted(&self) -> bool
Check if this entity is soft deleted
Sourcepub fn deleted_at(&self) -> Option<&DateTime<Utc>>
pub fn deleted_at(&self) -> Option<&DateTime<Utc>>
Get when this entity was deleted
Sourcepub fn created_by(&self) -> Option<&Uuid>
pub fn created_by(&self) -> Option<&Uuid>
Get who created this entity
Sourcepub fn updated_by(&self) -> Option<&Uuid>
pub fn updated_by(&self) -> Option<&Uuid>
Get who last updated this entity
Sourcepub fn deleted_by(&self) -> Option<&Uuid>
pub fn deleted_by(&self) -> Option<&Uuid>
Get who deleted this entity
Sourcepub fn status(&self) -> &CatalogStatus
pub fn status(&self) -> &CatalogStatus
Get the current status
Sourcepub fn apply_patch(&mut self, fields: HashMap<String, Value>)
pub fn apply_patch(&mut self, fields: HashMap<String, Value>)
Apply partial updates from a map of field name to JSON value
Trait Implementations§
Source§impl ApplyUpdateDto<UpdateAttributeDto> for Attribute
impl ApplyUpdateDto<UpdateAttributeDto> for Attribute
fn apply_update(self, dto: UpdateAttributeDto) -> ServiceResult<Self>
Source§impl CrudRepository<Attribute> for AttributeRepository
impl CrudRepository<Attribute> for AttributeRepository
Hydrate
?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: Attribute,
) -> Pin<Box<dyn Future<Output = Result<Attribute, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create<'life0, 'async_trait>(
&'life0 self,
entity: Attribute,
) -> Pin<Box<dyn Future<Output = Result<Attribute, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create a new entity
Source§fn find_by_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Attribute>, 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<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Find entity by ID (excluding soft-deleted)
Source§fn find_by_id_including_deleted<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Attribute>, 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<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Find entity by ID (including soft-deleted, for trash operations)
Source§fn update<'life0, 'async_trait>(
&'life0 self,
entity: Attribute,
) -> Pin<Box<dyn Future<Output = Result<Attribute, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update<'life0, 'async_trait>(
&'life0 self,
entity: Attribute,
) -> Pin<Box<dyn Future<Output = Result<Attribute, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Update an existing entity
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,
Soft delete an entity
Source§fn restore<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Attribute>, 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<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Restore a soft-deleted entity
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,
Permanently delete an entity
Source§fn list<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Attribute>, 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<Attribute>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List entities with pagination (excluding soft-deleted)
Source§fn list_filtered<'life0, 'async_trait>(
&'life0 self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> Pin<Box<dyn Future<Output = Result<(Vec<Attribute>, 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<Attribute>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List entities with pagination and filters (excluding soft-deleted) Read more
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<Attribute>, 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<Attribute>, 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>
Group and reduce entities under the same filters as
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<Attribute>, 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<Attribute>, u64), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List soft-deleted entities with pagination
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,
Count all entities (excluding soft-deleted)
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,
Count soft-deleted entities
Source§fn bulk_create<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Attribute>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn bulk_create<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Attribute>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Bulk create entities
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,
Permanently delete all soft-deleted entities
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,
Soft-delete many entities by id. Returns the number affected.
Source§fn bulk_restore<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<Vec<Attribute>, 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<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Restore many soft-deleted entities by id. Returns the restored entities.
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,
Permanently delete many entities by id. Returns the number affected.
Source§fn restore_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Attribute>, 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<Attribute>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Restore every soft-deleted entity. Returns the restored entities.
Source§impl<'de> Deserialize<'de> for Attribute
impl<'de> Deserialize<'de> for Attribute
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl EntityRepoMeta for Attribute
impl EntityRepoMeta for Attribute
Source§fn column_types() -> HashMap<String, String>
fn column_types() -> HashMap<String, String>
PostgreSQL type hints for filter/sort (e.g.
{"id": "uuid"}).Source§fn search_fields() -> &'static [&'static str]
fn search_fields() -> &'static [&'static str]
Text columns to include in full-text / ILIKE search.
Source§fn private_fields() -> &'static [&'static str]
fn private_fields() -> &'static [&'static str]
Response fields visible only to the row owner and platform/root callers
(
@private). Stripped for everyone else.Source§fn owner_field() -> Option<&'static str>
fn owner_field() -> Option<&'static str>
The response field (camelCase) holding the owner/company id (
@owner),
compared against the caller’s access scope to decide private-field
visibility. None = the entity has no owner concept.Source§impl From<&Attribute> for AttributeResponseDto
impl From<&Attribute> for AttributeResponseDto
Source§impl From<Attribute> for AttributeResponseDto
impl From<Attribute> for AttributeResponseDto
Source§impl From<Attribute> for AttributeSummaryDto
impl From<Attribute> for AttributeSummaryDto
Source§impl From<CreateAttributeDto> for Attribute
impl From<CreateAttributeDto> for Attribute
Source§fn from(dto: CreateAttributeDto) -> Self
fn from(dto: CreateAttributeDto) -> Self
Converts to this type from the input type.
Source§impl FromCreateDto<CreateAttributeDto> for Attribute
impl FromCreateDto<CreateAttributeDto> for Attribute
fn from_create_dto(dto: CreateAttributeDto) -> ServiceResult<Self>
Source§impl<'a, R: Row> FromRow<'a, R> for Attributewhere
&'a str: ColumnIndex<R>,
Uuid: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
AttributeType: Decode<'a, R::Database> + Type<R::Database>,
CatalogStatus: Decode<'a, R::Database> + Type<R::Database>,
Json<AuditMetadata>: Decode<'a, R::Database> + Type<R::Database>,
impl<'a, R: Row> FromRow<'a, R> for Attributewhere
&'a str: ColumnIndex<R>,
Uuid: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
AttributeType: Decode<'a, R::Database> + Type<R::Database>,
CatalogStatus: Decode<'a, R::Database> + Type<R::Database>,
Json<AuditMetadata>: Decode<'a, R::Database> + Type<R::Database>,
Source§impl PersistentEntity for Attribute
impl PersistentEntity for Attribute
Source§fn set_entity_id(&mut self, id: String)
fn set_entity_id(&mut self, id: String)
Set the entity’s unique identifier
Source§fn set_created_at(&mut self, ts: DateTime<Utc>)
fn set_created_at(&mut self, ts: DateTime<Utc>)
Set creation timestamp
Source§fn set_updated_at(&mut self, ts: DateTime<Utc>)
fn set_updated_at(&mut self, ts: DateTime<Utc>)
Set last update timestamp
Source§fn is_deleted(&self) -> bool
fn is_deleted(&self) -> bool
Check if entity is soft-deleted
Source§fn mark_deleted(&mut self)
fn mark_deleted(&mut self)
Mark entity as deleted (soft delete)
Source§fn generate_id() -> String
fn generate_id() -> String
Generate a new ID for this entity type
Source§impl ResourcePolicy<Attribute> for AttributePolicy
impl ResourcePolicy<Attribute> for AttributePolicy
fn can<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
action: ResourceAction,
_entity: &'life1 Attribute,
ctx: &'life2 AuthContext,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn resource_type() -> &'static strwhere
Self: Sized,
fn resource_type() -> &'static strwhere
Self: Sized,
The resource type name used in permission strings. Read more
Source§fn create_permission() -> &'static strwhere
Self: Sized,
fn create_permission() -> &'static strwhere
Self: Sized,
Permission string required to create this resource.
Source§fn read_permission() -> &'static strwhere
Self: Sized,
fn read_permission() -> &'static strwhere
Self: Sized,
Permission string required to read/fetch this resource.
Source§fn list_permission() -> &'static strwhere
Self: Sized,
fn list_permission() -> &'static strwhere
Self: Sized,
Permission string required to list this resource.
Source§fn update_permission() -> &'static strwhere
Self: Sized,
fn update_permission() -> &'static strwhere
Self: Sized,
Permission string required to fully update this resource.
Source§fn patch_permission() -> &'static strwhere
Self: Sized,
fn patch_permission() -> &'static strwhere
Self: Sized,
Permission string required to partially patch this resource.
Source§fn delete_permission() -> &'static strwhere
Self: Sized,
fn delete_permission() -> &'static strwhere
Self: Sized,
Permission string required to delete this resource.
Source§fn restore_permission() -> &'static strwhere
Self: Sized,
fn restore_permission() -> &'static strwhere
Self: Sized,
Permission string required to restore a soft-deleted resource.
Source§fn explicitly_disabled_actions(&self) -> Vec<ResourceAction>
fn explicitly_disabled_actions(&self) -> Vec<ResourceAction>
Optional: deny specific actions for all callers (e.g. hard-delete disabled).
Auto Trait Implementations§
impl Freeze for Attribute
impl RefUnwindSafe for Attribute
impl Send for Attribute
impl Sync for Attribute
impl Unpin for Attribute
impl UnsafeUnpin for Attribute
impl UnwindSafe for Attribute
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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> ⓘ
Converts
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> ⓘ
Converts
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