@page "/register" @using System.Net @using System.Text @using AutoMapper @using VisaApiClient @using BlazorWebAssemblyVisaApiClient.Components.FormComponents.Applicants @using BlazorWebAssemblyVisaApiClient.FluentValidation.Applicants.Models @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services @using global::FluentValidation @using Newtonsoft.Json @using Newtonsoft.Json.Linq Registration

Registration data

Authentication data
Your Fullname
Fullname of your mother
Fullname of your father
Your passport
Birth data





Citizenship



Address of your place of work
Place of work data


Other



@((MarkupString)requestResult)

@code { private RegisterApplicantRequestModel requestModel = new(); private string requestResult = string.Empty; private string requestResultClass = string.Empty; [Inject] public Client Client { get; set; } = null!; [Inject] IValidator RegisterApplicantRequestValidator { get; set; } = null!; [Inject] IMapper Mapper { get; set; } = null!; [Inject] IDateTimeProvider DateTimeProvider { get; set; } = null!; protected override void OnInitialized() { requestModel.BirthDate = DateTime.Now; } private void SetRequestResultMessage(string message) { requestResult = message; requestResultClass = string.Empty; StateHasChanged(); } private void SetRequestResultSuccess(string message) { requestResult = message; requestResultClass = "text-success"; StateHasChanged(); } private void SetRequestResultError(string message) { requestResult = message; requestResultClass = "validation-message"; StateHasChanged(); } private string ErrorsToString(IEnumerable errors) { var stringBuilder = new StringBuilder(); foreach (var error in errors) { stringBuilder.Append($"{error}
"); } return stringBuilder.ToString(); } private async void TryRegisterApplicant() { var validationResult = await RegisterApplicantRequestValidator.ValidateAsync(requestModel); if (!validationResult.IsValid) { var errorsString = ErrorsToString(validationResult.Errors.Select(e => e.ErrorMessage)); SetRequestResultError(errorsString); return; } SetRequestResultMessage("Wait..."); var request = Mapper.Map(requestModel); try { await Client.RegisterAsync(request); SetRequestResultSuccess("Register successful. Now log in."); } catch (ApiException e) { if (e.StatusCode == (int)HttpStatusCode.BadRequest && e.Result.AdditionalProperties.TryGetValue("errors", out var errors)) { var errorsList = ((JArray)errors).ToObject>(); if (errorsList is null) { throw new JsonException(); } SetRequestResultError(ErrorsToString(errorsList)); } else { SetRequestResultError(e.Result.Detail!); } } } }