diff --git a/SchengenVisaApi/ApplicationLayer/Constants.cs b/SchengenVisaApi/ApplicationLayer/Constants.cs new file mode 100644 index 0000000..2cf42e8 --- /dev/null +++ b/SchengenVisaApi/ApplicationLayer/Constants.cs @@ -0,0 +1,13 @@ +using System.Text.RegularExpressions; + +namespace ApplicationLayer +{ + public static class Constants + { + public readonly static Regex EnglishWordRegex = new("^[a-zA-Z]*$"); + + public readonly static Regex EnglishPhraseRegex = new(@"^[a-zA-Z№0-9?><;,{}[\]\-_+=!@#$%\^&*|']*$"); + + public readonly static Regex PhoneNumRegex = new(@"^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$"); + } +} diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/NameModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/NameModelValidator.cs index 2ac282d..4bb629c 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/NameModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/NameModelValidator.cs @@ -10,16 +10,22 @@ public class NameModelValidator : AbstractValidator RuleFor(m => m.FirstName) .NotEmpty() .WithMessage("First Name can not be empty") + .Matches(Constants.EnglishWordRegex) + .WithMessage("First name must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"First Name length must be less than {ConfigurationConstraints.NameLength}"); RuleFor(m => m.Surname) .NotEmpty() .WithMessage("Surname can not be empty") + .Matches(Constants.EnglishWordRegex) + .WithMessage("Surname must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"Surname length must be less than {ConfigurationConstraints.NameLength}"); RuleFor(m => m.Patronymic) + .Matches(Constants.EnglishWordRegex) + .WithMessage("Patronymic must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"Patronymic length must be less than {ConfigurationConstraints.NameLength}"); } diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PassportModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PassportModelValidator.cs index 0671e7e..93eae59 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PassportModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PassportModelValidator.cs @@ -11,12 +11,16 @@ public class PassportModelValidator : AbstractValidator RuleFor(r => r.Issuer) .NotEmpty() .WithMessage("Passport issuer can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Passport issuer field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.IssuerNameLength) .WithMessage($"Passport issuer length must be less than {ConfigurationConstraints.IssuerNameLength}"); RuleFor(r => r.Number) .NotEmpty() .WithMessage("Passport number can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Passport number field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PassportNumberLength) .WithMessage($"Passport number length must be less than {ConfigurationConstraints.PassportNumberLength}"); diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PlaceOfWorkModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PlaceOfWorkModelValidator.cs index 4008831..dc5449b 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PlaceOfWorkModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/Validation/PlaceOfWorkModelValidator.cs @@ -10,12 +10,16 @@ public class PlaceOfWorkModelValidator : AbstractValidator RuleFor(p => p.Name) .NotEmpty() .WithMessage("Place of work name can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work name field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PlaceOfWorkNameLength) .WithMessage($"Place of work name length must be less than {ConfigurationConstraints.PlaceOfWorkNameLength}"); RuleFor(p => p.PhoneNum) .NotEmpty() .WithMessage("Place of work phone number can not be empty") + .Matches(Constants.PhoneNumRegex) + .WithMessage("Place of work phone number field must be valid") .MaximumLength(ConfigurationConstraints.PhoneNumberLength) .WithMessage( $"Phone number length must be in range from {ConfigurationConstraints.PhoneNumberMinLength} to {ConfigurationConstraints.PhoneNumberLength}") @@ -23,27 +27,39 @@ public class PlaceOfWorkModelValidator : AbstractValidator .WithMessage( $"Phone number length must be in range from {ConfigurationConstraints.PhoneNumberMinLength} to {ConfigurationConstraints.PhoneNumberLength}"); + RuleFor(p => p.Address) + .NotEmpty() + .WithMessage("Place of work address can not be empty"); + RuleFor(p => p.Address.Country) .NotEmpty() .WithMessage("Country name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work Country field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Country name of place of work length must be less than {ConfigurationConstraints.CountryNameLength}"); RuleFor(p => p.Address.City) .NotEmpty() .WithMessage("City name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work City field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CityNameLength) .WithMessage($"City name of place of work length must be less than {ConfigurationConstraints.CityNameLength}"); RuleFor(p => p.Address.Street) .NotEmpty() .WithMessage("Street name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work Street field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.StreetNameLength) .WithMessage($"Street name of place of work length must be less than {ConfigurationConstraints.StreetNameLength}"); RuleFor(p => p.Address.Building) .NotEmpty() .WithMessage("Building of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work building field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Building of place of work length must be less than {ConfigurationConstraints.BuildingNumberLength}"); } diff --git a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/AuthDataValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/AuthDataValidator.cs index b8e1c55..273a3c7 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/AuthDataValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/AuthDataValidator.cs @@ -19,6 +19,8 @@ public class AuthDataValidator : AbstractValidator RuleFor(d => d.Password) .NotEmpty() .WithMessage("Password can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Password can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PasswordLength) .WithMessage($"Password length must be less than {ConfigurationConstraints.PasswordLength}"); } diff --git a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterApplicantRequestValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterApplicantRequestValidator.cs index 0a8b159..8cf69e2 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterApplicantRequestValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterApplicantRequestValidator.cs @@ -15,18 +15,23 @@ public class RegisterApplicantRequestValidator : AbstractValidator placeOfWorkModelValidator) { RuleFor(r => r.RegisterRequest) + .NotEmpty() .SetValidator(registerRequestValidator); RuleFor(r => r.ApplicantName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.FatherName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.MotherName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.Passport) + .NotEmpty() .SetValidator(passportValidator); RuleFor(r => r.BirthDate) @@ -38,38 +43,51 @@ public class RegisterApplicantRequestValidator : AbstractValidator r.CountryOfBirth) .NotEmpty() .WithMessage("Country of birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Country of birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Country of birth name length must be less than {ConfigurationConstraints.CountryNameLength}"); RuleFor(r => r.CityOfBirth) .NotEmpty() .WithMessage("City of birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("City of birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CityNameLength) .WithMessage($"City of birth name length must be less than {ConfigurationConstraints.CityNameLength}"); RuleFor(r => r.Citizenship) .NotEmpty() .WithMessage("Citizenship can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Citizenship field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CitizenshipLength) .WithMessage($"Citizenship length must be less than {ConfigurationConstraints.CitizenshipLength}"); RuleFor(r => r.CitizenshipByBirth) .NotEmpty() .WithMessage("Citizenship by birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Citizenship by birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CitizenshipLength) .WithMessage($"Citizenship by birth length must be less than {ConfigurationConstraints.CitizenshipLength}"); - RuleFor(r => r.Gender).IsInEnum(); + RuleFor(r => r.Gender) + .IsInEnum(); - RuleFor(r => r.MaritalStatus).IsInEnum(); + RuleFor(r => r.MaritalStatus) + .IsInEnum(); RuleFor(r => r.JobTitle) .NotEmpty() .WithMessage("Title of job can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Title of job field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.JobTitleLength) .WithMessage($"Title of job length must be less than {ConfigurationConstraints.JobTitleLength}"); RuleFor(r => r.PlaceOfWork) + .NotEmpty() .SetValidator(placeOfWorkModelValidator); } } diff --git a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterRequestValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterRequestValidator.cs index 87f342f..295cfce 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterRequestValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/AuthServices/Requests/Validation/RegisterRequestValidator.cs @@ -9,6 +9,7 @@ public class RegisterRequestValidator : AbstractValidator public RegisterRequestValidator(IUsersRepository users, IValidator authDataValidator) { RuleFor(r => r.AuthData) + .NotEmpty() .SetValidator(authDataValidator) .MustAsync(async (authData, ct) => await users.FindByEmailAsync(authData.Email, ct) is null) .WithMessage("Email already exists"); diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisaModel.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisaModel.cs index 0aa0b02..a421dbb 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisaModel.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisaModel.cs @@ -12,6 +12,7 @@ public class PastVisaModel /// Name of visa [MaxLength(ConfigurationConstraints.VisaNameLength)] + [Required] public string Name { get; set; } = null!; /// Date when visa expires diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisitModel.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisitModel.cs index 16df158..ae8f4a8 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisitModel.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PastVisitModel.cs @@ -16,5 +16,6 @@ public class PastVisitModel /// Destination country of past visit [MaxLength(ConfigurationConstraints.CountryNameLength)] + [Required] public string DestinationCountry { get; set; } = null!; } diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PermissionToDestCountryModel.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PermissionToDestCountryModel.cs index cd1f59c..64d8155 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PermissionToDestCountryModel.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/PermissionToDestCountryModel.cs @@ -12,5 +12,6 @@ public class PermissionToDestCountryModel /// Issuing authority [MaxLength(ConfigurationConstraints.IssuerNameLength)] + [Required] public string Issuer { get; set; } = null!; } diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisaModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisaModelValidator.cs index db09e36..ca6e0c4 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisaModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisaModelValidator.cs @@ -1,4 +1,5 @@ using ApplicationLayer.InfrastructureServicesInterfaces; +using Domains; using FluentValidation; namespace ApplicationLayer.Services.VisaApplications.Models.Validation; @@ -21,6 +22,10 @@ public class PastVisaModelValidator : AbstractValidator RuleFor(v => v.Name) .NotEmpty() - .WithMessage("Name of past visa can not be empty"); + .WithMessage("Name of past visa can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Name of past visa can contain only english letters, digits and special symbols") + .MaximumLength(ConfigurationConstraints.VisaNameLength) + .WithMessage($"Past visa name length must be less than {ConfigurationConstraints.VisaNameLength}"); } } diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisitModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisitModelValidator.cs index 19b4da3..bd08a96 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisitModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PastVisitModelValidator.cs @@ -23,6 +23,8 @@ public class PastVisitModelValidator : AbstractValidator RuleFor(v => v.DestinationCountry) .NotEmpty() .WithMessage("Destination Country of past visit can not be null") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Destination Country of past visit can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Destination Country of past visit length must be less than {ConfigurationConstraints.CountryNameLength}"); } diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PermissionToDestCountryModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PermissionToDestCountryModelValidator.cs index be267f7..e7618a6 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PermissionToDestCountryModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/PermissionToDestCountryModelValidator.cs @@ -17,6 +17,8 @@ public class PermissionToDestCountryModelValidator : AbstractValidator p!.Issuer) .NotEmpty() .WithMessage("Issuer of permission for destination Country can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Issuer of permission for destination Country can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.IssuerNameLength) .WithMessage($"Issuer of permission to destination Country length must be less than {ConfigurationConstraints.IssuerNameLength}"); } diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/ReentryPermitModelValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/ReentryPermitModelValidator.cs index 4dfb291..35a0fcf 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/ReentryPermitModelValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/Validation/ReentryPermitModelValidator.cs @@ -11,6 +11,8 @@ public class ReentryPermitModelValidator : AbstractValidator p!.Number) .NotEmpty() .WithMessage("Re-entry permit number can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Re-entry permit number can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.ReentryPermitNumberLength) .WithMessage($"Re-entry permit number length must be less than {ConfigurationConstraints.ReentryPermitNumberLength}"); diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Auth/AuthComponent.razor b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Auth/AuthComponent.razor index 2883b7e..16d21bb 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Auth/AuthComponent.razor +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Auth/AuthComponent.razor @@ -27,7 +27,7 @@ Client.AuthToken = token; AuthData = authData; - Status?.SetSucces("Logged in successfully."); + Status?.SetSuccess("Logged in successfully."); } catch (ApiException e) { diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/FormComponents/Applicants/NameInput.razor b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/FormComponents/Applicants/NameInput.razor index ad0de6c..4c6b2d8 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/FormComponents/Applicants/NameInput.razor +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/FormComponents/Applicants/NameInput.razor @@ -3,7 +3,7 @@

@@ -11,7 +11,7 @@

diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Status.razor b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Status.razor index 44a5470..307de44 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Status.razor +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Components/Status.razor @@ -25,7 +25,7 @@ StateHasChanged(); } - public void SetSucces(string message) + public void SetSuccess(string message) { statusClass = "text-success"; StatusText = message; diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Constants.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Constants.cs new file mode 100644 index 0000000..3ae4656 --- /dev/null +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Constants.cs @@ -0,0 +1,16 @@ +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Components; + +namespace BlazorWebAssemblyVisaApiClient +{ + public static class Constants + { + public readonly static Regex EnglishWordRegex = new("^[a-zA-Z]*$"); + + public readonly static Regex EnglishPhraseRegex = new(@"^[a-zA-Z№0-9?><;,{}[\]\-_+=!@#$%\^&*|']*$"); + + public readonly static Regex PhoneNumRegex = new(@"^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$"); + + public readonly static MarkupString RequiredFieldMarkup = (MarkupString)"*"; + } +} diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Pages/CreateApplication.razor b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Pages/CreateApplication.razor index e7502c3..1a108aa 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Pages/CreateApplication.razor +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Pages/CreateApplication.razor @@ -22,7 +22,7 @@
-
Visa
+
Visa@(Constants.RequiredFieldMarkup)
-
Your passport
+
Your passport@(Constants.RequiredFieldMarkup)
-
Birth data
+
Birth data@(Constants.RequiredFieldMarkup)
-
Citizenship
+
Citizenship@(Constants.RequiredFieldMarkup)
-
Address of your place of work
+
Address of your place of work@(Constants.RequiredFieldMarkup)
-
Place of work data
+
Place of work data@(Constants.RequiredFieldMarkup)

@@ -132,6 +133,7 @@ { private RegisterApplicantRequestModel requestModel = new(); private Status status = null!; + private string formattedMaxBirthdayDate = null!; [Inject] IValidator RegisterApplicantRequestValidator { get; set; } = null!; @@ -141,7 +143,8 @@ protected override void OnInitialized() { - requestModel.BirthDate = DateTime.Now; + requestModel.BirthDate = DateTime.Now.AddYears(-ConfigurationConstraints.ApplicantMinAge); + formattedMaxBirthdayDate = requestModel.BirthDate.ToString("yyyy-MM-dd"); } private async void TryRegisterApplicant() @@ -161,7 +164,7 @@ try { await Client.RegisterAsync(request); - status.SetSucces("Register successful. Now log in."); + status.SetSuccess("Register successful. Now log in."); } catch (ApiException e) { diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/NameModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/NameModelValidator.cs index e75ac21..d9a705a 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/NameModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/NameModelValidator.cs @@ -10,16 +10,22 @@ public class NameModelValidator : AbstractValidator RuleFor(m => m.FirstName) .NotEmpty() .WithMessage("First Name can not be empty") + .Matches(Constants.EnglishWordRegex) + .WithMessage("First name must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"First Name length must be less than {ConfigurationConstraints.NameLength}"); RuleFor(m => m.Surname) .NotEmpty() .WithMessage("Surname can not be empty") + .Matches(Constants.EnglishWordRegex) + .WithMessage("Surname must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"Surname length must be less than {ConfigurationConstraints.NameLength}"); RuleFor(m => m.Patronymic) + .Matches(Constants.EnglishWordRegex) + .WithMessage("Patronymic must be in english characters") .MaximumLength(ConfigurationConstraints.NameLength) .WithMessage($"Patronymic length must be less than {ConfigurationConstraints.NameLength}"); } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PassportModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PassportModelValidator.cs index a4b5355..0849030 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PassportModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PassportModelValidator.cs @@ -11,12 +11,16 @@ public class PassportModelValidator : AbstractValidator RuleFor(r => r.Issuer) .NotEmpty() .WithMessage("Passport issuer can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Passport issuer field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.IssuerNameLength) .WithMessage($"Passport issuer length must be less than {ConfigurationConstraints.IssuerNameLength}"); RuleFor(r => r.Number) .NotEmpty() .WithMessage("Passport number can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Passport number field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PassportNumberLength) .WithMessage($"Passport number length must be less than {ConfigurationConstraints.PassportNumberLength}"); diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PlaceOfWorkModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PlaceOfWorkModelValidator.cs index ded903e..e209364 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PlaceOfWorkModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/PlaceOfWorkModelValidator.cs @@ -10,12 +10,16 @@ public class PlaceOfWorkModelValidator : AbstractValidator RuleFor(p => p.Name) .NotEmpty() .WithMessage("Place of work name can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work name field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PlaceOfWorkNameLength) .WithMessage($"Place of work name length must be less than {ConfigurationConstraints.PlaceOfWorkNameLength}"); RuleFor(p => p.PhoneNum) .NotEmpty() .WithMessage("Place of work phone number can not be empty") + .Matches(Constants.PhoneNumRegex) + .WithMessage("Place of work phone number field must be valid") .MaximumLength(ConfigurationConstraints.PhoneNumberLength) .WithMessage( $"Phone number length must be in range from {ConfigurationConstraints.PhoneNumberMinLength} to {ConfigurationConstraints.PhoneNumberLength}") @@ -23,27 +27,39 @@ public class PlaceOfWorkModelValidator : AbstractValidator .WithMessage( $"Phone number length must be in range from {ConfigurationConstraints.PhoneNumberMinLength} to {ConfigurationConstraints.PhoneNumberLength}"); + RuleFor(p => p.Address) + .NotEmpty() + .WithMessage("Place of work address can not be empty"); + RuleFor(p => p.Address.Country) .NotEmpty() .WithMessage("Country name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work Country field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Country name of place of work length must be less than {ConfigurationConstraints.CountryNameLength}"); RuleFor(p => p.Address.City) .NotEmpty() .WithMessage("City name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work City field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CityNameLength) .WithMessage($"City name of place of work length must be less than {ConfigurationConstraints.CityNameLength}"); RuleFor(p => p.Address.Street) .NotEmpty() .WithMessage("Street name of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work Street field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.StreetNameLength) .WithMessage($"Street name of place of work length must be less than {ConfigurationConstraints.StreetNameLength}"); RuleFor(p => p.Address.Building) .NotEmpty() .WithMessage("Building of place of work can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Place of work building field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Building of place of work length must be less than {ConfigurationConstraints.BuildingNumberLength}"); } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/RegisterApplicantRequestValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/RegisterApplicantRequestValidator.cs index a726873..af813a0 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/RegisterApplicantRequestValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Applicants/Validators/RegisterApplicantRequestValidator.cs @@ -11,23 +11,28 @@ public class RegisterApplicantRequestValidator : AbstractValidator nameValidator, - IValidator registerRequestModelValidator, + IValidator registerRequestValidator, IValidator passportValidator, IValidator placeOfWorkModelValidator) { RuleFor(r => r.RegisterRequest) - .SetValidator(registerRequestModelValidator); + .NotEmpty() + .SetValidator(registerRequestValidator); RuleFor(r => r.ApplicantName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.FatherName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.MotherName) + .NotEmpty() .SetValidator(nameValidator); RuleFor(r => r.Passport) + .NotEmpty() .SetValidator(passportValidator); RuleFor(r => r.BirthDate) @@ -39,38 +44,51 @@ public class RegisterApplicantRequestValidator : AbstractValidator r.CountryOfBirth) .NotEmpty() .WithMessage("Country of birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Country of birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Country of birth name length must be less than {ConfigurationConstraints.CountryNameLength}"); RuleFor(r => r.CityOfBirth) .NotEmpty() .WithMessage("City of birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("City of birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CityNameLength) .WithMessage($"City of birth name length must be less than {ConfigurationConstraints.CityNameLength}"); RuleFor(r => r.Citizenship) .NotEmpty() .WithMessage("Citizenship can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Citizenship field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CitizenshipLength) .WithMessage($"Citizenship length must be less than {ConfigurationConstraints.CitizenshipLength}"); RuleFor(r => r.CitizenshipByBirth) .NotEmpty() .WithMessage("Citizenship by birth can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Citizenship by birth field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CitizenshipLength) .WithMessage($"Citizenship by birth length must be less than {ConfigurationConstraints.CitizenshipLength}"); - RuleFor(r => r.Gender).IsInEnum(); + RuleFor(r => r.Gender) + .IsInEnum(); - RuleFor(r => r.MaritalStatus).IsInEnum(); + RuleFor(r => r.MaritalStatus) + .IsInEnum(); RuleFor(r => r.JobTitle) .NotEmpty() .WithMessage("Title of job can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Title of job field can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.JobTitleLength) .WithMessage($"Title of job length must be less than {ConfigurationConstraints.JobTitleLength}"); RuleFor(r => r.PlaceOfWork) + .NotEmpty() .SetValidator(placeOfWorkModelValidator); } } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/AuthDataValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/AuthDataValidator.cs index 560d88c..13f31d3 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/AuthDataValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/AuthDataValidator.cs @@ -18,6 +18,8 @@ public class AuthDataValidator : AbstractValidator RuleFor(d => d.Password) .NotEmpty() .WithMessage("Password can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Password can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.PasswordLength) .WithMessage($"Password length must be less than {ConfigurationConstraints.PasswordLength}"); } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestValidator.cs similarity index 60% rename from SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestModelValidator.cs rename to SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestValidator.cs index e223bbb..d45c426 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/Common/RegisterRequestValidator.cs @@ -4,11 +4,12 @@ using VisaApiClient; namespace BlazorWebAssemblyVisaApiClient.Validation.Common; -public class RegisterRequestModelValidator : AbstractValidator +public class RegisterRequestValidator : AbstractValidator { - public RegisterRequestModelValidator(IValidator authDataValidator) + public RegisterRequestValidator(IValidator authDataValidator) { RuleFor(r => r.AuthData) + .NotEmpty() .SetValidator(authDataValidator); } } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Models/VisaApplicationCreateRequestModel.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Models/VisaApplicationCreateRequestModel.cs index 573e1dc..a15a453 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Models/VisaApplicationCreateRequestModel.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Models/VisaApplicationCreateRequestModel.cs @@ -7,7 +7,7 @@ namespace BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models public class VisaApplicationCreateRequestModel { [ValidateComplexType] - public ReentryPermitModel? ReentryPermit { get; set; } = new(); + public ReentryPermitModel? ReentryPermit { get; set; } = default!; [Required] [MaxLength(ConfigurationConstraints.CountryNameLength)] @@ -26,11 +26,13 @@ namespace BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models [Range(0, ConfigurationConstraints.MaxValidDays)] public int ValidDaysRequested { get; set; } - [ValidateComplexType] public PastVisaModel[] PastVisas { get; set; } = default!; + [ValidateComplexType] + public List PastVisas { get; set; } = []; [ValidateComplexType] - public PermissionToDestCountryModel? PermissionToDestCountry { get; set; } = new(); + public PermissionToDestCountryModel? PermissionToDestCountry { get; set; } = default!; - [ValidateComplexType] public PastVisitModel[] PastVisits { get; set; } = default!; + [ValidateComplexType] + public List PastVisits { get; set; } = []; } } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisaModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisaModelValidator.cs index 6a3f870..3eb0f65 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisaModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisaModelValidator.cs @@ -22,6 +22,10 @@ public class PastVisaModelValidator : AbstractValidator RuleFor(v => v.Name) .NotEmpty() - .WithMessage("Name of past visa can not be empty"); + .WithMessage("Name of past visa can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Name of past visa can contain only english letters, digits and special symbols") + .MaximumLength(ConfigurationConstraints.VisaNameLength) + .WithMessage($"Past visa name length must be less than {ConfigurationConstraints.VisaNameLength}"); } } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisitModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisitModelValidator.cs index bb19981..8c0715a 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisitModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PastVisitModelValidator.cs @@ -23,6 +23,8 @@ public class PastVisitModelValidator : AbstractValidator RuleFor(v => v.DestinationCountry) .NotEmpty() .WithMessage("Destination Country of past visit can not be null") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Destination Country of past visit can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.CountryNameLength) .WithMessage($"Destination Country of past visit length must be less than {ConfigurationConstraints.CountryNameLength}"); } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PermissionToDestCountryModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PermissionToDestCountryModelValidator.cs index 8ed1c00..fc841e4 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PermissionToDestCountryModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/PermissionToDestCountryModelValidator.cs @@ -17,6 +17,8 @@ public class PermissionToDestCountryModelValidator : AbstractValidator p!.Issuer) .NotEmpty() .WithMessage("Issuer of permission for destination Country can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Issuer of permission for destination Country can contain only english letters, digits and special symbols") .MaximumLength(ConfigurationConstraints.IssuerNameLength) .WithMessage($"Issuer of permission to destination Country length must be less than {ConfigurationConstraints.IssuerNameLength}"); } diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/ReentryPermitModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/ReentryPermitModelValidator.cs new file mode 100644 index 0000000..fa8f19a --- /dev/null +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/ReentryPermitModelValidator.cs @@ -0,0 +1,25 @@ +using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.DateTimeProvider; +using FluentValidation; +using VisaApiClient; + +namespace BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Validators; + +public class ReentryPermitModelValidator : AbstractValidator +{ + public ReentryPermitModelValidator(IDateTimeProvider dateTimeProvider) + { + RuleFor(p => p!.Number) + .NotEmpty() + .WithMessage("Re-entry permit number can not be empty") + .Matches(Constants.EnglishPhraseRegex) + .WithMessage("Re-entry permit number can contain only english letters, digits and special symbols") + .MaximumLength(ConfigurationConstraints.ReentryPermitNumberLength) + .WithMessage($"Re-entry permit number length must be less than {ConfigurationConstraints.ReentryPermitNumberLength}"); + + RuleFor(p => p!.ExpirationDate) + .NotEmpty() + .WithMessage("Re-entry permit expiration date can not be empty") + .GreaterThan(dateTimeProvider.Now()) + .WithMessage("Re-entry permit must not be expired"); + } +} diff --git a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestModelValidator.cs b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestValidator.cs similarity index 64% rename from SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestModelValidator.cs rename to SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestValidator.cs index 04f5fc5..d39edf1 100644 --- a/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestModelValidator.cs +++ b/SchengenVisaApi/BlazorWebAssemblyVisaApiClient/Validation/VisaApplications/Validators/VisaApplicationCreateRequestValidator.cs @@ -1,15 +1,18 @@ -using BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models; +using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider; +using BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models; using FluentValidation; using VisaApiClient; namespace BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Validators; -public class VisaApplicationCreateRequestModelValidator : AbstractValidator +public class VisaApplicationCreateRequestValidator : AbstractValidator { - public VisaApplicationCreateRequestModelValidator( + public VisaApplicationCreateRequestValidator( + IValidator reentryPermitModelValidator, IValidator pastVisaModelValidator, IValidator permissionToDestCountryModelValidator, - IValidator pastVisitModelValidator) + IValidator pastVisitModelValidator, + IUserDataProvider userDataProvider) { RuleFor(r => r.PermissionToDestCountry) .NotEmpty() @@ -17,6 +20,13 @@ public class VisaApplicationCreateRequestModelValidator : AbstractValidator r.VisaCategory is VisaCategory.Transit); + RuleFor(r => r.ReentryPermit) + .NotEmpty() + .WithMessage("Non-residents must provide re-entry permission") + .SetValidator(reentryPermitModelValidator) + .WhenAsync(async (_, _) => + (await userDataProvider.GetApplicant()).IsNonResident); + RuleFor(r => r.DestinationCountry) .NotEmpty() .WithMessage("Destination country can not be empty"); diff --git a/SchengenVisaApi/VisaApiClient/Client.cs b/SchengenVisaApi/VisaApiClient/Client.cs index 1f6069f..f81a0f3 100644 --- a/SchengenVisaApi/VisaApiClient/Client.cs +++ b/SchengenVisaApi/VisaApiClient/Client.cs @@ -1799,9 +1799,10 @@ namespace VisaApiClient [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] public System.DateTimeOffset IssueDate { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [System.ComponentModel.DataAnnotations.StringLength(70)] - public string? Name { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(70, MinimumLength = 1)] + public string Name { get; set; } = default!; [Newtonsoft.Json.JsonProperty("expirationDate", Required = Newtonsoft.Json.Required.Always)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] @@ -1820,9 +1821,10 @@ namespace VisaApiClient [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] public System.DateTimeOffset EndDate { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("destinationCountry", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [System.ComponentModel.DataAnnotations.StringLength(70)] - public string? DestinationCountry { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("destinationCountry", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(70, MinimumLength = 1)] + public string DestinationCountry { get; set; } = default!; } @@ -1833,9 +1835,10 @@ namespace VisaApiClient [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] public System.DateTimeOffset ExpirationDate { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [System.ComponentModel.DataAnnotations.StringLength(200)] - public string? Issuer { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(200, MinimumLength = 1)] + public string Issuer { get; set; } = default!; } diff --git a/SchengenVisaApi/VisaApiClient/clientGeneratorConfig.nswag b/SchengenVisaApi/VisaApiClient/clientGeneratorConfig.nswag index a840463..dc3bcb6 100644 --- a/SchengenVisaApi/VisaApiClient/clientGeneratorConfig.nswag +++ b/SchengenVisaApi/VisaApiClient/clientGeneratorConfig.nswag @@ -3,7 +3,7 @@ "defaultVariables": null, "documentGenerator": { "fromDocument": { - "json": "{\r\n \"openapi\": \"3.0.1\",\r\n \"info\": {\r\n \"title\": \"SchengenVisaApi\",\r\n \"version\": \"1.0\"\r\n },\r\n \"paths\": {\r\n \"/users/register\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Adds applicant with user account\",\r\n \"operationId\": \"Register\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/authorities\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Adds approving authority with user account\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"RegisterAuthority\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns list of authority accounts\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"GetAuthorityAccounts\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/login\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns JWT-token for authentication\",\r\n \"operationId\": \"Login\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"email\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"password\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/authorities/{authorityAccountId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Changes authority's account authentication data\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"ChangeAuthorityAuthData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"authorityAccountId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"delete\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Removes authority's account\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"RemoveAuthorityAccount\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"authorityAccountId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/applicant\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns applicant info\",\r\n \"operationId\": \"GetApplicant\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/pending\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Returns pending applications\",\r\n \"description\": \"Accessible only for approving authorities\",\r\n \"operationId\": \"GetPending\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/ofApplicant\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Returns all applications of one applicant\",\r\n \"description\": \"Returns applications of authorized applicant\",\r\n \"operationId\": \"GetForApplicant\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Adds new application\",\r\n \"description\": \"Adds application for authorized applicant\",\r\n \"operationId\": \"CreateApplication\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/{applicationId}\": {\r\n \"patch\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Sets application status to closed\",\r\n \"description\": \"Accessible only for applicant\",\r\n \"operationId\": \"CloseApplication\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"applicationId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/approving/{applicationId}\": {\r\n \"patch\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Approve or reject applications\",\r\n \"description\": \"Accessible only for authorities\",\r\n \"operationId\": \"SetStatusFromAuthority\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"applicationId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"status\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthorityRequestStatuses\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"components\": {\r\n \"schemas\": {\r\n \"AddressModel\": {\r\n \"required\": [\r\n \"building\",\r\n \"city\",\r\n \"country\",\r\n \"street\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"country\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"city\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"street\": {\r\n \"maxLength\": 100,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"building\": {\r\n \"maxLength\": 10,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ApplicantModel\": {\r\n \"required\": [\r\n \"birthDate\",\r\n \"citizenship\",\r\n \"citizenshipByBirth\",\r\n \"cityOfBirth\",\r\n \"countryOfBirth\",\r\n \"fatherName\",\r\n \"gender\",\r\n \"isNonResident\",\r\n \"jobTitle\",\r\n \"maritalStatus\",\r\n \"motherName\",\r\n \"name\",\r\n \"passport\",\r\n \"placeOfWork\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"passport\": {\r\n \"$ref\": \"#/components/schemas/PassportModel\"\r\n },\r\n \"birthDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"countryOfBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"cityOfBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenship\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenshipByBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"gender\": {\r\n \"$ref\": \"#/components/schemas/Gender\"\r\n },\r\n \"maritalStatus\": {\r\n \"$ref\": \"#/components/schemas/MaritalStatus\"\r\n },\r\n \"fatherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"motherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"jobTitle\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"placeOfWork\": {\r\n \"$ref\": \"#/components/schemas/PlaceOfWorkModel\"\r\n },\r\n \"isNonResident\": {\r\n \"type\": \"boolean\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ApplicationStatus\": {\r\n \"enum\": [\r\n \"Pending\",\r\n \"Approved\",\r\n \"Rejected\",\r\n \"Closed\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"AuthData\": {\r\n \"required\": [\r\n \"email\",\r\n \"password\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"email\": {\r\n \"maxLength\": 254,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"password\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"AuthToken\": {\r\n \"required\": [\r\n \"token\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"token\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"AuthorityRequestStatuses\": {\r\n \"enum\": [\r\n \"Approved\",\r\n \"Rejected\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"Gender\": {\r\n \"enum\": [\r\n \"Unknown\",\r\n \"Male\",\r\n \"Female\",\r\n \"Turkish\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"MaritalStatus\": {\r\n \"enum\": [\r\n \"Other\",\r\n \"Married\",\r\n \"Unmarried\",\r\n \"Separated\",\r\n \"WidowOrWidower\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"NameModel\": {\r\n \"required\": [\r\n \"firstName\",\r\n \"surname\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"firstName\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"surname\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"patronymic\": {\r\n \"maxLength\": 50,\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PassportModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"issueDate\",\r\n \"issuer\",\r\n \"number\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"number\": {\r\n \"maxLength\": 20,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"issuer\": {\r\n \"maxLength\": 200,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"issueDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PastVisaModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"issueDate\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"issueDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"name\": {\r\n \"maxLength\": 70,\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PastVisitModel\": {\r\n \"required\": [\r\n \"endDate\",\r\n \"startDate\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"startDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"destinationCountry\": {\r\n \"maxLength\": 70,\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PermissionToDestCountryModel\": {\r\n \"required\": [\r\n \"expirationDate\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"issuer\": {\r\n \"maxLength\": 200,\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PlaceOfWorkModel\": {\r\n \"required\": [\r\n \"address\",\r\n \"name\",\r\n \"phoneNum\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"maxLength\": 200,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"address\": {\r\n \"$ref\": \"#/components/schemas/AddressModel\"\r\n },\r\n \"phoneNum\": {\r\n \"maxLength\": 13,\r\n \"minLength\": 11,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ProblemDetails\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"type\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"status\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\",\r\n \"nullable\": true\r\n },\r\n \"detail\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"instance\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": {}\r\n },\r\n \"ReentryPermitModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"number\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"number\": {\r\n \"maxLength\": 25,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RegisterApplicantRequest\": {\r\n \"required\": [\r\n \"applicantName\",\r\n \"birthDate\",\r\n \"citizenship\",\r\n \"citizenshipByBirth\",\r\n \"cityOfBirth\",\r\n \"countryOfBirth\",\r\n \"fatherName\",\r\n \"gender\",\r\n \"isNonResident\",\r\n \"jobTitle\",\r\n \"maritalStatus\",\r\n \"motherName\",\r\n \"passport\",\r\n \"placeOfWork\",\r\n \"registerRequest\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"registerRequest\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n },\r\n \"applicantName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"passport\": {\r\n \"$ref\": \"#/components/schemas/PassportModel\"\r\n },\r\n \"birthDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"cityOfBirth\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"countryOfBirth\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenship\": {\r\n \"maxLength\": 30,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenshipByBirth\": {\r\n \"maxLength\": 30,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"gender\": {\r\n \"$ref\": \"#/components/schemas/Gender\"\r\n },\r\n \"maritalStatus\": {\r\n \"$ref\": \"#/components/schemas/MaritalStatus\"\r\n },\r\n \"fatherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"motherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"jobTitle\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"placeOfWork\": {\r\n \"$ref\": \"#/components/schemas/PlaceOfWorkModel\"\r\n },\r\n \"isNonResident\": {\r\n \"type\": \"boolean\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RegisterRequest\": {\r\n \"required\": [\r\n \"authData\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"authData\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RequestedNumberOfEntries\": {\r\n \"enum\": [\r\n \"Many\",\r\n \"One\",\r\n \"Two\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"UserModel\": {\r\n \"required\": [\r\n \"email\",\r\n \"id\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\",\r\n \"readOnly\": true\r\n },\r\n \"email\": {\r\n \"maxLength\": 254,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationCreateRequest\": {\r\n \"required\": [\r\n \"destinationCountry\",\r\n \"isForGroup\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestedNumberOfEntries\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"isForGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"validDaysRequested\": {\r\n \"maximum\": 90,\r\n \"minimum\": 0,\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationModelForApplicant\": {\r\n \"required\": [\r\n \"destinationCountry\",\r\n \"forGroup\",\r\n \"id\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestDate\",\r\n \"requestedNumberOfEntries\",\r\n \"status\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n },\r\n \"status\": {\r\n \"$ref\": \"#/components/schemas/ApplicationStatus\"\r\n },\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"forGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"requestDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"validDaysRequested\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationModelForAuthority\": {\r\n \"required\": [\r\n \"applicant\",\r\n \"destinationCountry\",\r\n \"forGroup\",\r\n \"id\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestDate\",\r\n \"requestedNumberOfEntries\",\r\n \"status\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n },\r\n \"applicant\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n },\r\n \"status\": {\r\n \"$ref\": \"#/components/schemas/ApplicationStatus\"\r\n },\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"forGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"requestDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"validDaysRequested\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaCategory\": {\r\n \"enum\": [\r\n \"Transit\",\r\n \"ShortDated\"\r\n ],\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"securitySchemes\": {\r\n \"Bearer\": {\r\n \"type\": \"http\",\r\n \"description\": \"Provide a JWT-token.\",\r\n \"scheme\": \"Bearer\",\r\n \"bearerFormat\": \"JWT\"\r\n }\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"Bearer\": []\r\n }\r\n ]\r\n}", + "json": "{\r\n \"openapi\": \"3.0.1\",\r\n \"info\": {\r\n \"title\": \"SchengenVisaApi\",\r\n \"version\": \"1.0\"\r\n },\r\n \"paths\": {\r\n \"/users/register\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Adds applicant with user account\",\r\n \"operationId\": \"Register\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterApplicantRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/authorities\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Adds approving authority with user account\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"RegisterAuthority\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns list of authority accounts\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"GetAuthorityAccounts\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserModel\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/login\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns JWT-token for authentication\",\r\n \"operationId\": \"Login\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"email\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"password\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthToken\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/authorities/{authorityAccountId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Changes authority's account authentication data\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"ChangeAuthorityAuthData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"authorityAccountId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"delete\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Removes authority's account\",\r\n \"description\": \"Accessible only for admins\",\r\n \"operationId\": \"RemoveAuthorityAccount\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"authorityAccountId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/users/applicant\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"summary\": \"Returns applicant info\",\r\n \"operationId\": \"GetApplicant\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/pending\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Returns pending applications\",\r\n \"description\": \"Accessible only for approving authorities\",\r\n \"operationId\": \"GetPending\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForAuthority\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/ofApplicant\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Returns all applications of one applicant\",\r\n \"description\": \"Returns applications of authorized applicant\",\r\n \"operationId\": \"GetForApplicant\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationModelForApplicant\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Adds new application\",\r\n \"description\": \"Adds application for authorized applicant\",\r\n \"operationId\": \"CreateApplication\",\r\n \"requestBody\": {\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n },\r\n \"application/*+json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/VisaApplicationCreateRequest\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/{applicationId}\": {\r\n \"patch\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Sets application status to closed\",\r\n \"description\": \"Accessible only for applicant\",\r\n \"operationId\": \"CloseApplication\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"applicationId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bad Request\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/visaApplications/approving/{applicationId}\": {\r\n \"patch\": {\r\n \"tags\": [\r\n \"VisaApplication\"\r\n ],\r\n \"summary\": \"Approve or reject applications\",\r\n \"description\": \"Accessible only for authorities\",\r\n \"operationId\": \"SetStatusFromAuthority\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"applicationId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"status\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AuthorityRequestStatuses\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Success\"\r\n },\r\n \"403\": {\r\n \"description\": \"Forbidden\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"401\": {\r\n \"description\": \"Unauthorized\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n },\r\n \"404\": {\r\n \"description\": \"Not Found\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n },\r\n \"text/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProblemDetails\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"components\": {\r\n \"schemas\": {\r\n \"AddressModel\": {\r\n \"required\": [\r\n \"building\",\r\n \"city\",\r\n \"country\",\r\n \"street\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"country\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"city\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"street\": {\r\n \"maxLength\": 100,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"building\": {\r\n \"maxLength\": 10,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ApplicantModel\": {\r\n \"required\": [\r\n \"birthDate\",\r\n \"citizenship\",\r\n \"citizenshipByBirth\",\r\n \"cityOfBirth\",\r\n \"countryOfBirth\",\r\n \"fatherName\",\r\n \"gender\",\r\n \"isNonResident\",\r\n \"jobTitle\",\r\n \"maritalStatus\",\r\n \"motherName\",\r\n \"name\",\r\n \"passport\",\r\n \"placeOfWork\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"passport\": {\r\n \"$ref\": \"#/components/schemas/PassportModel\"\r\n },\r\n \"birthDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"countryOfBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"cityOfBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenship\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenshipByBirth\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"gender\": {\r\n \"$ref\": \"#/components/schemas/Gender\"\r\n },\r\n \"maritalStatus\": {\r\n \"$ref\": \"#/components/schemas/MaritalStatus\"\r\n },\r\n \"fatherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"motherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"jobTitle\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"placeOfWork\": {\r\n \"$ref\": \"#/components/schemas/PlaceOfWorkModel\"\r\n },\r\n \"isNonResident\": {\r\n \"type\": \"boolean\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ApplicationStatus\": {\r\n \"enum\": [\r\n \"Pending\",\r\n \"Approved\",\r\n \"Rejected\",\r\n \"Closed\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"AuthData\": {\r\n \"required\": [\r\n \"email\",\r\n \"password\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"email\": {\r\n \"maxLength\": 254,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"password\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"AuthToken\": {\r\n \"required\": [\r\n \"token\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"token\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"AuthorityRequestStatuses\": {\r\n \"enum\": [\r\n \"Approved\",\r\n \"Rejected\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"Gender\": {\r\n \"enum\": [\r\n \"Unknown\",\r\n \"Male\",\r\n \"Female\",\r\n \"Turkish\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"MaritalStatus\": {\r\n \"enum\": [\r\n \"Other\",\r\n \"Married\",\r\n \"Unmarried\",\r\n \"Separated\",\r\n \"WidowOrWidower\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"NameModel\": {\r\n \"required\": [\r\n \"firstName\",\r\n \"surname\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"firstName\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"surname\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"patronymic\": {\r\n \"maxLength\": 50,\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PassportModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"issueDate\",\r\n \"issuer\",\r\n \"number\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"number\": {\r\n \"maxLength\": 20,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"issuer\": {\r\n \"maxLength\": 200,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"issueDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PastVisaModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"issueDate\",\r\n \"name\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"issueDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"name\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PastVisitModel\": {\r\n \"required\": [\r\n \"destinationCountry\",\r\n \"endDate\",\r\n \"startDate\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"startDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"destinationCountry\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PermissionToDestCountryModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"issuer\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"issuer\": {\r\n \"maxLength\": 200,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"PlaceOfWorkModel\": {\r\n \"required\": [\r\n \"address\",\r\n \"name\",\r\n \"phoneNum\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"maxLength\": 200,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"address\": {\r\n \"$ref\": \"#/components/schemas/AddressModel\"\r\n },\r\n \"phoneNum\": {\r\n \"maxLength\": 13,\r\n \"minLength\": 11,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"ProblemDetails\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"type\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"status\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\",\r\n \"nullable\": true\r\n },\r\n \"detail\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"instance\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n },\r\n \"additionalProperties\": {}\r\n },\r\n \"ReentryPermitModel\": {\r\n \"required\": [\r\n \"expirationDate\",\r\n \"number\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"number\": {\r\n \"maxLength\": 25,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"expirationDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RegisterApplicantRequest\": {\r\n \"required\": [\r\n \"applicantName\",\r\n \"birthDate\",\r\n \"citizenship\",\r\n \"citizenshipByBirth\",\r\n \"cityOfBirth\",\r\n \"countryOfBirth\",\r\n \"fatherName\",\r\n \"gender\",\r\n \"isNonResident\",\r\n \"jobTitle\",\r\n \"maritalStatus\",\r\n \"motherName\",\r\n \"passport\",\r\n \"placeOfWork\",\r\n \"registerRequest\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"registerRequest\": {\r\n \"$ref\": \"#/components/schemas/RegisterRequest\"\r\n },\r\n \"applicantName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"passport\": {\r\n \"$ref\": \"#/components/schemas/PassportModel\"\r\n },\r\n \"birthDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"cityOfBirth\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"countryOfBirth\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenship\": {\r\n \"maxLength\": 30,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"citizenshipByBirth\": {\r\n \"maxLength\": 30,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"gender\": {\r\n \"$ref\": \"#/components/schemas/Gender\"\r\n },\r\n \"maritalStatus\": {\r\n \"$ref\": \"#/components/schemas/MaritalStatus\"\r\n },\r\n \"fatherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"motherName\": {\r\n \"$ref\": \"#/components/schemas/NameModel\"\r\n },\r\n \"jobTitle\": {\r\n \"maxLength\": 50,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"placeOfWork\": {\r\n \"$ref\": \"#/components/schemas/PlaceOfWorkModel\"\r\n },\r\n \"isNonResident\": {\r\n \"type\": \"boolean\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RegisterRequest\": {\r\n \"required\": [\r\n \"authData\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"authData\": {\r\n \"$ref\": \"#/components/schemas/AuthData\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"RequestedNumberOfEntries\": {\r\n \"enum\": [\r\n \"Many\",\r\n \"One\",\r\n \"Two\"\r\n ],\r\n \"type\": \"string\"\r\n },\r\n \"UserModel\": {\r\n \"required\": [\r\n \"email\",\r\n \"id\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\",\r\n \"readOnly\": true\r\n },\r\n \"email\": {\r\n \"maxLength\": 254,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationCreateRequest\": {\r\n \"required\": [\r\n \"destinationCountry\",\r\n \"isForGroup\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestedNumberOfEntries\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"maxLength\": 70,\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"isForGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"validDaysRequested\": {\r\n \"maximum\": 90,\r\n \"minimum\": 0,\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationModelForApplicant\": {\r\n \"required\": [\r\n \"destinationCountry\",\r\n \"forGroup\",\r\n \"id\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestDate\",\r\n \"requestedNumberOfEntries\",\r\n \"status\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n },\r\n \"status\": {\r\n \"$ref\": \"#/components/schemas/ApplicationStatus\"\r\n },\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"forGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"requestDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"validDaysRequested\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaApplicationModelForAuthority\": {\r\n \"required\": [\r\n \"applicant\",\r\n \"destinationCountry\",\r\n \"forGroup\",\r\n \"id\",\r\n \"pastVisas\",\r\n \"pastVisits\",\r\n \"requestDate\",\r\n \"requestedNumberOfEntries\",\r\n \"status\",\r\n \"validDaysRequested\",\r\n \"visaCategory\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n },\r\n \"applicant\": {\r\n \"$ref\": \"#/components/schemas/ApplicantModel\"\r\n },\r\n \"status\": {\r\n \"$ref\": \"#/components/schemas/ApplicationStatus\"\r\n },\r\n \"reentryPermit\": {\r\n \"$ref\": \"#/components/schemas/ReentryPermitModel\"\r\n },\r\n \"destinationCountry\": {\r\n \"minLength\": 1,\r\n \"type\": \"string\"\r\n },\r\n \"pastVisas\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisaModel\"\r\n }\r\n },\r\n \"permissionToDestCountry\": {\r\n \"$ref\": \"#/components/schemas/PermissionToDestCountryModel\"\r\n },\r\n \"pastVisits\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PastVisitModel\"\r\n }\r\n },\r\n \"visaCategory\": {\r\n \"$ref\": \"#/components/schemas/VisaCategory\"\r\n },\r\n \"forGroup\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"requestedNumberOfEntries\": {\r\n \"$ref\": \"#/components/schemas/RequestedNumberOfEntries\"\r\n },\r\n \"requestDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"validDaysRequested\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n },\r\n \"additionalProperties\": false\r\n },\r\n \"VisaCategory\": {\r\n \"enum\": [\r\n \"Transit\",\r\n \"ShortDated\"\r\n ],\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"securitySchemes\": {\r\n \"Bearer\": {\r\n \"type\": \"http\",\r\n \"description\": \"Provide a JWT-token.\",\r\n \"scheme\": \"Bearer\",\r\n \"bearerFormat\": \"JWT\"\r\n }\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"Bearer\": []\r\n }\r\n ]\r\n}", "url": "https://localhost:44370/swagger/v1/swagger.json", "output": null, "newLineBehavior": "Auto"