action for process applications for authorities

This commit is contained in:
2024-08-22 21:48:01 +03:00
parent 300d8afd93
commit 78b4ca4f84
7 changed files with 75 additions and 11 deletions

View File

@@ -0,0 +1,6 @@
using ApplicationLayer.GeneralExceptions;
namespace ApplicationLayer.Services.VisaApplications.Exceptions
{
public class ApplicationAlreadyProcessedException() : ApiException("This application already processed or closed by applicant.");
}

View File

@@ -12,8 +12,10 @@ public interface IVisaApplicationRequestsHandler
Task<List<VisaApplicationModelForApplicant>> GetForApplicantAsync(Guid userId, CancellationToken cancellationToken);
/// Creates application for applicant with specific user identifier
Task HandleCreateRequest(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken);
Task HandleCreateRequestAsync(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken);
/// Sets application status to closed
Task HandleCloseRequest(Guid userId, Guid applicationId, CancellationToken cancellationToken);
Task HandleCloseRequestAsync(Guid userId, Guid applicationId, CancellationToken cancellationToken);
Task SetApplicationStatusFromAuthorityAsync(Guid applicationId, AuthorityRequestStatuses status, CancellationToken cancellationToken);
}

View File

@@ -1,6 +1,7 @@
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;
@@ -87,7 +88,7 @@ public class VisaApplicationRequestsHandler(
.ToList();
}
public async Task HandleCreateRequest(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken)
public async Task HandleCreateRequestAsync(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken)
{
//TODO mapper
@@ -114,7 +115,7 @@ public class VisaApplicationRequestsHandler(
await unitOfWork.SaveAsync(cancellationToken);
}
async Task IVisaApplicationRequestsHandler.HandleCloseRequest(Guid userId, Guid applicationId, CancellationToken cancellationToken)
async Task IVisaApplicationRequestsHandler.HandleCloseRequestAsync(Guid userId, Guid applicationId, CancellationToken cancellationToken)
{
var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken);
var application = await applications.GetByApplicantAndApplicationIdAsync(applicantId, applicationId, cancellationToken);
@@ -124,4 +125,30 @@ public class VisaApplicationRequestsHandler(
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)
{
//todo refactor exceptions
throw new ApplicationAlreadyProcessedException();
}
//todo mapper
ApplicationStatus 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);
}
}

View File

@@ -0,0 +1,8 @@
namespace ApplicationLayer.Services.VisaApplications.Models
{
public enum AuthorityRequestStatuses
{
Approved,
Rejected
}
}