Added mapper

This commit is contained in:
2024-08-23 20:09:41 +03:00
parent e857cca2cf
commit c92855e7ce
9 changed files with 93 additions and 79 deletions

View File

@@ -6,7 +6,7 @@ namespace ApplicationLayer.Services.AuthServices.RegisterService
public interface IRegisterService public interface IRegisterService
{ {
/// Handle <see cref="RegisterApplicantRequest"/> /// Handle <see cref="RegisterApplicantRequest"/>
Task Register(RegisterApplicantRequest request, CancellationToken cancellationToken); Task RegisterApplicant(RegisterApplicantRequest request, CancellationToken cancellationToken);
/// Handles <see cref="RegisterRequest"/> and adds approving authority account /// Handles <see cref="RegisterRequest"/> and adds approving authority account
Task RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken); Task RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken);

View File

@@ -3,6 +3,7 @@ using ApplicationLayer.Services.Applicants.NeededServices;
using ApplicationLayer.Services.AuthServices.NeededServices; using ApplicationLayer.Services.AuthServices.NeededServices;
using ApplicationLayer.Services.AuthServices.RegisterService.Exceptions; using ApplicationLayer.Services.AuthServices.RegisterService.Exceptions;
using ApplicationLayer.Services.AuthServices.Requests; using ApplicationLayer.Services.AuthServices.Requests;
using AutoMapper;
using Domains.ApplicantDomain; using Domains.ApplicantDomain;
using Domains.Users; using Domains.Users;
@@ -12,9 +13,10 @@ namespace ApplicationLayer.Services.AuthServices.RegisterService
public class RegisterService( public class RegisterService(
IUsersRepository users, IUsersRepository users,
IApplicantsRepository applicants, IApplicantsRepository applicants,
IUnitOfWork unitOfWork) : IRegisterService IUnitOfWork unitOfWork,
IMapper mapper) : IRegisterService
{ {
async Task IRegisterService.Register(RegisterApplicantRequest request, CancellationToken cancellationToken) async Task IRegisterService.RegisterApplicant(RegisterApplicantRequest request, CancellationToken cancellationToken)
{ {
//todo move to validation layer //todo move to validation layer
if (await users.FindByEmailAsync(request.Email, cancellationToken) is not null) if (await users.FindByEmailAsync(request.Email, cancellationToken) is not null)
@@ -22,8 +24,8 @@ namespace ApplicationLayer.Services.AuthServices.RegisterService
throw new UserAlreadyExistsException(request); throw new UserAlreadyExistsException(request);
} }
//TODO mapper var user = mapper.Map<User>(request);
var user = new User { Email = request.Email, Password = request.Password, Role = Role.Applicant }; user.Role = Role.Applicant;
var applicant = new Applicant var applicant = new Applicant
{ {
@@ -58,8 +60,8 @@ namespace ApplicationLayer.Services.AuthServices.RegisterService
throw new UserAlreadyExistsException(request); throw new UserAlreadyExistsException(request);
} }
//TODO mapper var user = mapper.Map<User>(request);
var user = new User { Email = request.Email, Password = request.Password, Role = Role.ApprovingAuthority }; user.Role = Role.ApprovingAuthority;
await users.AddAsync(user, cancellationToken); await users.AddAsync(user, cancellationToken);

View File

@@ -5,6 +5,7 @@ using ApplicationLayer.Services.VisaApplications.Exceptions;
using ApplicationLayer.Services.VisaApplications.Models; using ApplicationLayer.Services.VisaApplications.Models;
using ApplicationLayer.Services.VisaApplications.NeededServices; using ApplicationLayer.Services.VisaApplications.NeededServices;
using ApplicationLayer.Services.VisaApplications.Requests; using ApplicationLayer.Services.VisaApplications.Requests;
using AutoMapper;
using Domains.VisaApplicationDomain; using Domains.VisaApplicationDomain;
namespace ApplicationLayer.Services.VisaApplications.Handlers; namespace ApplicationLayer.Services.VisaApplications.Handlers;
@@ -13,13 +14,14 @@ namespace ApplicationLayer.Services.VisaApplications.Handlers;
public class VisaApplicationRequestsHandler( public class VisaApplicationRequestsHandler(
IVisaApplicationsRepository applications, IVisaApplicationsRepository applications,
IApplicantsRepository applicants, IApplicantsRepository applicants,
IUnitOfWork unitOfWork) : IVisaApplicationRequestsHandler IUnitOfWork unitOfWork,
IMapper mapper,
IDateTimeProvider dateTimeProvider) : IVisaApplicationRequestsHandler
{ {
async Task<List<VisaApplicationModelForAuthority>> IVisaApplicationRequestsHandler.GetAllAsync(CancellationToken cancellationToken) async Task<List<VisaApplicationModelForAuthority>> IVisaApplicationRequestsHandler.GetAllAsync(CancellationToken cancellationToken)
{ {
var applicationsList = await applications.GetAllAsync(cancellationToken); var applicationsList = await applications.GetAllAsync(cancellationToken);
//todo mapper
var applicationModels = applicationsList var applicationModels = applicationsList
.Select(a => MapVisaApplicationToModelForAuthorities(a, cancellationToken).Result) .Select(a => MapVisaApplicationToModelForAuthorities(a, cancellationToken).Result)
.ToList(); .ToList();
@@ -30,85 +32,28 @@ public class VisaApplicationRequestsHandler(
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var applicant = await applicants.GetByIdAsync(visaApplication.ApplicantId, cancellationToken); var applicant = await applicants.GetByIdAsync(visaApplication.ApplicantId, cancellationToken);
var applicantModel = new ApplicantModel var applicantModel = mapper.Map<ApplicantModel>(applicant);
{
Citizenship = applicant.Citizenship, var model = mapper.Map<VisaApplicationModelForAuthority>(visaApplication);
Gender = applicant.Gender, model.Applicant = applicantModel;
Name = applicant.Name,
Passport = applicant.Passport, return model;
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) public async Task<List<VisaApplicationModelForApplicant>> GetForApplicantAsync(Guid userId, CancellationToken cancellationToken)
{ {
//todo mapper
var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken); var applicantId = await applicants.GetApplicantIdByUserId(userId, cancellationToken);
var visaApplications = await applications.GetOfApplicantAsync(applicantId, cancellationToken); var visaApplications = await applications.GetOfApplicantAsync(applicantId, cancellationToken);
return visaApplications.Select(va => new VisaApplicationModelForApplicant return mapper.Map<List<VisaApplicationModelForApplicant>>(visaApplications);
{
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 HandleCreateRequestAsync(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken) public async Task HandleCreateRequestAsync(Guid userId, VisaApplicationCreateRequest request, CancellationToken cancellationToken)
{ {
//TODO mapper
var applicant = await applicants.FindByUserIdAsync(userId, cancellationToken); var applicant = await applicants.FindByUserIdAsync(userId, cancellationToken);
var visaApplication = new VisaApplication var visaApplication = mapper.Map<VisaApplication>(request);
{ visaApplication.RequestDate = dateTimeProvider.Now();
ApplicantId = applicant.Id, 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 applications.AddAsync(visaApplication, cancellationToken);
@@ -138,7 +83,7 @@ public class VisaApplicationRequestsHandler(
throw new ApplicationAlreadyProcessedException(); throw new ApplicationAlreadyProcessedException();
} }
//todo mapper //todo handle exception or not
ApplicationStatus statusToSet = status switch ApplicationStatus statusToSet = status switch
{ {
AuthorityRequestStatuses.Approved => ApplicationStatus.Approved, AuthorityRequestStatuses.Approved => ApplicationStatus.Approved,

View File

@@ -6,4 +6,8 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
</ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,14 @@
using ApplicationLayer.Services.Applicants.Models;
using AutoMapper;
using Domains.ApplicantDomain;
namespace Infrastructure.Automapper.Profiles
{
public class ApplicantProfile : Profile
{
public ApplicantProfile()
{
CreateMap<Applicant, ApplicantModel>(MemberList.Destination);
}
}
}

View File

@@ -0,0 +1,20 @@
using ApplicationLayer.Services.AuthServices.Requests;
using AutoMapper;
using Domains.Users;
namespace Infrastructure.Automapper.Profiles
{
public class UserProfile : Profile
{
public UserProfile()
{
CreateMap<RegisterApplicantRequest, User>(MemberList.Destination)
.ForMember(u => u.Role,
opts => opts.Ignore());
CreateMap<RegisterRequest, User>()
.ForMember(u => u.Role,
opts => opts.Ignore());
}
}
}

View File

@@ -0,0 +1,25 @@
using ApplicationLayer.Services.VisaApplications.Models;
using ApplicationLayer.Services.VisaApplications.Requests;
using AutoMapper;
using Domains.VisaApplicationDomain;
namespace Infrastructure.Automapper.Profiles
{
public class VisaApplicationProfile : Profile
{
public VisaApplicationProfile()
{
CreateMap<VisaApplication, VisaApplicationModelForApplicant>(MemberList.Destination);
CreateMap<VisaApplication, VisaApplicationModelForAuthority>(MemberList.Destination)
.ForMember(model => model.Applicant,
opts => opts.Ignore());
CreateMap<VisaApplicationCreateRequest, VisaApplication>(MemberList.Destination)
.ForMember(va => va.RequestDate,
opts => opts.Ignore())
.ForMember(va => va.ApplicantId,
opts => opts.Ignore());
}
}
}

View File

@@ -1,4 +1,5 @@
using ApplicationLayer.InfrastructureServicesInterfaces; using System.Reflection;
using ApplicationLayer.InfrastructureServicesInterfaces;
using ApplicationLayer.Services.Applicants.NeededServices; using ApplicationLayer.Services.Applicants.NeededServices;
using ApplicationLayer.Services.AuthServices.NeededServices; using ApplicationLayer.Services.AuthServices.NeededServices;
using ApplicationLayer.Services.VisaApplications.NeededServices; using ApplicationLayer.Services.VisaApplications.NeededServices;
@@ -37,6 +38,8 @@ public static class DependencyInjection
services.AddSingleton<IDateTimeProvider, DateTimeProvider>(); services.AddSingleton<IDateTimeProvider, DateTimeProvider>();
services.AddAutoMapper(Assembly.GetExecutingAssembly());
return services; return services;
} }
} }

View File

@@ -24,7 +24,7 @@ namespace SchengenVisaApi.Controllers
[Route("register")] [Route("register")]
public async Task<IActionResult> Register(RegisterApplicantRequest request, CancellationToken cancellationToken) public async Task<IActionResult> Register(RegisterApplicantRequest request, CancellationToken cancellationToken)
{ {
await registerService.Register(request, cancellationToken); await registerService.RegisterApplicant(request, cancellationToken);
return Ok(); return Ok();
} }
@@ -62,6 +62,7 @@ namespace SchengenVisaApi.Controllers
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Route("authorities")] [Route("authorities")]
[Authorize(policy: PolicyConstants.AdminPolicy)] [Authorize(policy: PolicyConstants.AdminPolicy)]
//todo return models
public async Task<IActionResult> GetAuthorityAccounts(CancellationToken cancellationToken) public async Task<IActionResult> GetAuthorityAccounts(CancellationToken cancellationToken)
{ {
var result = await authorityService.GetAuthoritiesAccountsAsync(cancellationToken); var result = await authorityService.GetAuthoritiesAccountsAsync(cancellationToken);