Fix assignee filter bug in List

This commit is contained in:
2026-03-29 18:58:34 +02:00
parent 9e8c37564f
commit 13b4c4b651
22 changed files with 939 additions and 555 deletions

View File

@@ -4,6 +4,7 @@ import (
"axolotl/db"
"axolotl/models"
"axolotl/output"
"axolotl/service"
"fmt"
"os"
"slices"
@@ -26,11 +27,18 @@ var updateCmd = &cobra.Command{
fmt.Fprintln(os.Stderr, err)
return
}
addRels, rmRels := make(map[models.RelType][]string), make(map[models.RelType][]string)
svc := service.NewSQLiteNodeService(d.DB, cfg.GetUser())
node, err := svc.GetByID(args[0])
if err != nil {
fmt.Fprintln(os.Stderr, "node not found:", args[0])
return
}
addRels, rmRels := make(map[models.RelType][]string), make(map[models.RelType][]string)
parseRel := func(src []string, dst map[models.RelType][]string) bool {
for _, r := range src {
rt, tgt, err := db.ParseRelFlag(r)
rt, tgt, err := parseRelFlag(r)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return false
@@ -44,7 +52,7 @@ var updateCmd = &cobra.Command{
}
if slices.Contains(uAddTags, "_status::done") {
ok, blockers, err := d.CanClose(args[0])
ok, blockers, err := svc.CanClose(args[0])
if err != nil {
fmt.Fprintln(os.Stderr, "failed to check blockers:", err)
return
@@ -61,22 +69,46 @@ var updateCmd = &cobra.Command{
uRmTags = append(uRmTags, "_prio::low", "_prio::medium", "_prio::high")
}
uParams := db.UpdateParams{ClearDue: uClearDue,
AddTags: uAddTags, RemoveTags: uRmTags, AddRels: addRels, RemoveRels: rmRels}
if cmd.Flags().Changed("title") {
uParams.Title = &uTitle
node.Title = uTitle
}
if cmd.Flags().Changed("content") {
uParams.Content = &uContent
node.Content = uContent
}
if cmd.Flags().Changed("due") {
uParams.DueDate = &uDue
node.DueDate = uDue
}
if err := d.UpdateNode(args[0], uParams); err != nil {
if uClearDue {
node.DueDate = ""
}
for _, t := range uRmTags {
node.Tags = slices.DeleteFunc(node.Tags, func(e string) bool { return e == t })
}
for _, t := range uAddTags {
if !slices.Contains(node.Tags, t) {
node.Tags = append(node.Tags, t)
}
}
for rt, tgts := range rmRels {
for _, tgt := range tgts {
node.Relations[string(rt)] = slices.DeleteFunc(node.Relations[string(rt)], func(e string) bool { return e == tgt })
}
}
for rt, tgts := range addRels {
for _, tgt := range tgts {
if !slices.Contains(node.Relations[string(rt)], tgt) {
node.Relations[string(rt)] = append(node.Relations[string(rt)], tgt)
}
}
}
if err := svc.Update(node); err != nil {
fmt.Fprintln(os.Stderr, "failed to update:", err)
return
}
if n, err := d.NodeByID(args[0]); err == nil {
if n, err := svc.GetByID(args[0]); err == nil {
output.PrintNode(cmd.OutOrStdout(), n, jsonFlag)
} else {
fmt.Fprintln(os.Stderr, "failed to fetch node:", err)