using TaskStatus = ClaudeDo.Data.Models.TaskStatus; namespace ClaudeDo.Worker.Tickets; /// /// Reine Abbildung Task-Status → Ticket-Status. Ticket-Status im Bandel-System: /// 0 Keine, 1 Offen, 2 InBearbeitung, 3 Fertig, 4 Archiviert. /// public static class TicketStatusMap { public const int InBearbeitung = 2; public const int Fertig = 3; private const string BandelPrefix = "bandel:"; /// /// Zielstatus im Ticketsystem, oder null wenn dieser Task-Status nichts melden soll. /// "Offen" (1) wird nie geschrieben: das ist der Eingangszustand. Failed/Cancelled lassen /// das Ticket bewusst auf InBearbeitung stehen — die Arbeit ist angefangen, nicht zurückgegeben. /// public static int? ToTicketStatus(TaskStatus status) => status switch { TaskStatus.Running or TaskStatus.WaitingForReview => InBearbeitung, TaskStatus.Done => Fertig, _ => null, }; /// Ticket-Id aus einem "bandel:<id>"-Ref, oder null bei jedem anderen Format. public static int? ParseBandelTicketId(string? ticketRef) { if (string.IsNullOrWhiteSpace(ticketRef)) return null; if (!ticketRef.StartsWith(BandelPrefix, StringComparison.OrdinalIgnoreCase)) return null; var raw = ticketRef[BandelPrefix.Length..]; return int.TryParse(raw, out var id) && id > 0 ? id : null; } }