diff --git a/cmd/survey/main.go b/cmd/survey/main.go index 8c1e4bb..48283da 100644 --- a/cmd/survey/main.go +++ b/cmd/survey/main.go @@ -4,6 +4,7 @@ import ( "context" "github.com/LazyBachelor/LazyPM/cmd/survey/tasks" + issuesCmd "github.com/LazyBachelor/LazyPM/internal/commands/issues" surveyCmd "github.com/LazyBachelor/LazyPM/internal/commands/survey" "github.com/LazyBachelor/LazyPM/internal/service" "github.com/LazyBachelor/LazyPM/pkg/repl" @@ -15,6 +16,14 @@ import ( func main() { ctx := context.Background() + app, cleanup, err := initializeServices(ctx) + if err != nil { + return + } + defer cleanup() + + surveyCmd.SetApp(app) + issuesCmd.SetApp(app) if err := fang.Execute(ctx, surveyCmd.RootCmd, fang.WithColorSchemeFunc(fang.AnsiColorScheme)); err != nil { @@ -33,6 +42,7 @@ func init() { surveyCmd.RootCmd.AddCommand(surveyCmd.StatusCmd) surveyCmd.RootCmd.AddCommand(surveyCmd.ListTasksCmd) surveyCmd.RootCmd.AddCommand(surveyCmd.ListInterfacesCmd) + surveyCmd.RootCmd.AddCommand(issuesCmd.RootCmd) task.RegisterTask("create_issue", func(app *service.App) task.Tasker { return tasks.NewCreateIssueTask(app) diff --git a/cmd/survey/runner.go b/cmd/survey/runner.go index 876ee42..227cb7e 100644 --- a/cmd/survey/runner.go +++ b/cmd/survey/runner.go @@ -13,15 +13,9 @@ import ( ) func runStartCmd(cmd *cobra.Command, args []string) error { + app := surveyCmd.AppFromContext(cmd.Context()) interfaces := initInterfaces() - - svc, cleanup, err := initializeServices(cmd.Context()) - if err != nil { - return returnIfUserQuit(err, "failed to initialize services") - } - defer cleanup() - - surveyTasks := initTasks(svc) + surveyTasks := initTasks(app) if cmd.Flags().Changed("interface") { if _, ok := interfaces[surveyCmd.InterfaceType]; !ok { diff --git a/internal/commands/issues/root.go b/internal/commands/issues/root.go index 16c24f2..f606c29 100644 --- a/internal/commands/issues/root.go +++ b/internal/commands/issues/root.go @@ -31,6 +31,7 @@ type Flags struct { // RootCmd is the base command for the CLI application. var RootCmd = &cobra.Command{ + Use: "pm", Short: "Project Management CLI", Long: `Project Management CLI for managing issues and tasks.`, PersistentPreRun: func(cmd *cobra.Command, args []string) { diff --git a/internal/commands/survey/root.go b/internal/commands/survey/root.go index df5d9a2..86d801f 100644 --- a/internal/commands/survey/root.go +++ b/internal/commands/survey/root.go @@ -1,13 +1,14 @@ package surveyCmd import ( + "context" + + "github.com/LazyBachelor/LazyPM/internal/service" "github.com/spf13/cobra" ) -// RootCmd is the base command for the survey CLI. -var RootCmd = &cobra.Command{ - Use: "survey", - Long: `Project Management Interface Survey +const appKey string = "app" +const long string = `Project Management Interface Survey Thank you for participating in our survey! @@ -15,7 +16,31 @@ We are gathering data on how users interact with different task management inter This survey will present you with a series of tasks to complete using various interfaces, including command-line, web-based, and terminal user interfaces. Please answer the questions honestly and to the best of your ability. -Your responses will be kept confidential and used solely for research purposes.`} +Your responses will be kept confidential and used solely for research purposes.` + +var app *service.App + +// RootCmd is the base command for the survey CLI. +var RootCmd = &cobra.Command{ + Use: "survey", + Long: long, + PersistentPreRun: func(cmd *cobra.Command, args []string) { + if app != nil { + cmd.SetContext(context.WithValue(cmd.Context(), appKey, app)) + } + }, +} + +func SetApp(application *service.App) { + app = application +} + +func AppFromContext(ctx context.Context) *service.App { + if a, ok := ctx.Value(appKey).(*service.App); ok { + return a + } + return app +} func init() { RootCmd.CompletionOptions.DisableDefaultCmd = true