From 5416c501e61e591cea85c1f30daa53818baa5f23 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 3 Nov 2025 18:48:52 +0800 Subject: feat: Add sheet creation action - Implement make_sheet_action for creating sheets - Add sheet-related constants - Update sheet data structures --- crates/vcs_actions/src/actions/sheet_actions.rs | 79 +++++++++++++++++++++++++ 1 file changed, 79 insertions(+) (limited to 'crates/vcs_actions') diff --git a/crates/vcs_actions/src/actions/sheet_actions.rs b/crates/vcs_actions/src/actions/sheet_actions.rs index e69de29..b6ea51d 100644 --- a/crates/vcs_actions/src/actions/sheet_actions.rs +++ b/crates/vcs_actions/src/actions/sheet_actions.rs @@ -0,0 +1,79 @@ +use action_system::{action::ActionContext, macros::action_gen}; +use serde::{Deserialize, Serialize}; +use tcp_connection::error::TcpTargetError; +use vcs_data::data::sheet::SheetName; + +use crate::actions::{auth_member, check_connection_instance, try_get_vault}; + +#[derive(Default, Serialize, Deserialize)] +pub enum MakeSheetActionResult { + Success, + + // Fail + AuthorizeFailed(String), + SheetAlreadyExists, + SheetCreationFailed(String), + + #[default] + Unknown, +} + +/// Build a sheet with context +#[action_gen] +pub async fn make_sheet_action( + ctx: ActionContext, + sheet_name: SheetName, +) -> Result { + let instance = check_connection_instance(&ctx)?; + + // Auth Member + let member_id = match auth_member(&ctx, instance).await { + Ok(id) => id, + Err(e) => return Ok(MakeSheetActionResult::AuthorizeFailed(e.to_string())), + }; + + if ctx.is_proc_on_remote() { + let vault = try_get_vault(&ctx)?; + + // Check if the sheet already exists + if vault.sheet(&sheet_name).await.is_ok() { + instance + .lock() + .await + .write(MakeSheetActionResult::SheetAlreadyExists) + .await?; + return Ok(MakeSheetActionResult::SheetAlreadyExists); + } else { + // Create the sheet + match vault.create_sheet(&sheet_name, &member_id).await { + Ok(_) => { + instance + .lock() + .await + .write(MakeSheetActionResult::Success) + .await?; + return Ok(MakeSheetActionResult::Success); + } + Err(e) => { + instance + .lock() + .await + .write(MakeSheetActionResult::SheetCreationFailed(e.to_string())) + .await?; + return Ok(MakeSheetActionResult::SheetCreationFailed(e.to_string())); + } + } + } + } + + if ctx.is_proc_on_local() { + let result = instance + .lock() + .await + .read::() + .await?; + return Ok(result); + } + + Err(TcpTargetError::NoResult("No result.".to_string())) +} -- cgit