mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-29 05:41:46 +02:00
54 lines
1.8 KiB
Rust
54 lines
1.8 KiB
Rust
use crate::cli::{WorkspaceArgs, WorkspaceCommands};
|
|
use crate::commands::confirm::confirm_delete;
|
|
use crate::context::CliContext;
|
|
use yaak_models::models::Workspace;
|
|
use yaak_models::util::UpdateSource;
|
|
|
|
pub fn run(ctx: &CliContext, args: WorkspaceArgs) {
|
|
match args.command {
|
|
WorkspaceCommands::List => list(ctx),
|
|
WorkspaceCommands::Show { workspace_id } => show(ctx, &workspace_id),
|
|
WorkspaceCommands::Create { name } => create(ctx, name),
|
|
WorkspaceCommands::Delete { workspace_id, yes } => delete(ctx, &workspace_id, yes),
|
|
}
|
|
}
|
|
|
|
fn list(ctx: &CliContext) {
|
|
let workspaces = ctx.db().list_workspaces().expect("Failed to list workspaces");
|
|
if workspaces.is_empty() {
|
|
println!("No workspaces found");
|
|
} else {
|
|
for workspace in workspaces {
|
|
println!("{} - {}", workspace.id, workspace.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
fn show(ctx: &CliContext, workspace_id: &str) {
|
|
let workspace = ctx.db().get_workspace(workspace_id).expect("Failed to get workspace");
|
|
let output = serde_json::to_string_pretty(&workspace).expect("Failed to serialize workspace");
|
|
println!("{output}");
|
|
}
|
|
|
|
fn create(ctx: &CliContext, name: String) {
|
|
let workspace = Workspace { name, ..Default::default() };
|
|
let created = ctx
|
|
.db()
|
|
.upsert_workspace(&workspace, &UpdateSource::Sync)
|
|
.expect("Failed to create workspace");
|
|
println!("Created workspace: {}", created.id);
|
|
}
|
|
|
|
fn delete(ctx: &CliContext, workspace_id: &str, yes: bool) {
|
|
if !yes && !confirm_delete("workspace", workspace_id) {
|
|
println!("Aborted");
|
|
return;
|
|
}
|
|
|
|
let deleted = ctx
|
|
.db()
|
|
.delete_workspace_by_id(workspace_id, &UpdateSource::Sync)
|
|
.expect("Failed to delete workspace");
|
|
println!("Deleted workspace: {}", deleted.id);
|
|
}
|