Notes: sync templates, fix Create layout, repair direct children, ListItems+ListNotes merge
=== Breaking === - CreateNote for unsupported parents (file/note/action/secret/worklog/link) -> error - EnsureNotesFolder validates parent supports notes before creating Notes/ === Templates (system_templates.json) === - folder.default: +notes module, +Notes folder in default_folders - document.default: +notes module, +Notes folder, +Overview.md default file - recipe.default: +Notes folder in default_folders All container types now consistently declare notes support. === CreateNodeFromTemplate layout fix === - DefaultFolders created BEFORE DefaultFiles (so Notes/ exists) - DefaultFile nodes now parented inside Notes folder, not the container - File path, file record, notes record all canonical: Notes/Overview.md - No root-level Overview.md created === ListItems (Files tab) === - bindings_files.go: ListItems now includes TypeNote (not just TypeFolder+TypeFile) - Notes folder visible in Files tab tree - Overview.md inside Notes shown with type='note', Mime='text/markdown' === ListNotes merge === - Collects from both Notes folder (canonical) and direct TypeNote children (compat) - Duplicates excluded via seen set - Canonical layout takes priority === RepairNotesLayout === - Moves direct TypeNote children into Notes folder via nodes.Move - Updates files.path/files.filename for moved notes - Skips non-container parents (file/note/etc) === Tests === - note_repair_test.go: 37 tests (24 old + 13 new) - SupportsNotes for containers/non-containers - EnsureNotesFolder rejects for unsupported parents - Create for file/note parent -> error, no state leak - Repair: skips non-containers, creates Notes folder, moves notes - Files tab: Notes folder visible, Overview content preserved after repair - vault_layout_notes_files_test.go: 3 new ListItems/repair tests - ListItems shows Notes folder - ListItems inside Notes shows Overview with FileID - Repair moves direct children, ListItems reflects new layout - Updated: suggest_test.go, trash_test.go, vault_layout_test.go expectations === Misc === - nodes/repository.go: ListByType helper for test use - bindings_files.go: TypeNote in ListItems, Mime=text/markdown
This commit is contained in:
@@ -478,6 +478,28 @@ func (r *Repository) MetaList(nodeID string) ([]Meta, error) {
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
// ListByType returns all active non-deleted nodes of the given types.
|
||||
func (r *Repository) ListByType(types ...string) ([]Node, error) {
|
||||
if len(types) == 0 {
|
||||
return nil, errors.New("at least one type required")
|
||||
}
|
||||
placeholders := make([]string, len(types))
|
||||
args := make([]interface{}, len(types))
|
||||
for i, t := range types {
|
||||
placeholders[i] = "?"
|
||||
args[i] = t
|
||||
}
|
||||
q := `SELECT ` + nodeColumns + ` FROM nodes
|
||||
WHERE deleted_at IS NULL AND type IN (` + strings.Join(placeholders, ",") + `)
|
||||
ORDER BY sort_order, title`
|
||||
rows, err := r.db.Query(q, args...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
return scanNodes(rows)
|
||||
}
|
||||
|
||||
// --- scanning helpers ---
|
||||
|
||||
type scanner interface {
|
||||
|
||||
Reference in New Issue
Block a user