noz-cli/Noz.PowerShell/Cmdlets/GetNozOrphansCmdlet.cs
kryptomrx f45b31defa feat: graph and search API client with PS analysis cmdlets
Get-NozGraph, Find-NozNote, Measure-NozGarden, Set-NozNoteStatus,
Get-NozOrphans — graph edges, Meilisearch search, garden stats,
frontmatter status patch, orphan detection from inbound link analysis.
2026-05-17 00:27:45 +02:00

31 lines
979 B
C#

using System.Management.Automation;
namespace Noz.PowerShell.Cmdlets;
/// Returns notes that have no incoming wikilinks — good candidates for cleanup or linking.
[Cmdlet(VerbsCommon.Get, "NozOrphans")]
[OutputType(typeof(NozNote))]
public sealed class GetNozOrphansCmdlet : NozCmdletBase
{
[Parameter]
public string? Topic { get; set; }
protected override void ProcessRecord()
{
var notesTask = Api.GetNotesAsync();
var graphTask = Api.GetGraphAsync();
var notes = Run(notesTask);
var graph = Run(graphTask);
var targets = new HashSet<string>(graph.Edges.Select(e => e.Target));
var orphans = notes.Where(n => !targets.Contains(n.Slug));
if (Topic is not null)
orphans = orphans.Where(n => string.Equals(n.Topic, Topic, StringComparison.OrdinalIgnoreCase));
foreach (var n in orphans.OrderBy(n => n.Topic).ThenBy(n => n.Slug))
WriteObject(NozNote.From(n));
}
}