quick refactor for clarity

This commit is contained in:
Sebastian 2026-01-21 22:53:13 +01:00
parent 92280503ed
commit 8934a09cf3
3 changed files with 105 additions and 65 deletions

View file

@ -1,6 +1,20 @@
@AuthAPI_HostAddress = http://localhost:5127 @AuthAPI_HostAddress = http://localhost:5127
GET {{AuthAPI_HostAddress}}/weatherforecast/ GET {{AuthAPI_HostAddress}}/validate/
Accept: application/json Accept: application/json
Content-Type: application/json
{
"Email": "someValue",
"FirstName": "name"
}
###
GET {{AuthAPI_HostAddress}}/validate/
Accept: application/json
Content-Type: application/json
{
"Ssn": "10 or 8 number length"
}
### ###

View file

@ -1,7 +1,8 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Text.Json.Serialization; using AuthAPI;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient();
builder.Services.ConfigureHttpJsonOptions(options => builder.Services.ConfigureHttpJsonOptions(options =>
{ {
options.SerializerOptions.AllowTrailingCommas = true; options.SerializerOptions.AllowTrailingCommas = true;
@ -11,75 +12,18 @@ var app = builder.Build();
var enviromentVariables = builder.Configuration.GetSection("EnviromentVariables"); var enviromentVariables = builder.Configuration.GetSection("EnviromentVariables");
app.MapGet("/validate", async ([FromBody] SsnRequest validationRequest) => app.MapGet("/validate", async ([FromBody] Request validationRequest, HttpClient httpClient) =>
{ {
if ((string.IsNullOrWhiteSpace(validationRequest.Ssn) && var request = Request.GetRequestWithApiKey(validationRequest, enviromentVariables);
(string.IsNullOrWhiteSpace(validationRequest.Email) || if (request.IsFailure)
string.IsNullOrWhiteSpace(validationRequest.FirstName))) || return Results.BadRequest(request.Failure);
(!string.IsNullOrWhiteSpace(validationRequest.Email) &&
string.IsNullOrWhiteSpace(validationRequest.FirstName)))
{
return Results.BadRequest("Invalid request. Either SSN or both Email and FirstName must be provided.");
}
var httpClient = new HttpClient();
var request = GetRequestWithApiKey(validationRequest, enviromentVariables);
var response = await httpClient.PostAsJsonAsync(enviromentVariables["ApiUrl"], request);
var response = await httpClient.PostAsJsonAsync(enviromentVariables["ApiUrl"], request.Success);
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{
return Results.StatusCode((int)response.StatusCode); return Results.StatusCode((int)response.StatusCode);
}
return Results.Ok(response.Content.ReadAsStringAsync().Result.Contains("\"member_found\":true,")); return Results.Ok(response.Content.ReadAsStringAsync().Result.Contains("\"member_found\":true,"));
}) })
.WithName("ValidateMember"); .WithName("ValidateMember");
app.Run(); app.Run();
static ValidateMembersRoot GetRequestWithApiKey(SsnRequest original, IConfigurationSection enviromentVariables)
{
var newRequest = new
{
ApiKey = enviromentVariables["ApiKey"],
Action = "confirm_membership",
AssociationNumber = enviromentVariables["AssociationNumber"]
};
return new ValidateMembersRoot(
new ValidateMembersRequest(
newRequest.Action,
newRequest.AssociationNumber ?? "",
newRequest.ApiKey ?? "",
YearId: null,
Firstname: original.FirstName ?? null,
Lastname: null,
SSN: original.Ssn ?? null,
Email: original.Email ?? null,
Phone: null,
MemberNick: null,
DiscordId: null
)
);
}
record SsnRequest(string? Ssn, string? Email, string? FirstName);
record ValidateMembersRoot(
[property: JsonPropertyName("request")] ValidateMembersRequest Request
);
record ValidateMembersRequest(
[property: JsonPropertyName("action")] string Action,
[property: JsonPropertyName("association_number")] string AssociationNumber,
[property: JsonPropertyName("api_key")] string ApiKey,
[property: JsonPropertyName("year_id")] int? YearId,
[property: JsonPropertyName("firstname")] string? Firstname,
[property: JsonPropertyName("lastname")] string? Lastname,
[property: JsonPropertyName("socialsecuritynumber")] string? SSN,
[property: JsonPropertyName("email")] string? Email,
[property: JsonPropertyName("phone1")] string? Phone,
[property: JsonPropertyName("member_nick")] string? MemberNick,
[property: JsonPropertyName("discord_user_id")] string? DiscordId
);

View file

@ -0,0 +1,82 @@
using System.Text.Json.Serialization;
namespace AuthAPI;
public class Request(string? ssn, string? email, string? firstName)
{
public string? Ssn { get; } = ssn;
public string? Email { get; } = email;
public string? FirstName { get; } = firstName;
public static Result GetRequestWithApiKey(Request request, IConfigurationSection enviromentVariables)
{
if (ValidateRequest(request))
return Result.CreateFailure(
"Invalid request. Either SSN or both Email and FirstName must be provided.");
return Result.CreateSuccess(
new ValidateMembersRoot(
new ValidateMembersRequest(
"confirm_membership",
enviromentVariables["AssociationNumber"] ?? "",
enviromentVariables["ApiKey"] ?? "",
YearId: null,
Firstname: request.FirstName ?? null,
Lastname: null,
SSN: request.Ssn ?? null,
Email: request.Email ?? null,
Phone: null,
MemberNick: null,
DiscordId: null
)
)
);
}
private static bool ValidateRequest(Request validationRequest) => (
(string.IsNullOrWhiteSpace(validationRequest.Ssn) &&
(string.IsNullOrWhiteSpace(validationRequest.Email) ||
string.IsNullOrWhiteSpace(validationRequest.FirstName))) ||
(!string.IsNullOrWhiteSpace(validationRequest.Email) &&
string.IsNullOrWhiteSpace(validationRequest.FirstName))) ||
(!string.IsNullOrWhiteSpace(validationRequest.Ssn) &&
long.TryParse(validationRequest.Ssn ?? "", out _) == false);
};
public record ValidateMembersRoot(
[property: JsonPropertyName("request")] ValidateMembersRequest Request
);
public record ValidateMembersRequest(
[property: JsonPropertyName("action")] string Action,
[property: JsonPropertyName("association_number")] string AssociationNumber,
[property: JsonPropertyName("api_key")] string ApiKey,
[property: JsonPropertyName("year_id")] int? YearId,
[property: JsonPropertyName("firstname")] string? Firstname,
[property: JsonPropertyName("lastname")] string? Lastname,
[property: JsonPropertyName("socialsecuritynumber")] string? SSN,
[property: JsonPropertyName("email")] string? Email,
[property: JsonPropertyName("phone1")] string? Phone,
[property: JsonPropertyName("member_nick")] string? MemberNick,
[property: JsonPropertyName("discord_user_id")] string? DiscordId
);
public record Result
{
public ValidateMembersRoot? Success { get; }
public string? Failure { get; }
public bool IsSuccess => Success is not null;
public bool IsFailure => Failure is not null;
private Result(ValidateMembersRoot? success, string? failure)
{
Success = success;
Failure = failure;
}
public static Result CreateSuccess(ValidateMembersRoot success) =>
new(success, default);
public static Result CreateFailure(string failure) =>
new(default, failure);
}