diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/AddressModel.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/AddressModel.cs
deleted file mode 100644
index e5ccb5e..0000000
--- a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/AddressModel.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace ApplicationLayer.Services.Applicants.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!;
-}
diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/ApplicantModel.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/ApplicantModel.cs
new file mode 100644
index 0000000..1898c3a
--- /dev/null
+++ b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/ApplicantModel.cs
@@ -0,0 +1,50 @@
+using Domains.ApplicantDomain;
+
+namespace ApplicationLayer.Services.Applicants.Models
+{
+ /// Model of
+ public class ApplicantModel
+ {
+ ///
+ public Name Name { get; set; } = null!;
+
+ ///
+ public Passport Passport { get; set; } = null!;
+
+ ///
+ public DateTime BirthDate { get; set; }
+
+ ///
+ public string CountryOfBirth { get; set; } = null!;
+
+ ///
+ public string CityOfBirth { get; set; } = null!;
+
+ ///
+ public string Citizenship { get; set; } = null!;
+
+ ///
+ public string CitizenshipByBirth { get; set; } = null!;
+
+ ///
+ public Gender Gender { get; set; }
+
+ ///
+ public MaritalStatus MaritalStatus { get; set; }
+
+ ///
+ public Name FatherName { get; set; } = null!;
+
+ ///
+ public Name MotherName { get; set; } = null!;
+
+ ///
+ public string JobTitle { get; set; } = null!;
+
+ ///
+ public PlaceOfWork PlaceOfWork { get; set; } = null!;
+
+ ///
+ public bool IsNonResident { get; set; }
+ }
+}
diff --git a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/PlaceOfWorkModel.cs b/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/PlaceOfWorkModel.cs
deleted file mode 100644
index f08f220..0000000
--- a/SchengenVisaApi/ApplicationLayer/Services/Applicants/Models/PlaceOfWorkModel.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace ApplicationLayer.Services.Applicants.Models;
-
-public class PlaceOfWorkModel
-{
- /// Name of hirer
- public string Name { get; set; } = null!;
-
- /// of hirer
- public AddressModel Address { get; set; } = null!;
-
- /// Phone number of hirer
- public string PhoneNum { get; set; } = null!;
-}
diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/IVisaApplicationRequestsHandler.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/IVisaApplicationRequestsHandler.cs
index 616591c..e92e7d6 100644
--- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/IVisaApplicationRequestsHandler.cs
+++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/IVisaApplicationRequestsHandler.cs
@@ -6,8 +6,12 @@ namespace ApplicationLayer.Services.VisaApplications.Handlers;
public interface IVisaApplicationRequestsHandler
{
- Task> Get(CancellationToken cancellationToken);
- Task> GetForApplicant(Guid userId, CancellationToken cancellationToken);
+ /// Returns all applications for approving authorities
+ Task> GetAllAsync(CancellationToken cancellationToken);
+ /// Returns all applications of one applicant
+ Task> GetForApplicantAsync(Guid userId, CancellationToken cancellationToken);
+
+ /// Creates application for applicant with specific user identifier
Task HandleCreateRequest(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken);
}
diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/VisaApplicationRequestsHandler.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/VisaApplicationRequestsHandler.cs
index 5638207..6997425 100644
--- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/VisaApplicationRequestsHandler.cs
+++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Handlers/VisaApplicationRequestsHandler.cs
@@ -1,8 +1,10 @@
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.ApplicantDomain;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.Services.VisaApplications.Handlers;
@@ -13,9 +15,57 @@ public class VisaApplicationRequestsHandler(
IApplicantsRepository applicants,
IUnitOfWork unitOfWork) : IVisaApplicationRequestsHandler
{
- public async Task> Get(CancellationToken cancellationToken) => await applications.GetAllAsync(cancellationToken);
+ async Task> IVisaApplicationRequestsHandler.GetAllAsync(CancellationToken cancellationToken)
+ {
+ var applicationsList = await applications.GetAllAsync(cancellationToken);
- public async Task> GetForApplicant(Guid userId, CancellationToken cancellationToken)
+ //todo mapper
+ var applicationModels = applicationsList
+ .Select(a => MapVisaApplicationToModelForAuthorities(a, cancellationToken).Result)
+ .ToList();
+ return applicationModels;
+ }
+
+ private async Task 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> GetForApplicantAsync(Guid userId, CancellationToken cancellationToken)
{
//todo mapper
var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken);
@@ -31,8 +81,11 @@ public class VisaApplicationRequestsHandler(
ForGroup = va.ForGroup,
PastVisas = va.PastVisas,
RequestDate = va.RequestDate,
- PastVisits = va.PastVisits
- }).ToList();
+ PastVisits = va.PastVisits,
+ Id = va.Id,
+ Status = va.Status
+ })
+ .ToList();
}
public async Task HandleCreateRequest(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken)
@@ -53,7 +106,8 @@ public class VisaApplicationRequestsHandler(
PastVisas = request.PastVisas.ToList(),
PastVisits = request.PastVisits.ToList(),
ForGroup = request.IsForGroup,
- RequestDate = DateTime.Today
+ RequestDate = DateTime.Today,
+ Status = ApplicationStatus.Pending
};
await applications.AddAsync(visaApplication, cancellationToken);
diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForApplicant.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForApplicant.cs
index 910b15f..c9b53b9 100644
--- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForApplicant.cs
+++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForApplicant.cs
@@ -5,6 +5,11 @@ namespace ApplicationLayer.Services.VisaApplications.Models
/// Model of
public class VisaApplicationModelForApplicant
{
+ ///
+ public Guid Id { get; set; }
+
+ ///
+ public ApplicationStatus Status { get; set; }
///
public ReentryPermit? ReentryPermit { get; set; }
diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForAuthority.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForAuthority.cs
new file mode 100644
index 0000000..6cfed9e
--- /dev/null
+++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Models/VisaApplicationModelForAuthority.cs
@@ -0,0 +1,47 @@
+using ApplicationLayer.Services.Applicants.Models;
+using Domains.VisaApplicationDomain;
+
+namespace ApplicationLayer.Services.VisaApplications.Models
+{
+ /// Model of with applicant property
+ public class VisaApplicationModelForAuthority
+ {
+ ///
+ public Guid Id { get; set; }
+
+ /// Applicant of application
+ public ApplicantModel Applicant { get; set; } = null!;
+
+ ///
+ public ApplicationStatus Status { get; set; }
+
+ ///
+ public ReentryPermit? ReentryPermit { get; set; }
+
+ ///
+ public string DestinationCountry { get; set; } = null!;
+
+ ///
+ public List PastVisas { get; set; } = null!;
+
+ ///
+ public PermissionToDestCountry? PermissionToDestCountry { get; set; }
+
+ public List PastVisits { get; set; } = null!;
+
+ ///
+ public VisaCategory VisaCategory { get; set; }
+
+ ///
+ public bool ForGroup { get; set; }
+
+ ///
+ public RequestedNumberOfEntries RequestedNumberOfEntries { get; set; }
+
+ ///
+ public DateTime RequestDate { get; set; }
+
+ ///
+ public int ValidDaysRequested { get; set; }
+ }
+}
diff --git a/SchengenVisaApi/Domains/VisaApplicationDomain/ApplicationStatus.cs b/SchengenVisaApi/Domains/VisaApplicationDomain/ApplicationStatus.cs
new file mode 100644
index 0000000..a3978a2
--- /dev/null
+++ b/SchengenVisaApi/Domains/VisaApplicationDomain/ApplicationStatus.cs
@@ -0,0 +1,12 @@
+namespace Domains.VisaApplicationDomain
+{
+ public enum ApplicationStatus
+ {
+ /// Waits for approve
+ Pending,
+ Approved,
+ Rejected,
+ /// Closed by applicant
+ Closed
+ }
+}
diff --git a/SchengenVisaApi/Domains/VisaApplicationDomain/VisaApplication.cs b/SchengenVisaApi/Domains/VisaApplicationDomain/VisaApplication.cs
index 3fbde18..4759c09 100644
--- a/SchengenVisaApi/Domains/VisaApplicationDomain/VisaApplication.cs
+++ b/SchengenVisaApi/Domains/VisaApplicationDomain/VisaApplication.cs
@@ -11,6 +11,9 @@ public class VisaApplication : IEntity
/// Identifier of the
public Guid ApplicantId { get; set; }
+ /// Status of application
+ public ApplicationStatus Status { get; set; }
+
///
/// always null if is not a non-resident
public ReentryPermit? ReentryPermit { get; set; }
@@ -18,9 +21,7 @@ public class VisaApplication : IEntity
/// Country that wants to visit
public string DestinationCountry { get; set; } = null!;
- ///
/// List of that applicant had before
- ///
public List PastVisas { get; set; } = null!;
/// Permission to enter the destination country of
diff --git a/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs b/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs
index 9aa3837..03f2a0e 100644
--- a/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs
+++ b/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs
@@ -1,4 +1,3 @@
-using System.Security.Claims;
using ApplicationLayer.Services.VisaApplications.Handlers;
using ApplicationLayer.Services.VisaApplications.Models;
using ApplicationLayer.Services.VisaApplications.Requests;
@@ -14,18 +13,17 @@ namespace SchengenVisaApi.Controllers;
[Route("visaApplication")]
public class VisaApplicationController(IVisaApplicationRequestsHandler visaApplicationRequestsHandler) : VisaApiControllerBase
{
- //todo should return only pending applications
//todo should return model
/// Returns all applications from DB
/// Accessible only for approving authorities
[HttpGet]
- [ProducesResponseType>(StatusCodes.Status200OK)]
+ [ProducesResponseType>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Authorize(policy: PolicyConstants.ApprovingAuthorityPolicy)]
public async Task Get(CancellationToken cancellationToken)
{
- var result = await visaApplicationRequestsHandler.Get(cancellationToken);
+ var result = await visaApplicationRequestsHandler.GetAllAsync(cancellationToken);
return Ok(result);
}
@@ -41,7 +39,7 @@ public class VisaApplicationController(IVisaApplicationRequestsHandler visaAppli
public async Task GetForApplicant(CancellationToken cancellationToken)
{
var userId = GetUserId();
- var result = await visaApplicationRequestsHandler.GetForApplicant(userId, cancellationToken);
+ var result = await visaApplicationRequestsHandler.GetForApplicantAsync(userId, cancellationToken);
return Ok(result);
}