backbone-bucket 0.2.1

Bucket Bounded Context: File Storage Module for Backbone Framework
Documentation
//! List FileLock use case
//!
//! Generated by backbone-schema. Do not edit manually.

use std::sync::Arc;

use anyhow::Result;
use async_trait::async_trait;

use super::UseCase;
use crate::domain::entity::FileLock;
use crate::infrastructure::persistence::FileLockRepository;
use backbone_orm::repository::PaginationParams;

/// Input for listing FileLocks
#[derive(Debug, Clone, Default)]
pub struct ListFileLockInput {
    pub page: Option<u32>,
    pub per_page: Option<u32>,
    // <<< CUSTOM FILTERS START >>>
    // Add custom filter fields here
    // <<< CUSTOM FILTERS END >>>
}

/// Output containing list of FileLocks
#[derive(Debug, Clone)]
pub struct ListFileLockOutput {
    pub file_locks: Vec<FileLock>,
    pub total: u64,
    pub page: u32,
    pub per_page: u32,
    pub total_pages: u32,
}

/// Use case for listing FileLocks with pagination
pub struct ListFileLockUseCase {
    repository: Arc<FileLockRepository>,
}

impl ListFileLockUseCase {
    pub fn new(repository: Arc<FileLockRepository>) -> Self {
        Self { repository }
    }
}

#[async_trait]
impl UseCase for ListFileLockUseCase {
    type Input = ListFileLockInput;
    type Output = ListFileLockOutput;

    async fn execute(&self, input: Self::Input) -> Result<Self::Output> {
        let page = input.page.unwrap_or(1);
        let per_page = input.per_page.unwrap_or(20);

        let pagination = PaginationParams::new(page, per_page);

        // <<< CUSTOM QUERY START >>>
        // Add custom query/filter logic here
        // <<< CUSTOM QUERY END >>>

        let result = self.repository.find_all(pagination).await?;

        let total_pages = ((result.total as f64) / (per_page as f64)).ceil() as u32;

        Ok(ListFileLockOutput {
            file_locks: result.items,
            total: result.total,
            page,
            per_page,
            total_pages,
        })
    }
}