blob: 4bb57d9ae51e9fb8b15ce38804078e538f873d34 [file] [log] [blame]
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
}