sz-rust-cli 1.4.0

SZ-Rust 命令行工具:项目脚手架、数据库迁移、调度器管理
Documentation
// Generated by sz-rust-cli make:plugin --template {{ template_type }} --name {{ plugin_name }}
// DO NOT EDIT MANUALLY

//! Controller for report `{{ plugin_name }}` with aggregation query, grouping, sorting, and pagination

use crate::models::{{ class_name | snake_case }}::{{ class_name }}ReportQuery;
use crate::models::{{ class_name | snake_case }}::{{ class_name }}ReportRow;
use sz_rust_core::error::AppError;

pub struct {{ class_name }}Controller;

impl {{ class_name }}Controller {
    /// Generate aggregation report
    pub async fn generate_report(
        query: {{ class_name }}ReportQuery,
    ) -> Result<Vec<{{ class_name }}ReportRow>, AppError> {
        let page = query.page.unwrap_or(1).max(1);
        let page_size = query.page_size.unwrap_or(20).clamp(1, 100);
        let offset = (page - 1) * page_size;

        tracing::info!(
            group_by = ?query.group_by,
            page = page,
            page_size = page_size,
            "生成报表: {{ plugin_name }}"
        );

        let rows = Self::execute_aggregation(&query, offset as i64, page_size as i64).await?;
        Ok(rows)
    }

    async fn execute_aggregation(
        query: &{{ class_name }}ReportQuery,
        offset: i64,
        limit: i64,
    ) -> Result<Vec<{{ class_name }}ReportRow>, AppError> {
        let group_columns = query.group_by.join(", ");
        let _ = (group_columns, offset, limit);
        Ok(vec![])
    }

    /// Export report as CSV
    pub async fn export_csv(
        query: {{ class_name }}ReportQuery,
    ) -> Result<String, AppError> {
        let rows = Self::generate_report(query).await?;
        let mut csv = String::from("report_export\n");
        for row in rows {
            csv.push_str(&format!("{:?}\n", row));
        }
        Ok(csv)
    }
}