blob: e1b041258072c3b56e2d39d1844ecbc334e766a5 [file] [log] [blame]
iomodo3b89bdf2025-07-25 15:19:22 +04001package git_tm
2
3import (
4 "context"
5 "fmt"
iomodo0c203b12025-07-26 19:44:57 +04006 "log/slog"
7 "os"
iomodo3b89bdf2025-07-25 15:19:22 +04008 "time"
9
10 "github.com/iomodo/staff/git"
11 "github.com/iomodo/staff/tm"
12)
13
14// Example demonstrates how to use the GitTaskManager
15func Example() {
iomodo0c203b12025-07-26 19:44:57 +040016 // Create logger
17 logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
18
iomodo3b89bdf2025-07-25 15:19:22 +040019 // Initialize git interface
20 gitInterface := git.DefaultGit("./tasks-repo")
21
22 // Create task manager
iomodo0c203b12025-07-26 19:44:57 +040023 taskManager := NewGitTaskManagerWithLogger(gitInterface, "./tasks-repo", logger)
iomodo3b89bdf2025-07-25 15:19:22 +040024
25 // Create a new task
26 ctx := context.Background()
27 dueDate := time.Now().AddDate(0, 0, 7) // Due in 7 days
28
29 createReq := &tm.TaskCreateRequest{
30 Title: "Implement user authentication",
31 Description: "Add login/logout functionality with JWT tokens",
32 OwnerID: "john.doe",
33 Priority: tm.PriorityHigh,
34 DueDate: &dueDate,
35 }
36
37 task, err := taskManager.CreateTask(ctx, createReq)
38 if err != nil {
iomodo0c203b12025-07-26 19:44:57 +040039 logger.Error("Failed to create task", slog.String("error", err.Error()))
40 os.Exit(1)
iomodo3b89bdf2025-07-25 15:19:22 +040041 }
42
iomodo0c203b12025-07-26 19:44:57 +040043 logger.Info("Created task", slog.String("id", task.ID))
iomodo3b89bdf2025-07-25 15:19:22 +040044
45 // Get the task
user5a7d60d2025-07-27 21:22:04 +040046 retrievedTask, err := taskManager.GetTask(task.ID)
iomodo3b89bdf2025-07-25 15:19:22 +040047 if err != nil {
iomodo0c203b12025-07-26 19:44:57 +040048 logger.Error("Failed to get task", slog.String("error", err.Error()))
49 os.Exit(1)
iomodo3b89bdf2025-07-25 15:19:22 +040050 }
51
iomodo0c203b12025-07-26 19:44:57 +040052 logger.Info("Retrieved task", slog.String("id", retrievedTask.ID), slog.String("title", retrievedTask.Title))
iomodo3b89bdf2025-07-25 15:19:22 +040053
54 // Start the task
55 startedTask, err := taskManager.StartTask(ctx, task.ID)
56 if err != nil {
iomodo0c203b12025-07-26 19:44:57 +040057 logger.Error("Failed to start task", slog.String("error", err.Error()))
58 os.Exit(1)
iomodo3b89bdf2025-07-25 15:19:22 +040059 }
60
iomodo0c203b12025-07-26 19:44:57 +040061 logger.Info("Started task", slog.String("id", startedTask.ID), slog.String("status", string(startedTask.Status)))
iomodo3b89bdf2025-07-25 15:19:22 +040062
63 // List all tasks
64 taskList, err := taskManager.ListTasks(ctx, nil, 0, 10)
65 if err != nil {
iomodo0c203b12025-07-26 19:44:57 +040066 logger.Error("Failed to list tasks", slog.String("error", err.Error()))
67 os.Exit(1)
iomodo3b89bdf2025-07-25 15:19:22 +040068 }
69
iomodo0c203b12025-07-26 19:44:57 +040070 logger.Info("Total tasks", slog.Int("count", taskList.TotalCount))
iomodo3b89bdf2025-07-25 15:19:22 +040071 for _, t := range taskList.Tasks {
iomodo0c203b12025-07-26 19:44:57 +040072 logger.Info("Task", slog.String("id", t.ID), slog.String("title", t.Title), slog.String("status", string(t.Status)))
iomodo3b89bdf2025-07-25 15:19:22 +040073 }
74
75 // Complete the task
76 completedTask, err := taskManager.CompleteTask(ctx, task.ID)
77 if err != nil {
iomodo0c203b12025-07-26 19:44:57 +040078 logger.Error("Failed to complete task", slog.String("error", err.Error()))
79 os.Exit(1)
iomodo3b89bdf2025-07-25 15:19:22 +040080 }
81
iomodo0c203b12025-07-26 19:44:57 +040082 logger.Info("Completed task", slog.String("id", completedTask.ID), slog.String("completed_at", completedTask.CompletedAt.Format(time.RFC3339)))
iomodo3b89bdf2025-07-25 15:19:22 +040083}
84
85// ExampleTaskFile shows the format of a task file
86func ExampleTaskFile() {
87 fmt.Print(`Example task file (tasks/task-1704067200-abc123.md):
88
89---
90id: task-1704067200-abc123
91title: Implement user authentication
92description: Add login/logout functionality with JWT tokens
93owner_id: john.doe
94owner_name: John Doe
95status: in_progress
96priority: high
97created_at: 2024-01-01T10:00:00Z
98updated_at: 2024-01-01T15:30:00Z
99due_date: 2024-01-08T17:00:00Z
100completed_at: null
101archived_at: null
102---
103
104# Task Description
105
106Add login/logout functionality with JWT tokens for the web application.
107
108## Requirements
109
110- User registration and login forms
111- JWT token generation and validation
112- Password hashing with bcrypt
113- Session management
114- Logout functionality
115
116## Notes
117
118- Consider using bcrypt for password hashing
119- Implement refresh token mechanism
120- Add rate limiting for login attempts
121`)
122}