Skip to content

Commit

Permalink
feat: world forge project deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
zulkhair committed Jan 23, 2025
1 parent 42d70f3 commit 0137773
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
12 changes: 12 additions & 0 deletions cmd/world/forge/forge.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,17 @@ var (
return createProject(cmd.Context())
},
}

deleteProjectCmd = &cobra.Command{
Use: "delete",
Short: "Delete a project",
RunE: func(cmd *cobra.Command, _ []string) error {
if !checkLogin() {
return nil
}
return deleteProject(cmd.Context())
},
}
)

// Deployment commands
Expand Down Expand Up @@ -260,6 +271,7 @@ func init() {
// Add project commands
projectCmd.AddCommand(createProjectCmd)
projectCmd.AddCommand(switchProjectCmd)
projectCmd.AddCommand(deleteProjectCmd)
BaseCmd.AddCommand(projectCmd)

// Add deployment commands
Expand Down
61 changes: 61 additions & 0 deletions cmd/world/forge/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -342,3 +342,64 @@ func selectProject(ctx context.Context) (project, error) {

return project{}, eris.New("Maximum attempts reached for selecting project")
}

func deleteProject(ctx context.Context) error {
project, err := getSelectedProject(ctx)
if err != nil {
return eris.Wrap(err, "Failed to get project")
}

// Print project details with formatting
fmt.Println("\n🗑️ Project Deletion")
fmt.Println("------------------")
fmt.Printf("Project Name: %s\n", project.Name)
fmt.Printf("Project Slug: %s\n\n", project.Slug)

// Warning message
fmt.Println("⚠️ WARNING")
fmt.Println(" This will permanently delete:")
fmt.Println(" • All deployments")
fmt.Println(" • All logs")
fmt.Println(" • All associated resources")
fmt.Println("")

// Confirmation prompt
fmt.Printf("❓ Are you sure you want to delete %s? (y/n): ", project.Name)
confirmation, err := getInput()
if err != nil {
return eris.Wrap(err, "Failed to read confirmation")
}

if confirmation != "y" {
fmt.Println("\n❌ Project deletion canceled")
return eris.New("Project deletion canceled")
}

// Send request
url := fmt.Sprintf(projectURLPattern+"/%s", baseURL, project.OrgID, project.ID)
body, err := sendRequest(ctx, http.MethodDelete, url, nil)
if err != nil {
return eris.Wrap(err, "Failed to delete project")
}

// Parse response
_, err = parseResponse[any](body)
if err != nil {
return eris.Wrap(err, "Failed to parse response")
}

fmt.Printf("Project deleted successfully: %s (%s)\n", project.Name, project.Slug)

// Remove project from config
config, err := globalconfig.GetGlobalConfig()
if err != nil {
return eris.Wrap(err, "Failed to get config")
}
config.ProjectID = ""
err = globalconfig.SaveGlobalConfig(config)
if err != nil {
return eris.Wrap(err, "Failed to save config")
}

return nil
}

0 comments on commit 0137773

Please sign in to comment.