| package commands |
| |
| import ( |
| "context" |
| "fmt" |
| "time" |
| |
| "github.com/iomodo/staff/tm" |
| "github.com/spf13/cobra" |
| ) |
| |
| var createTaskCmd = &cobra.Command{ |
| Use: "create-task [title]", |
| Short: "Create a new task", |
| Long: `Create a new task with specified title, description, and priority. |
| |
| Examples: |
| staff create-task "Add user authentication" |
| staff create-task "Fix login bug" --description "Users cannot log in with Google OAuth" --priority high --assignee backend-engineer`, |
| Args: cobra.ExactArgs(1), |
| RunE: runCreateTask, |
| } |
| |
| var ( |
| taskDescription string |
| taskPriority string |
| taskAssignee string |
| taskDueDate string |
| ) |
| |
| func init() { |
| createTaskCmd.Flags().StringVarP(&taskDescription, "description", "d", "", "Task description") |
| createTaskCmd.Flags().StringVarP(&taskPriority, "priority", "p", "medium", "Task priority (low, medium, high)") |
| createTaskCmd.Flags().StringVarP(&taskAssignee, "assignee", "a", "", "Agent to assign the task to") |
| createTaskCmd.Flags().StringVar(&taskDueDate, "due", "", "Due date (RFC3339 format, e.g., 2024-01-15T10:00:00Z)") |
| } |
| |
| func runCreateTask(cmd *cobra.Command, args []string) error { |
| title := args[0] |
| |
| // Validate priority |
| priority := tm.TaskPriority(taskPriority) |
| if priority != tm.PriorityLow && priority != tm.PriorityMedium && priority != tm.PriorityHigh { |
| return fmt.Errorf("invalid priority: %s (must be low, medium, or high)", taskPriority) |
| } |
| |
| // Parse due date if provided |
| var dueDate *time.Time |
| if taskDueDate != "" { |
| parsed, err := time.Parse(time.RFC3339, taskDueDate) |
| if err != nil { |
| return fmt.Errorf("invalid due date format: %s (expected RFC3339)", taskDueDate) |
| } |
| dueDate = &parsed |
| } |
| |
| // Create task request |
| req := &tm.TaskCreateRequest{ |
| Title: title, |
| Description: taskDescription, |
| OwnerID: "user", // MVP: single user |
| Priority: priority, |
| DueDate: dueDate, |
| } |
| |
| // Create the task |
| task, err := taskManager.CreateTask(context.Background(), req) |
| if err != nil { |
| return fmt.Errorf("failed to create task: %w", err) |
| } |
| |
| fmt.Printf("Task created successfully!\n") |
| fmt.Printf("ID: %s\n", task.ID) |
| fmt.Printf("Title: %s\n", task.Title) |
| fmt.Printf("Priority: %s\n", task.Priority) |
| fmt.Printf("Status: %s\n", task.Status) |
| |
| // Auto-assign if assignee is specified |
| if taskAssignee != "" { |
| task.Assignee = taskAssignee |
| if err := taskManager.UpdateTask(task); err != nil { |
| fmt.Printf("Warning: Failed to assign task to %s: %v\n", taskAssignee, err) |
| } else { |
| fmt.Printf("Assigned to: %s\n", taskAssignee) |
| } |
| } |
| |
| return nil |
| } |