use axum::extract::{Query, State}; use axum::routing::get; use axum::{Json, Router}; use crate::error::AppError; use crate::models::{ApiResponse, AssetMeta, ListParams, ListResponse, Pagination}; use crate::{db, AppState}; pub fn router() -> Router { Router::new().route("/api/v1/can/0/list", get(list_assets)) } /// GET /api/v1/can/0/list - Return a paginated list of assets with their metadata. /// Supports query params: limit, offset, order (asc/desc), application filter. async fn list_assets( State(state): State, Query(params): Query, ) -> Result>, AppError> { let conn = state.db.lock().unwrap(); let (assets, total) = db::list_assets(&conn, ¶ms)?; let items: Vec = assets .iter() .map(|a| db::asset_to_meta(&conn, a)) .collect::, _>>()?; let response = ListResponse { items, pagination: Pagination { limit: params.limit.unwrap_or(50), offset: params.offset.unwrap_or(0), total, }, }; Ok(Json(ApiResponse::success(response))) }