refactor: Remove SRA integration (no public API available)

The SRA (Solicitors Regulation Authority) does not provide a public REST API.
Their register is only accessible via their website. Removed all SRA-related
code and added ApiTester tool for testing remaining integrations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-24 15:28:07 +00:00
parent ff09524503
commit 72b7f11c41
8 changed files with 137 additions and 392 deletions

123
tools/ApiTester/Program.cs Normal file
View File

@@ -0,0 +1,123 @@
using System.Net.Http.Headers;
using System.Text.Json;
Console.WriteLine("=== RealCV API Integration Tester ===\n");
// Test 1: FCA Register API
Console.WriteLine("1. Testing FCA Register API...");
try
{
var fcaClient = new HttpClient();
fcaClient.BaseAddress = new Uri("https://register.fca.org.uk/services/V0.1/");
fcaClient.DefaultRequestHeaders.Add("X-Auth-Email", "peter.foster@ukdataservices.co.uk");
fcaClient.DefaultRequestHeaders.Add("X-Auth-Key", "9ae1aee51e5c717a1135775501c89075");
var fcaResponse = await fcaClient.GetAsync("Individuals?q=John%20Smith&page=1");
Console.WriteLine($" Status: {fcaResponse.StatusCode}");
if (fcaResponse.IsSuccessStatusCode)
{
var content = await fcaResponse.Content.ReadAsStringAsync();
Console.WriteLine($" ✓ FCA API working");
using var doc = JsonDocument.Parse(content);
if (doc.RootElement.TryGetProperty("Data", out var data) && data.ValueKind == JsonValueKind.Array)
{
Console.WriteLine($" Found {data.GetArrayLength()} individuals matching 'John Smith'");
}
else
{
Console.WriteLine($" Response: {content.Substring(0, Math.Min(200, content.Length))}");
}
}
else
{
Console.WriteLine($" ✗ Error: {fcaResponse.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($" ✗ Error: {ex.Message}");
}
Console.WriteLine();
// Test 2: ORCID API
Console.WriteLine("2. Testing ORCID API...");
try
{
var orcidClient = new HttpClient();
orcidClient.BaseAddress = new Uri("https://pub.orcid.org/v3.0/");
orcidClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Get a known ORCID record directly
var orcidResponse = await orcidClient.GetAsync("0000-0001-5109-3700/record");
Console.WriteLine($" Status: {orcidResponse.StatusCode}");
if (orcidResponse.IsSuccessStatusCode)
{
var content = await orcidResponse.Content.ReadAsStringAsync();
Console.WriteLine($" ✓ ORCID API working");
using var doc = JsonDocument.Parse(content);
if (doc.RootElement.TryGetProperty("person", out var person) &&
person.TryGetProperty("name", out var name))
{
var givenName = "";
var familyName = "";
if (name.TryGetProperty("given-names", out var gn) && gn.TryGetProperty("value", out var gnv))
givenName = gnv.GetString() ?? "";
if (name.TryGetProperty("family-name", out var fn) && fn.TryGetProperty("value", out var fnv))
familyName = fnv.GetString() ?? "";
Console.WriteLine($" Retrieved record for: {givenName} {familyName}");
}
}
else
{
Console.WriteLine($" ✗ Error: {orcidResponse.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($" ✗ Error: {ex.Message}");
}
Console.WriteLine();
// Test 3: GitHub API
Console.WriteLine("3. Testing GitHub API...");
try
{
var githubClient = new HttpClient();
githubClient.BaseAddress = new Uri("https://api.github.com/");
githubClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github+json"));
githubClient.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
githubClient.DefaultRequestHeaders.UserAgent.ParseAdd("RealCV/1.0");
var githubResponse = await githubClient.GetAsync("users/torvalds");
Console.WriteLine($" Status: {githubResponse.StatusCode}");
if (githubResponse.IsSuccessStatusCode)
{
var content = await githubResponse.Content.ReadAsStringAsync();
Console.WriteLine($" ✓ GitHub API working");
using var doc = JsonDocument.Parse(content);
var name = doc.RootElement.GetProperty("name").GetString();
var repos = doc.RootElement.GetProperty("public_repos").GetInt32();
var followers = doc.RootElement.GetProperty("followers").GetInt32();
Console.WriteLine($" User: {name}, Repos: {repos}, Followers: {followers}");
}
else
{
Console.WriteLine($" ✗ Error: {githubResponse.StatusCode}");
}
if (githubResponse.Headers.TryGetValues("X-RateLimit-Remaining", out var remaining))
{
Console.WriteLine($" Rate limit remaining: {remaining.First()}");
}
}
catch (Exception ex)
{
Console.WriteLine($" ✗ Error: {ex.Message}");
}
Console.WriteLine("\n=== Tests complete ===");