完善web缺失的端点

This commit is contained in:
xintaofei
2026-03-25 17:13:24 +08:00
parent 8c67bb60f4
commit b330a4f936
14 changed files with 2131 additions and 279 deletions

View File

@@ -7,12 +7,50 @@ use crate::db::service::folder_command_service;
use crate::db::AppDatabase;
use crate::models::*;
// ---------------------------------------------------------------------------
// Param structs
// ---------------------------------------------------------------------------
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FolderIdParams {
pub folder_id: i32,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateFolderCommandParams {
pub folder_id: i32,
pub name: String,
pub command: String,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateFolderCommandParams {
pub id: i32,
pub name: Option<String>,
pub command: Option<String>,
pub sort_order: Option<i32>,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteFolderCommandParams {
pub id: i32,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReorderFolderCommandsParams {
pub folder_id: i32,
pub ids: Vec<i32>,
}
// ---------------------------------------------------------------------------
// Handlers
// ---------------------------------------------------------------------------
pub async fn list_folder_commands(
Extension(app): Extension<tauri::AppHandle>,
Json(params): Json<FolderIdParams>,
@@ -23,3 +61,62 @@ pub async fn list_folder_commands(
.map_err(AppCommandError::from)?;
Ok(Json(result))
}
pub async fn create_folder_command(
Extension(app): Extension<tauri::AppHandle>,
Json(params): Json<CreateFolderCommandParams>,
) -> Result<Json<FolderCommandInfo>, AppCommandError> {
let db = app.state::<AppDatabase>();
let result = folder_command_service::create(
&db.conn,
params.folder_id,
&params.name,
&params.command,
)
.await
.map_err(AppCommandError::from)?;
Ok(Json(result))
}
pub async fn update_folder_command(
Extension(app): Extension<tauri::AppHandle>,
Json(params): Json<UpdateFolderCommandParams>,
) -> Result<Json<FolderCommandInfo>, AppCommandError> {
let db = app.state::<AppDatabase>();
let result = folder_command_service::update(
&db.conn,
params.id,
params.name,
params.command,
params.sort_order,
)
.await
.map_err(AppCommandError::from)?;
Ok(Json(result))
}
pub async fn delete_folder_command(
Extension(app): Extension<tauri::AppHandle>,
Json(params): Json<DeleteFolderCommandParams>,
) -> Result<Json<()>, AppCommandError> {
let db = app.state::<AppDatabase>();
folder_command_service::delete(&db.conn, params.id)
.await
.map_err(AppCommandError::from)?;
Ok(Json(()))
}
pub async fn reorder_folder_commands(
Extension(app): Extension<tauri::AppHandle>,
Json(params): Json<ReorderFolderCommandsParams>,
) -> Result<Json<()>, AppCommandError> {
let db = app.state::<AppDatabase>();
folder_command_service::reorder(&db.conn, params.folder_id, params.ids)
.await
.map_err(AppCommandError::from)?;
Ok(Json(()))
}
// TODO: bootstrap_folder_commands_from_package_json — requires access to
// `load_package_scripts_as_commands` which is private in commands/folder_commands.rs.
// Make it pub(crate) first, then add the web handler here.