Вытащил солюшен на уровень выше, чтобы прощё было дотнетить
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is failing
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	continuous-integration/drone/push Build is failing
				
			This commit is contained in:
		| @@ -0,0 +1,31 @@ | ||||
| using ApplicationLayer.Services.VisaApplications.Models; | ||||
| using ApplicationLayer.Services.VisaApplications.Requests; | ||||
|  | ||||
| namespace ApplicationLayer.Services.VisaApplications.Handlers; | ||||
|  | ||||
| public interface IVisaApplicationRequestsHandler | ||||
| { | ||||
|     /// Returns all applications for approving authorities | ||||
|     Task<List<VisaApplicationPreview>> GetPendingAsync(CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Returns all applications of one applicant | ||||
|     Task<List<VisaApplicationPreview>> GetForApplicantAsync(CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Returns one application with specific id | ||||
|     Task<VisaApplicationModel> GetApplicationForApplicantAsync(Guid id, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Returns one application with specific id | ||||
|     Task<VisaApplicationModel> GetApplicationForAuthorityAsync(Guid id, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Creates application for applicant with specific user identifier | ||||
|     Task HandleCreateRequestAsync(VisaApplicationCreateRequest request, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Sets application status to closed | ||||
|     Task HandleCloseRequestAsync(Guid applicationId, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Sets application status to approved or rejected | ||||
|     Task SetApplicationStatusFromAuthorityAsync(Guid applicationId, AuthorityRequestStatuses status, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Returns stream with file with formatted application data to download | ||||
|     Task<Stream> ApplicationToStreamAsync(Guid applicationId, CancellationToken cancellationToken); | ||||
| } | ||||
| @@ -0,0 +1,115 @@ | ||||
| using ApplicationLayer.InfrastructureServicesInterfaces; | ||||
| using ApplicationLayer.Services.Applicants.Models; | ||||
| using ApplicationLayer.Services.Applicants.NeededServices; | ||||
| using ApplicationLayer.Services.VisaApplications.Exceptions; | ||||
| using ApplicationLayer.Services.VisaApplications.Models; | ||||
| using ApplicationLayer.Services.VisaApplications.NeededServices; | ||||
| using ApplicationLayer.Services.VisaApplications.Requests; | ||||
| using AutoMapper; | ||||
| using Domains.VisaApplicationDomain; | ||||
|  | ||||
| namespace ApplicationLayer.Services.VisaApplications.Handlers; | ||||
|  | ||||
| /// Handles visa requests | ||||
| public class VisaApplicationRequestsHandler( | ||||
|     IVisaApplicationsRepository applications, | ||||
|     IApplicantsRepository applicants, | ||||
|     IUnitOfWork unitOfWork, | ||||
|     IMapper mapper, | ||||
|     IDateTimeProvider dateTimeProvider, | ||||
|     IUserIdProvider userIdProvider, | ||||
|     IEntityWriter entityWriter) : IVisaApplicationRequestsHandler | ||||
| { | ||||
|     async Task<List<VisaApplicationPreview>> IVisaApplicationRequestsHandler.GetPendingAsync(CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicationsList = await applications.GetPendingApplicationsAsync(cancellationToken); | ||||
|  | ||||
|         var applicationModels = mapper.Map<List<VisaApplicationPreview>>(applicationsList); | ||||
|         return applicationModels; | ||||
|     } | ||||
|  | ||||
|     async Task<List<VisaApplicationPreview>> IVisaApplicationRequestsHandler.GetForApplicantAsync(CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicantId = await applicants.GetApplicantIdByUserId(userIdProvider.GetUserId(), cancellationToken); | ||||
|         var visaApplications = await applications.GetOfApplicantAsync(applicantId, cancellationToken); | ||||
|         return mapper.Map<List<VisaApplicationPreview>>(visaApplications); | ||||
|     } | ||||
|  | ||||
|     /// <inheritdoc cref="IVisaApplicationRequestsHandler.GetApplicationForApplicantAsync"/> | ||||
|     public async Task<VisaApplicationModel> GetApplicationForApplicantAsync(Guid id, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicant = await applicants.FindByUserIdAsync(userIdProvider.GetUserId(), cancellationToken); | ||||
|         var application = await applications.GetByApplicantAndApplicationIdAsync(applicant.Id, id, cancellationToken); | ||||
|         var mapped = mapper.Map<VisaApplicationModel>(application); | ||||
|         mapped.Applicant = mapper.Map<ApplicantModel>(applicant); | ||||
|         return mapped; | ||||
|     } | ||||
|  | ||||
|     async Task<VisaApplicationModel> IVisaApplicationRequestsHandler.GetApplicationForAuthorityAsync(Guid id, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var pending = await applications.GetPendingApplicationsAsync(cancellationToken); | ||||
|         var application = pending.SingleOrDefault(a => a.Id == id) ?? throw new ApplicationAlreadyProcessedException(); | ||||
|         var mapped = mapper.Map<VisaApplicationModel>(application); | ||||
|         var applicant = await applicants.GetByIdAsync(application.ApplicantId, cancellationToken); | ||||
|         mapped.Applicant = mapper.Map<ApplicantModel>(applicant); | ||||
|         return mapped; | ||||
|     } | ||||
|  | ||||
|     async Task IVisaApplicationRequestsHandler.HandleCreateRequestAsync(VisaApplicationCreateRequest request, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicant = await applicants.FindByUserIdAsync(userIdProvider.GetUserId(), cancellationToken); | ||||
|  | ||||
|         var visaApplication = mapper.Map<VisaApplication>(request); | ||||
|         visaApplication.RequestDate = dateTimeProvider.Now(); | ||||
|         visaApplication.ApplicantId = applicant.Id; | ||||
|  | ||||
|         await applications.AddAsync(visaApplication, cancellationToken); | ||||
|  | ||||
|         await unitOfWork.SaveAsync(cancellationToken); | ||||
|     } | ||||
|  | ||||
|     async Task IVisaApplicationRequestsHandler.HandleCloseRequestAsync(Guid applicationId, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicantId = await applicants.GetApplicantIdByUserId(userIdProvider.GetUserId(), cancellationToken); | ||||
|         var application = await applications.GetByApplicantAndApplicationIdAsync(applicantId, applicationId, cancellationToken); | ||||
|         if (application.Status is ApplicationStatus.Approved or ApplicationStatus.Rejected) | ||||
|         { | ||||
|             throw new ApplicationAlreadyProcessedException(); | ||||
|         } | ||||
|  | ||||
|         application.Status = ApplicationStatus.Closed; | ||||
|         await applications.UpdateAsync(application, cancellationToken); | ||||
|  | ||||
|         await unitOfWork.SaveAsync(cancellationToken); | ||||
|     } | ||||
|  | ||||
|     async Task IVisaApplicationRequestsHandler.SetApplicationStatusFromAuthorityAsync( | ||||
|         Guid applicationId, | ||||
|         AuthorityRequestStatuses status, | ||||
|         CancellationToken cancellationToken) | ||||
|     { | ||||
|         var application = await applications.GetByIdAsync(applicationId, cancellationToken); | ||||
|         if (application.Status != ApplicationStatus.Pending) | ||||
|         { | ||||
|             throw new ApplicationAlreadyProcessedException(); | ||||
|         } | ||||
|  | ||||
|         var statusToSet = status switch | ||||
|         { | ||||
|             AuthorityRequestStatuses.Approved => ApplicationStatus.Approved, | ||||
|             AuthorityRequestStatuses.Rejected => ApplicationStatus.Rejected, | ||||
|             _ => throw new ArgumentOutOfRangeException(nameof(status), status, null) | ||||
|         }; | ||||
|  | ||||
|         application.Status = statusToSet; | ||||
|         await applications.UpdateAsync(application, cancellationToken); | ||||
|  | ||||
|         await unitOfWork.SaveAsync(cancellationToken); | ||||
|     } | ||||
|  | ||||
|     async Task<Stream> IVisaApplicationRequestsHandler.ApplicationToStreamAsync(Guid applicationId, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var application = await GetApplicationForApplicantAsync(applicationId, cancellationToken); | ||||
|         return await entityWriter.WriteEntityToStream(application, cancellationToken); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user