sortTasks sorts tasks by the specified field
(tasks []*model.Task, sortField string)
| 256 | |
| 257 | // sortTasks sorts tasks by the specified field |
| 258 | func sortTasks(tasks []*model.Task, sortField string) error { |
| 259 | switch sortField { |
| 260 | case "id": |
| 261 | sort.Slice(tasks, func(i, j int) bool { |
| 262 | return tasks[i].ID < tasks[j].ID |
| 263 | }) |
| 264 | case "title": |
| 265 | sort.Slice(tasks, func(i, j int) bool { |
| 266 | return tasks[i].Title < tasks[j].Title |
| 267 | }) |
| 268 | case "status": |
| 269 | sort.Slice(tasks, func(i, j int) bool { |
| 270 | return tasks[i].Status < tasks[j].Status |
| 271 | }) |
| 272 | case "priority": |
| 273 | priorityOrder := map[model.Priority]int{ |
| 274 | model.PriorityCritical: 0, |
| 275 | model.PriorityHigh: 1, |
| 276 | model.PriorityMedium: 2, |
| 277 | model.PriorityLow: 3, |
| 278 | } |
| 279 | sort.Slice(tasks, func(i, j int) bool { |
| 280 | return priorityOrder[tasks[i].Priority] < priorityOrder[tasks[j].Priority] |
| 281 | }) |
| 282 | case "effort": |
| 283 | effortOrder := map[model.Effort]int{ |
| 284 | model.EffortSmall: 0, |
| 285 | model.EffortMedium: 1, |
| 286 | model.EffortLarge: 2, |
| 287 | } |
| 288 | sort.Slice(tasks, func(i, j int) bool { |
| 289 | return effortOrder[tasks[i].Effort] < effortOrder[tasks[j].Effort] |
| 290 | }) |
| 291 | case "created", "created_at": |
| 292 | sort.Slice(tasks, func(i, j int) bool { |
| 293 | return tasks[i].Created.Before(tasks[j].Created.Time) |
| 294 | }) |
| 295 | default: |
| 296 | return invalidValueError("sort field", sortField, validSortFields) |
| 297 | } |
| 298 | |
| 299 | return nil |
| 300 | } |
| 301 | |
| 302 | // outputJSON outputs tasks as JSON |
| 303 | func outputJSON(tasks []*model.Task) error { |