All checks were successful
Build and Deploy / deploy (push) Successful in 16s
Change approve endpoint from int to string ticketId to match SilverDESK GUIDs. Remove body parameter requirement so the endpoint works as a webhook target. Add DeveloperTicketParsingService to fetch and parse applicant details from ticket descriptions. Remove redundant ticket status update from ProvisioningService since SilverDESK action engine now handles SetStatus/AddNote/AddReply steps. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
1.8 KiB
C#
53 lines
1.8 KiB
C#
using System.Text.Json;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace SilverLabs.Website.Services;
|
|
|
|
public class DeveloperTicketParsingService
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
private readonly ILogger<DeveloperTicketParsingService> _logger;
|
|
|
|
public DeveloperTicketParsingService(HttpClient httpClient, ILogger<DeveloperTicketParsingService> logger)
|
|
{
|
|
_httpClient = httpClient;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task<JsonElement?> FetchTicketAsync(string ticketId)
|
|
{
|
|
try
|
|
{
|
|
var response = await _httpClient.GetAsync($"/api/tickets/{ticketId}");
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
_logger.LogError("Failed to fetch ticket {TicketId}: {Status}", ticketId, response.StatusCode);
|
|
return null;
|
|
}
|
|
|
|
var json = await response.Content.ReadAsStringAsync();
|
|
return JsonSerializer.Deserialize<JsonElement>(json);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error fetching ticket {TicketId}", ticketId);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public (string? FullName, string? Email, string? DesiredUsername) ParseApplicationFromDescription(string description)
|
|
{
|
|
var fullName = ExtractField(description, @"\*\*Full Name:\*\*\s*(.+)");
|
|
var email = ExtractField(description, @"\*\*Email:\*\*\s*(.+)");
|
|
var desiredUsername = ExtractField(description, @"\*\*Desired Username:\*\*\s*(.+)");
|
|
|
|
return (fullName, email, desiredUsername);
|
|
}
|
|
|
|
private static string? ExtractField(string text, string pattern)
|
|
{
|
|
var match = Regex.Match(text, pattern);
|
|
return match.Success ? match.Groups[1].Value.Trim() : null;
|
|
}
|
|
}
|