add vehicle and company info to vehicle enrollment search dto
This commit is contained in:
parent
a97b95a704
commit
57264b384c
@ -12,6 +12,7 @@ namespace cuqmbr.TravelGuide.Application
|
||||
.VehicleEnrollmentSearch.Queries.SearchAll;
|
||||
|
||||
// TODO: Add configurable time between transfers.
|
||||
// TODO: Refactor DTO creation code to use mapper as much as possible.
|
||||
public class SearchAllQueryHandler :
|
||||
IRequestHandler<SearchAllQuery, IEnumerable<VehicleEnrollmentSearchDto>>
|
||||
{
|
||||
@ -71,8 +72,24 @@ public class SearchAllQueryHandler :
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
var vehicles = (await _unitOfWork.VehicleRepository
|
||||
.GetPageAsync(
|
||||
e => e.Enrollments.All(e => vehicleEnrollmentIds.Contains(e.Id)),
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
// Hydrate vehicle enrollments with route address details
|
||||
var companyIds = vehicles.Select(e => e.CompanyId);
|
||||
var companies = (await _unitOfWork.CompanyRepository
|
||||
.GetPageAsync(
|
||||
e => companyIds.Contains(e.Id),
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
|
||||
// Hydrate vehicle enrollments with:
|
||||
// - route address details;
|
||||
// - vehicle info;
|
||||
// - comapny info.
|
||||
|
||||
foreach (var vehicleEnrollment in vehicleEnrollments)
|
||||
{
|
||||
@ -80,6 +97,12 @@ public class SearchAllQueryHandler :
|
||||
.Where(e => e.VehicleEnrollmentId == vehicleEnrollment.Id)
|
||||
.OrderBy(e => e.RouteAddress.Order)
|
||||
.ToArray();
|
||||
|
||||
vehicleEnrollment.Vehicle = vehicles
|
||||
.Single(e => e.Id == vehicleEnrollment.VehicleId);
|
||||
|
||||
vehicleEnrollment.Vehicle.Company = companies
|
||||
.Single(e => e.Id == vehicleEnrollment.Vehicle.CompanyId);
|
||||
}
|
||||
|
||||
|
||||
@ -310,7 +333,13 @@ public class SearchAllQueryHandler :
|
||||
VehicleType = source.VehicleType.Name,
|
||||
Uuid = tag.VehicleEnrollment.Guid,
|
||||
Order = enrollmentOrder,
|
||||
Addresses = addressDtos
|
||||
Addresses = addressDtos,
|
||||
Company = _mapper
|
||||
.Map<VehicleEnrollmentSearchCompanyDto>(
|
||||
tag.VehicleEnrollment.Vehicle.Company),
|
||||
Vehicle = _mapper
|
||||
.Map<VehicleEnrollmentSearchVehicleDto>(
|
||||
tag.VehicleEnrollment.Vehicle)
|
||||
});
|
||||
|
||||
|
||||
@ -443,7 +472,11 @@ public class SearchAllQueryHandler :
|
||||
VehicleType = source.VehicleType.Name,
|
||||
Uuid = tag.VehicleEnrollment.Guid,
|
||||
Order = enrollmentOrder,
|
||||
Addresses = addressDtos
|
||||
Addresses = addressDtos,
|
||||
Company = _mapper.Map<VehicleEnrollmentSearchCompanyDto>(
|
||||
tag.VehicleEnrollment.Vehicle.Company),
|
||||
Vehicle = _mapper.Map<VehicleEnrollmentSearchVehicleDto>(
|
||||
tag.VehicleEnrollment.Vehicle)
|
||||
});
|
||||
|
||||
// ---------------
|
||||
|
@ -12,6 +12,7 @@ namespace cuqmbr.TravelGuide.Application
|
||||
.VehicleEnrollmentSearch.Queries.SearchShortest;
|
||||
|
||||
// TODO: Add configurable time between transfers.
|
||||
// TODO: Refactor DTO creation code to use mapper as much as possible.
|
||||
public class SearchShortestQueryHandler :
|
||||
IRequestHandler<SearchShortestQuery, VehicleEnrollmentSearchDto>
|
||||
{
|
||||
@ -71,8 +72,24 @@ public class SearchShortestQueryHandler :
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
var vehicles = (await _unitOfWork.VehicleRepository
|
||||
.GetPageAsync(
|
||||
e => e.Enrollments.All(e => vehicleEnrollmentIds.Contains(e.Id)),
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
// Hydrate vehicle enrollments with route address details
|
||||
var companyIds = vehicles.Select(e => e.CompanyId);
|
||||
var companies = (await _unitOfWork.CompanyRepository
|
||||
.GetPageAsync(
|
||||
e => companyIds.Contains(e.Id),
|
||||
1, int.MaxValue, cancellationToken))
|
||||
.Items;
|
||||
|
||||
|
||||
// Hydrate vehicle enrollments with:
|
||||
// - route address details;
|
||||
// - vehicle info;
|
||||
// - comapny info.
|
||||
|
||||
foreach (var vehicleEnrollment in vehicleEnrollments)
|
||||
{
|
||||
@ -80,6 +97,12 @@ public class SearchShortestQueryHandler :
|
||||
.Where(e => e.VehicleEnrollmentId == vehicleEnrollment.Id)
|
||||
.OrderBy(e => e.RouteAddress.Order)
|
||||
.ToArray();
|
||||
|
||||
vehicleEnrollment.Vehicle = vehicles
|
||||
.Single(e => e.Id == vehicleEnrollment.VehicleId);
|
||||
|
||||
vehicleEnrollment.Vehicle.Company = companies
|
||||
.Single(e => e.Id == vehicleEnrollment.Vehicle.CompanyId);
|
||||
}
|
||||
|
||||
|
||||
@ -300,7 +323,13 @@ public class SearchShortestQueryHandler :
|
||||
VehicleType = source.VehicleType.Name,
|
||||
Uuid = tag.VehicleEnrollment.Guid,
|
||||
Order = enrollmentOrder,
|
||||
Addresses = addressDtos
|
||||
Addresses = addressDtos,
|
||||
Company = _mapper
|
||||
.Map<VehicleEnrollmentSearchCompanyDto>(
|
||||
tag.VehicleEnrollment.Vehicle.Company),
|
||||
Vehicle = _mapper
|
||||
.Map<VehicleEnrollmentSearchVehicleDto>(
|
||||
tag.VehicleEnrollment.Vehicle)
|
||||
});
|
||||
|
||||
firstRouteAddressId = nextTag.RouteAddressId;
|
||||
@ -422,7 +451,11 @@ public class SearchShortestQueryHandler :
|
||||
VehicleType = source.VehicleType.Name,
|
||||
Uuid = tag.VehicleEnrollment.Guid,
|
||||
Order = enrollmentOrder,
|
||||
Addresses = addressDtos
|
||||
Addresses = addressDtos,
|
||||
Company = _mapper.Map<VehicleEnrollmentSearchCompanyDto>(
|
||||
tag.VehicleEnrollment.Vehicle.Company),
|
||||
Vehicle = _mapper.Map<VehicleEnrollmentSearchVehicleDto>(
|
||||
tag.VehicleEnrollment.Vehicle)
|
||||
});
|
||||
}
|
||||
else
|
||||
|
@ -0,0 +1,25 @@
|
||||
using cuqmbr.TravelGuide.Application.Common.Mappings;
|
||||
using cuqmbr.TravelGuide.Domain.Entities;
|
||||
|
||||
namespace cuqmbr.TravelGuide.Application.VehicleEnrollmentSearch;
|
||||
|
||||
public sealed class VehicleEnrollmentSearchCompanyDto : IMapFrom<Company>
|
||||
{
|
||||
public string Uuid { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string LegalAddress { get; set; }
|
||||
|
||||
public string ContactEmail { get; set; }
|
||||
|
||||
public string ContactPhoneNumber { get; set; }
|
||||
|
||||
public void Mapping(MappingProfile profile)
|
||||
{
|
||||
profile.CreateMap<Company, VehicleEnrollmentSearchCompanyDto>()
|
||||
.ForMember(
|
||||
d => d.Uuid,
|
||||
opt => opt.MapFrom(s => s.Guid));
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
using cuqmbr.TravelGuide.Application.Common.Mappings;
|
||||
using cuqmbr.TravelGuide.Domain.Entities;
|
||||
|
||||
namespace cuqmbr.TravelGuide.Application.VehicleEnrollmentSearch;
|
||||
|
||||
public sealed class VehicleEnrollmentSearchVehicleDto : IMapFrom<Vehicle>
|
||||
{
|
||||
public string Uuid { get; set; }
|
||||
|
||||
public string Type { get; set; }
|
||||
|
||||
public string Number { get; set; }
|
||||
|
||||
public string Model { get; set; }
|
||||
|
||||
public short Capacity { get; set; }
|
||||
|
||||
public void Mapping(MappingProfile profile)
|
||||
{
|
||||
profile.CreateMap<Vehicle, VehicleEnrollmentSearchVehicleDto>()
|
||||
.ForMember(
|
||||
d => d.Uuid,
|
||||
opt => opt.MapFrom(s => s.Guid))
|
||||
.ForMember(
|
||||
d => d.Type,
|
||||
opt => opt.MapFrom(s => s.VehicleType.Name))
|
||||
.ForMember(
|
||||
d => d.Number,
|
||||
opt => opt.MapFrom(
|
||||
(s, d) =>
|
||||
{
|
||||
if (s is Bus)
|
||||
{
|
||||
return ((Bus)s).Number;
|
||||
}
|
||||
else if (s is Aircraft)
|
||||
{
|
||||
return ((Aircraft)s).Number;
|
||||
}
|
||||
else if (s is Train)
|
||||
{
|
||||
return ((Train)s).Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}))
|
||||
.ForMember(
|
||||
d => d.Model,
|
||||
opt => opt.MapFrom(
|
||||
(s, d) =>
|
||||
{
|
||||
if (s is Bus)
|
||||
{
|
||||
return ((Bus)s).Model;
|
||||
}
|
||||
else if (s is Aircraft)
|
||||
{
|
||||
return ((Aircraft)s).Model;
|
||||
}
|
||||
else if (s is Train)
|
||||
{
|
||||
return ((Train)s).Model;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}))
|
||||
.ForMember(
|
||||
d => d.Capacity,
|
||||
opt => opt.MapFrom(
|
||||
(s, d) =>
|
||||
{
|
||||
if (s is Bus)
|
||||
{
|
||||
return ((Bus)s).Capacity;
|
||||
}
|
||||
else if (s is Aircraft)
|
||||
{
|
||||
return ((Aircraft)s).Capacity;
|
||||
}
|
||||
else if (s is Train)
|
||||
{
|
||||
return ((Train)s).Capacity;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
@ -24,6 +24,10 @@ public sealed class VehicleEnrollmentSearchVehicleEnrollmentDto
|
||||
|
||||
public short Order { get; set; }
|
||||
|
||||
public VehicleEnrollmentSearchCompanyDto Company { get; set; }
|
||||
|
||||
public VehicleEnrollmentSearchVehicleDto Vehicle { get; set; }
|
||||
|
||||
public ICollection<VehicleEnrollmentSearchAddressDto>
|
||||
Addresses { get; set; }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user