From 5a1c4c6d7f989461cb05b45edd9bc15b74d212bf Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 1 Jun 2026 02:45:55 +0800 Subject: [PATCH] simplify ListTodayView: remove fallback table queries, pure activity_events + ListTodayNodes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TodayView now uses only activity_events (source of truth) + ListTodayNodes (ensure changed cases appear). Removed direct queries to nodes (notes) and files tables — those will come from activity_events going forward. --- .verstak/index.db | Bin 86016 -> 0 bytes cmd/verstak-gui/app.go | 135 ++++------------------------------------- 2 files changed, 12 insertions(+), 123 deletions(-) delete mode 100644 .verstak/index.db diff --git a/.verstak/index.db b/.verstak/index.db deleted file mode 100644 index cff5a3bd56529023c6aa1e6bb139b034ca2124cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86016 zcmeI(PjAy^9Kdmh(xeSd!e9B&LoFdet|&YN6jLV-wo~Y& zX@Y9JgWdKvCT+J#yPzGWy^Gzaowmy!KX(2&On(lHjbaiPoC%V`#q0sxxIIH z!;Kv6u^+UpNV}{YR|*B?Lrqf@r6hjNh@bweCN_@tKZy6j$o90&lJefSZz`1^l+!bx zE47!UrP}7gFO_c=b{3Y(w~zff|M%RR`QNI4&F)lxuC`}>te&g>Tg`-S=354Jsj%e1Y?>2EuoC~%$d%#DVz-ZZq^n>URI+IVH{&ZahYz;fJ( zzIW|JNnKefyk3c{N8Wg&V~3nfzoWVS(S|YJp0-@p#LKm{rtzSueb%`B>3ZX#_KETE zf-LCxwqy27H}5pH&HEc0TEnpv~#yu^r5H7p6p41N`D~KH16zhp>Fs`1IID%u+ z{&+xX-L(0ne%tNzA}16yP2*#uA-^~&vAW&Bf8mNX%NdsTyLQvKwSIr2snwIZk6h1- ziKbUvODcxFcH0VeC-ua3BFpu{@d330NAzH1NSW^Uy79pFmzMRtbJdc%xLA07RtC>% zMXuio)3;hCSn1AxJ4lfm36Uf|nNDwuoSn44o*Ov!p|NUN-KZBhrr(RYz3A}j?;NNjB~?}XvrJ~X{56va zlH7Gzh`LrFru=Xw9XyMo-R{KrObuM<^|mGju4_e4#<@d3h)h4Qo!~!`OD2@|awY_@IxdFOnh9m5~uHc+*wpP~lg`#?0EhzHL6F&3A#hq#OB42(srHEOVZ(WYq%QdjiR_dQVU5|#+N+FA;}6Uw@Xu6O{xqV9W1K)%lD6#)TO1us}Ir@ zK+Nv8IBmzx$&J}eA`W&>S`FSJ=eC`R7YaL;*Bi^HBxs`x%(DD)*S?^MR`jx7pDn7! z()3B24j`Vm>1MI&D0A_N$v!2oG`}7MsDI@bSM6`7SDL5ynf5Ehl_yJT5xBI1={s;zou)-9E9elcSa5PNtvxi27=+sID(g z>sNF*>fjeiB?2E zinXUo?f2TRweM@+)%L^(UI-w700IagfB*srAb!Q z1_gc%wF2q1s}0tg_000IagfB*uD!t;N!009ILKmY**5I_I{1Q0*~f&2^b z{6GIOW`qbJfB*srAb= ?1 AND n.created_at < ?2) OR (n.updated_at >= ?1 AND n.updated_at < ?2))`, - start, end); err == nil { - for r.Next() { - var nr noteRow - if err := r.Scan(&nr.ID, &nr.ParentID, &nr.Title, &nr.CreatedAt); err == nil { - todayNotes = append(todayNotes, nr) - } - } - r.Close() - } - - // 3. Query files created today from files table. - type fileRow struct { - ID string - NodeID string - Filename string - ParentID string - CreatedAt string - } - var todayFiles []fileRow - if r, err := a.db.Query(`SELECT f.id, f.node_id, f.filename, COALESCE(n.parent_id,''), f.created_at - FROM files f - JOIN nodes n ON f.node_id = n.id - WHERE n.deleted_at IS NULL - AND (f.created_at >= ?1 AND f.created_at < ?2)`, start, end); err == nil { - for r.Next() { - var fr fileRow - if err := r.Scan(&fr.ID, &fr.NodeID, &fr.Filename, &fr.ParentID, &fr.CreatedAt); err == nil { - todayFiles = append(todayFiles, fr) - } - } - r.Close() - } - - // Also include files updated today (but not created today). - if r, err := a.db.Query(`SELECT f.id, f.node_id, f.filename, COALESCE(n.parent_id,''), f.updated_at - FROM files f - JOIN nodes n ON f.node_id = n.id - WHERE n.deleted_at IS NULL - AND f.updated_at >= ?1 AND f.updated_at < ?2 - AND f.created_at < ?1`, start, end); err == nil { - for r.Next() { - var fr fileRow - if err := r.Scan(&fr.ID, &fr.NodeID, &fr.Filename, &fr.ParentID, &fr.CreatedAt); err == nil { - todayFiles = append(todayFiles, fr) - } - } - r.Close() - } - - // 4. Get root nodes that were created/updated today. + // Root nodes that were created/updated today. todayNodes, _ := a.nodes.ListTodayNodes() - // Build caseID → events map from all sources. type rawEvent struct { NodeID string - ParentID string EventType string Title string CreatedAt string @@ -274,7 +211,6 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { } caseMap := make(map[string]*caseInfo) - // Helper: ensure case entry exists. ensureCase := func(caseID string) *caseInfo { if ci, ok := caseMap[caseID]; ok { return ci @@ -293,7 +229,6 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { for _, e := range events { ci.Events = append(ci.Events, rawEvent{ NodeID: e.NodeID, - ParentID: pid, EventType: e.EventType, Title: e.Title, CreatedAt: e.CreatedAt, @@ -301,43 +236,7 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { } } - // Merge notes from direct query (avoid duplicates with ae). - noteSeen := make(map[string]bool) - for _, nr := range todayNotes { - if noteSeen[nr.ID] { - continue - } - noteSeen[nr.ID] = true - caseID := nr.ParentID - ci := ensureCase(caseID) - ci.Events = append(ci.Events, rawEvent{ - NodeID: nr.ID, - ParentID: caseID, - EventType: activity.TypeNoteCreated, - Title: nr.Title, - CreatedAt: nr.CreatedAt, - }) - } - - // Merge files. - fileSeen := make(map[string]bool) - for _, fr := range todayFiles { - if fileSeen[fr.ID] { - continue - } - fileSeen[fr.ID] = true - caseID := fr.ParentID - ci := ensureCase(caseID) - ci.Events = append(ci.Events, rawEvent{ - NodeID: fr.NodeID, - ParentID: caseID, - EventType: activity.TypeFileAdded, - Title: fr.Filename, - CreatedAt: fr.CreatedAt, - }) - } - - // Merge today's root nodes (even without events). + // Ensure all today's root nodes are present (even without events). for _, n := range todayNodes { _ = ensureCase(n.ID) if ci := caseMap[n.ID]; ci.Node.ID == "" { @@ -345,7 +244,6 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { } } - // Build final groups and flat timeline. var groups []TodayGroupDTO var flatEvents []EventDTO summary := SummaryDTO{} @@ -358,17 +256,16 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { dtoEvents := make([]EventDTO, 0, len(ci.Events)) for _, re := range ci.Events { - et := re.EventType dtoEvents = append(dtoEvents, EventDTO{ ID: ci.Node.ID + "/" + re.NodeID, NodeID: re.NodeID, - ParentID: re.ParentID, - EventType: et, + ParentID: ci.Node.ID, + EventType: re.EventType, Title: re.Title, Metadata: "{}", CreatedAt: re.CreatedAt, }) - switch et { + switch re.EventType { case activity.TypeNoteCreated, activity.TypeNoteUpdated: summary.Notes++ case activity.TypeFileAdded, activity.TypeFileDeleted, activity.TypeFileRenamed, activity.TypeFileCopied, activity.TypeFileMoved: @@ -377,11 +274,9 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { } last := ci.Node.UpdatedAt.Format(time.RFC3339) - if len(dtoEvents) > 0 { - for _, e := range dtoEvents { - if e.CreatedAt > last { - last = e.CreatedAt - } + for _, e := range dtoEvents { + if e.CreatedAt > last { + last = e.CreatedAt } } @@ -393,24 +288,18 @@ func (a *App) ListTodayView() (*TodayDashboardDTO, error) { LastActivityAt: last, Events: dtoEvents, }) - flatEvents = append(flatEvents, dtoEvents...) } - // Sort groups by lastActivityAt desc. sort.Slice(groups, func(i, j int) bool { return groups[i].LastActivityAt > groups[j].LastActivityAt }) - - // Sort flat events by createdAt desc. sort.Slice(flatEvents, func(i, j int) bool { return flatEvents[i].CreatedAt > flatEvents[j].CreatedAt }) - dateStr := time.Now().Format("2006-01-02") - return &TodayDashboardDTO{ - Date: dateStr, + Date: time.Now().Format("2006-01-02"), Summary: summary, Groups: groups, Events: flatEvents,