128 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using ApplicationLayer.InfrastructureServicesInterfaces;
 | |
| using ApplicationLayer.Services.Applicants.Models;
 | |
| using ApplicationLayer.Services.Applicants.NeededServices;
 | |
| using ApplicationLayer.Services.VisaApplications.Models;
 | |
| using ApplicationLayer.Services.VisaApplications.NeededServices;
 | |
| using ApplicationLayer.Services.VisaApplications.Requests;
 | |
| using Domains.VisaApplicationDomain;
 | |
| 
 | |
| namespace ApplicationLayer.Services.VisaApplications.Handlers;
 | |
| 
 | |
| /// Handles visa requests
 | |
| public class VisaApplicationRequestsHandler(
 | |
|     IVisaApplicationsRepository applications,
 | |
|     IApplicantsRepository applicants,
 | |
|     IUnitOfWork unitOfWork) : IVisaApplicationRequestsHandler
 | |
| {
 | |
|     async Task<List<VisaApplicationModelForAuthority>> IVisaApplicationRequestsHandler.GetAllAsync(CancellationToken cancellationToken)
 | |
|     {
 | |
|         var applicationsList = await applications.GetAllAsync(cancellationToken);
 | |
| 
 | |
|         //todo mapper
 | |
|         var applicationModels = applicationsList
 | |
|             .Select(a => MapVisaApplicationToModelForAuthorities(a, cancellationToken).Result)
 | |
|             .ToList();
 | |
|         return applicationModels;
 | |
|     }
 | |
| 
 | |
|     private async Task<VisaApplicationModelForAuthority> MapVisaApplicationToModelForAuthorities(VisaApplication visaApplication,
 | |
|         CancellationToken cancellationToken)
 | |
|     {
 | |
|         var applicant = await applicants.GetByIdAsync(visaApplication.ApplicantId, cancellationToken);
 | |
|         var applicantModel = new ApplicantModel
 | |
|         {
 | |
|             Citizenship = applicant.Citizenship,
 | |
|             Gender = applicant.Gender,
 | |
|             Name = applicant.Name,
 | |
|             Passport = applicant.Passport,
 | |
|             BirthDate = applicant.BirthDate,
 | |
|             FatherName = applicant.FatherName,
 | |
|             JobTitle = applicant.JobTitle,
 | |
|             MaritalStatus = applicant.MaritalStatus,
 | |
|             MotherName = applicant.MotherName,
 | |
|             CitizenshipByBirth = applicant.CitizenshipByBirth,
 | |
|             CityOfBirth = applicant.CityOfBirth,
 | |
|             CountryOfBirth = applicant.CountryOfBirth,
 | |
|             IsNonResident = applicant.IsNonResident,
 | |
|             PlaceOfWork = applicant.PlaceOfWork,
 | |
|         };
 | |
|         return new VisaApplicationModelForAuthority
 | |
|         {
 | |
|             PastVisits = visaApplication.PastVisits,
 | |
|             ReentryPermit = visaApplication.ReentryPermit,
 | |
|             VisaCategory = visaApplication.VisaCategory,
 | |
|             PermissionToDestCountry = visaApplication.PermissionToDestCountry,
 | |
|             DestinationCountry = visaApplication.DestinationCountry,
 | |
|             PastVisas = visaApplication.PastVisas,
 | |
|             RequestDate = visaApplication.RequestDate,
 | |
|             ValidDaysRequested = visaApplication.ValidDaysRequested,
 | |
|             RequestedNumberOfEntries = visaApplication.RequestedNumberOfEntries,
 | |
|             ForGroup = visaApplication.ForGroup,
 | |
|             Applicant = applicantModel,
 | |
|             Id = visaApplication.Id,
 | |
|             Status = visaApplication.Status
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public async Task<List<VisaApplicationModelForApplicant>> GetForApplicantAsync(Guid userId, CancellationToken cancellationToken)
 | |
|     {
 | |
|         //todo mapper
 | |
|         var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken);
 | |
|         var visaApplications = await applications.GetOfApplicantAsync(applicantId, cancellationToken);
 | |
|         return visaApplications.Select(va => new VisaApplicationModelForApplicant
 | |
|             {
 | |
|                 DestinationCountry = va.DestinationCountry,
 | |
|                 ValidDaysRequested = va.ValidDaysRequested,
 | |
|                 ReentryPermit = va.ReentryPermit,
 | |
|                 VisaCategory = va.VisaCategory,
 | |
|                 RequestedNumberOfEntries = va.RequestedNumberOfEntries,
 | |
|                 PermissionToDestCountry = va.PermissionToDestCountry,
 | |
|                 ForGroup = va.ForGroup,
 | |
|                 PastVisas = va.PastVisas,
 | |
|                 RequestDate = va.RequestDate,
 | |
|                 PastVisits = va.PastVisits,
 | |
|                 Id = va.Id,
 | |
|                 Status = va.Status
 | |
|             })
 | |
|             .ToList();
 | |
|     }
 | |
| 
 | |
|     public async Task HandleCreateRequest(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken)
 | |
|     {
 | |
|         //TODO mapper
 | |
| 
 | |
|         var applicant = await applicants.FindByUserIdAsync(userId, cancellationToken);
 | |
| 
 | |
|         var visaApplication = new VisaApplication
 | |
|         {
 | |
|             ApplicantId = applicant.Id,
 | |
|             RequestedNumberOfEntries = request.RequestedNumberOfEntries,
 | |
|             ValidDaysRequested = request.ValidDaysRequested,
 | |
|             ReentryPermit = request.ReentryPermit,
 | |
|             VisaCategory = request.VisaCategory,
 | |
|             PermissionToDestCountry = request.PermissionToDestCountry,
 | |
|             DestinationCountry = request.DestinationCountry,
 | |
|             PastVisas = request.PastVisas.ToList(),
 | |
|             PastVisits = request.PastVisits.ToList(),
 | |
|             ForGroup = request.IsForGroup,
 | |
|             RequestDate = DateTime.Today,
 | |
|             Status = ApplicationStatus.Pending
 | |
|         };
 | |
| 
 | |
|         await applications.AddAsync(visaApplication, cancellationToken);
 | |
| 
 | |
|         await unitOfWork.SaveAsync(cancellationToken);
 | |
|     }
 | |
| 
 | |
|     async Task IVisaApplicationRequestsHandler.HandleCloseRequest(Guid userId, Guid applicationId, CancellationToken cancellationToken)
 | |
|     {
 | |
|         var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken);
 | |
|         var application = await applications.GetByApplicantAndApplicationIdAsync(applicantId, applicationId, cancellationToken);
 | |
| 
 | |
|         application.Status = ApplicationStatus.Closed;
 | |
|         await applications.UpdateAsync(application, cancellationToken);
 | |
| 
 | |
|         await unitOfWork.SaveAsync(cancellationToken);
 | |
|     }
 | |
| }
 |