Added authentication and authorization, updated dependency injections, removed hard-coded connection string

This commit is contained in:
2024-08-17 16:28:35 +03:00
parent 026a104131
commit 7cbe3d9698
44 changed files with 419 additions and 49 deletions

View File

@@ -0,0 +1,7 @@
using ApplicationLayer.GeneralNeededServices;
using Domains.ApplicantDomain;
namespace ApplicationLayer.DataAccessingServices.Applicants.NeededServices;
/// Repository pattern for <see cref="Applicant"/>
public interface IApplicantsRepository : IGenericRepository<Applicant>;

View File

@@ -0,0 +1,6 @@
using ApplicationLayer.GeneralNeededServices;
using Domains.LocationDomain;
namespace ApplicationLayer.DataAccessingServices.Locations.NeededServices;
public interface ICitiesRepository : IGenericRepository<City>;

View File

@@ -0,0 +1,6 @@
using ApplicationLayer.GeneralNeededServices;
using Domains.LocationDomain;
namespace ApplicationLayer.DataAccessingServices.Locations.NeededServices;
public interface ICountriesRepository : IGenericRepository<Country>;

View File

@@ -0,0 +1,11 @@
using ApplicationLayer.DataAccessingServices.VisaApplications.Requests;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Handlers;
public interface IVisaApplicationsRequestHandler
{
Task<List<VisaApplication>> Get(CancellationToken cancellationToken);
void HandleCreateRequest(VisaApplicationCreateRequest request, CancellationToken cancellationToken);
}

View File

@@ -0,0 +1,79 @@
using ApplicationLayer.DataAccessingServices.Locations.NeededServices;
using ApplicationLayer.DataAccessingServices.VisaApplications.Models;
using ApplicationLayer.DataAccessingServices.VisaApplications.NeededServices;
using ApplicationLayer.DataAccessingServices.VisaApplications.Requests;
using Domains.ApplicantDomain;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Handlers;
/// Handles visa requests
public class VisaApplicationRequestsHandler(
IVisaApplicationsRepository applications,
ICitiesRepository cities,
ICountriesRepository countries) : IVisaApplicationsRequestHandler
{
public async Task<List<VisaApplication>> Get(CancellationToken cancellationToken) => await applications.GetAllAsync(cancellationToken);
public async void HandleCreateRequest(VisaApplicationCreateRequest request, CancellationToken cancellationToken)
{
//TODO mapper
var cityOfBirth = await cities.GetByIdAsync(request.BirthCityId, cancellationToken);
var cityOfWork = await cities.GetByIdAsync(request.PlaceOfWork.Address.CityId, cancellationToken);
var addressOfWork = new Address
{
City = cityOfWork,
Country = cityOfWork.Country,
Building = request.PlaceOfWork.Address.Building,
Street = request.PlaceOfWork.Address.Street
};
var applicant = new Applicant
{
MaritalStatus = request.MaritalStatus,
Name = request.FullName,
Passport = request.Passport,
Gender = request.Gender,
Citizenship = request.CitizenShip,
BirthDate = request.BirthDate,
FatherName = request.FatherName,
JobTitle = request.JobTitle,
MotherName = request.MotherName,
CitizenshipByBirth = request.CitizenshipByBirth,
CityOfBirth = cityOfBirth,
CountryOfBirth = cityOfBirth.Country,
IsNonResident = request.IsNonResident,
PlaceOfWork = new PlaceOfWork { Address = addressOfWork, Name = request.PlaceOfWork.Name, PhoneNum = request.PlaceOfWork.PhoneNum }
};
var pastVisits = request.PastVisits.Select(m => ConvertPastVisitModelToPastVisit(m, cancellationToken).Result).ToList();
var visaApplication = new VisaApplication
{
Applicant = applicant,
RequestedNumberOfEntries = request.RequestedNumberOfEntries,
ValidDaysRequested = request.ValidDaysRequested,
ReentryPermit = request.ReentryPermit,
VisaCategory = request.VisaCategory,
PermissionToDestCountry = request.PermissionToDestCountry,
DestinationCountry = await countries.GetByIdAsync(request.DestinationCountryId, cancellationToken),
PastVisas = request.PastVisas.ToList(),
PastVisits = pastVisits,
ForGroup = request.IsForGroup,
RequestDate = DateTime.Today
};
await applications.AddAsync(visaApplication, cancellationToken);
await applications.SaveAsync(cancellationToken);
}
private async Task<PastVisit> ConvertPastVisitModelToPastVisit(PastVisitModel model, CancellationToken cancellationToken)
{
return new PastVisit
{
DestinationCountry = await countries.GetByIdAsync(model.DestinationCountryId, cancellationToken),
StartDate = model.StartDate,
EndDate = model.EndDate
};
}
}

View File

@@ -0,0 +1,13 @@
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Models;
public class AddressModel
{
/// City part of address
public Guid CityId { get; set; }
/// Street part of address
public string Street { get; set; } = null!;
/// Building part of address
public string Building { get; set; } = null!;
}

View File

@@ -0,0 +1,14 @@
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Models
{
public class PastVisitModel
{
/// First day of <see cref="PastVisitModel"/>
public DateTime StartDate { get; set; }
/// Last day of <see cref="PastVisitModel"/>
public DateTime EndDate { get; set; }
/// Identifier of destination country of <see cref="PastVisitModel"/>
public Guid DestinationCountryId { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Models;
public class PlaceOfWorkModel
{
/// Name of hirer
public string Name { get; set; } = null!;
/// <see cref="AddressModel"/> of hirer
public AddressModel Address { get; set; } = null!;
/// Phone number of hirer
public string PhoneNum { get; set; } = null!;
}

View File

@@ -0,0 +1,6 @@
using ApplicationLayer.GeneralNeededServices;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.DataAccessingServices.VisaApplications.NeededServices;
public interface IVisaApplicationsRepository : IGenericRepository<VisaApplication>;

View File

@@ -0,0 +1,31 @@
using ApplicationLayer.DataAccessingServices.VisaApplications.Models;
using Domains.ApplicantDomain;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.DataAccessingServices.VisaApplications.Requests;
/// Model of visa request from user
public record VisaApplicationCreateRequest(
Name FullName,
Passport Passport,
DateTime BirthDate,
Guid BirthCityId,
string CitizenShip,
string CitizenshipByBirth,
Gender Gender,
MaritalStatus MaritalStatus,
Name FatherName,
Name MotherName,
bool IsNonResident,
ReentryPermit ReentryPermit,
string JobTitle,
PlaceOfWorkModel PlaceOfWork,
Guid DestinationCountryId,
VisaCategory VisaCategory,
bool IsForGroup,
RequestedNumberOfEntries RequestedNumberOfEntries,
int ValidDaysRequested,
PastVisa[] PastVisas,
PermissionToDestCountry? PermissionToDestCountry,
PastVisitModel[] PastVisits
);