using System.Text.Json; using System.Text.Json.Nodes; using Alchegos.Core.Services.RabbitMQ; namespace Alchegos.Webhook.Handlers.GiteaEventHandlers; public class IssuesEventHandler : IGiteaEventHandler { public async Task HandleAsync(JsonNode payload, IRabbitPublisher publisher) { string action = payload["action"]?.ToString() ?? ""; string repo_url = payload["repository"]?["url"]?.ToString(); string repo_owner = payload["repository"]?["owner"]?["login"]?.ToString(); string repo_name = payload["repository"]?["name"]?.ToString(); string issue_url = payload["issue"]?["url"]?.ToString(); string issue_id = payload["issue"]?["id"]?.ToString(); var labels = payload["issue"]?["labels"]?.AsArray() ?? new JsonArray(); var routingKeys = new Dictionary { {"status/ready", "ready_to_develop"}, {"status/completed", "task_completed"} }; if (action is "opened" or "label_updated") { foreach (var label in labels) { string labelName = label["name"]?.ToString().Trim() ?? label.ToString().Trim(); if (routingKeys.TryGetValue(labelName, out string routingKey)) { var message = new Dictionary { { "repo_url", repo_url }, { "repo_owner", repo_owner }, { "repo_name", repo_name }, { "issue_url", issue_url }, { "issue_id", issue_id }, }; await publisher.PublishAsync( exchange: "alchegos", routingKey: routingKey, message: JsonSerializer.Serialize(message)); break; } } } } }