Skip to main content

BackboneHttpHandler

Trait BackboneHttpHandler 

Source
pub trait BackboneHttpHandler<T>: Send + Sync {
    // Required methods
    fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>;
    fn create(&self, request: T) -> Result<ApiResponse<T>>;
    fn get_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>;
    fn update(&self, id: &Uuid, request: T) -> Result<ApiResponse<T>>;
    fn partial_update(
        &self,
        id: &Uuid,
        fields: HashMap<String, Value>,
    ) -> Result<ApiResponse<T>>;
    fn soft_delete(&self, id: &Uuid) -> Result<ApiResponse<()>>;
    fn bulk_create(
        &self,
        request: BulkCreateRequest<T>,
    ) -> Result<ApiResponse<BulkResponse<T>>>;
    fn upsert(&self, request: UpsertRequest<T>) -> Result<ApiResponse<T>>;
    fn list_deleted(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>;
    fn restore(&self, id: &Uuid) -> Result<ApiResponse<T>>;
    fn empty_trash(&self) -> Result<ApiResponse<()>>;
    fn get_deleted_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>;
}
Expand description

Synchronous trait for HTTP handlers implementing Backbone CRUD operations.

This trait provides a synchronous interface for services that need to implement the 11 standard Backbone CRUD endpoints. Unlike CrudService which is async, this trait is designed for simpler use cases where async is not required.

§Type Parameters

  • T: The entity type

§Example

ⓘ
impl BackboneHttpHandler<User> for UserService {
    fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<User>>> {
        let users = self.users.lock().unwrap();
        let filtered = users.iter().filter(|u| !u.is_deleted()).cloned().collect();
        Ok(ApiResponse::success(filtered, Some("Users listed".to_string())))
    }
    // ... implement other methods
}

Required Methods§

Source

fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>

  1. List entities with pagination and filtering
Source

fn create(&self, request: T) -> Result<ApiResponse<T>>

  1. Create a new entity
Source

fn get_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>

  1. Get entity by ID
Source

fn update(&self, id: &Uuid, request: T) -> Result<ApiResponse<T>>

  1. Full update of entity
Source

fn partial_update( &self, id: &Uuid, fields: HashMap<String, Value>, ) -> Result<ApiResponse<T>>

  1. Partial update with specific fields
Source

fn soft_delete(&self, id: &Uuid) -> Result<ApiResponse<()>>

  1. Soft delete entity
Source

fn bulk_create( &self, request: BulkCreateRequest<T>, ) -> Result<ApiResponse<BulkResponse<T>>>

  1. Bulk create multiple entities
Source

fn upsert(&self, request: UpsertRequest<T>) -> Result<ApiResponse<T>>

  1. Upsert (create or update)
Source

fn list_deleted(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>

  1. List deleted entities (trash)
Source

fn restore(&self, id: &Uuid) -> Result<ApiResponse<T>>

  1. Restore soft-deleted entity
Source

fn empty_trash(&self) -> Result<ApiResponse<()>>

  1. Permanently delete all soft-deleted entities
Source

fn get_deleted_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>

  1. Get deleted entity by ID (from trash)

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§