Files
ClaudeDo/src/ClaudeDo.Worker/Tickets/TicketStatusMap.cs
T

37 lines
1.4 KiB
C#

using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
namespace ClaudeDo.Worker.Tickets;
/// <summary>
/// Reine Abbildung Task-Status → Ticket-Status. Ticket-Status im Bandel-System:
/// 0 Keine, 1 Offen, 2 InBearbeitung, 3 Fertig, 4 Archiviert.
/// </summary>
public static class TicketStatusMap
{
public const int InBearbeitung = 2;
public const int Fertig = 3;
private const string BandelPrefix = "bandel:";
/// <summary>
/// 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.
/// </summary>
public static int? ToTicketStatus(TaskStatus status) => status switch
{
TaskStatus.Running or TaskStatus.WaitingForReview => InBearbeitung,
TaskStatus.Done => Fertig,
_ => null,
};
/// <summary>Ticket-Id aus einem "bandel:&lt;id&gt;"-Ref, oder null bei jedem anderen Format.</summary>
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;
}
}