62 lines
2.0 KiB
C#
62 lines
2.0 KiB
C#
using AutobusApi.Application.Common.Interfaces;
|
|
using AutobusApi.Domain.Entities;
|
|
using MediatR;
|
|
|
|
namespace AutobusApi.Application.VehicleEnrollments.Commands.CreateVehicleEnrollment;
|
|
|
|
public class CreateVehicleEnrollmentCommandHandler : IRequestHandler<CreateVehicleEnrollmentCommand, int>
|
|
{
|
|
private readonly IApplicationDbContext _dbContext;
|
|
|
|
public CreateVehicleEnrollmentCommandHandler(IApplicationDbContext dbContext)
|
|
{
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
public async Task<int> Handle(
|
|
CreateVehicleEnrollmentCommand request,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
var vehicleEnrollment = new VehicleEnrollment();
|
|
|
|
vehicleEnrollment.VehicleId = request.VehicleId;
|
|
vehicleEnrollment.RouteId = request.RouteId;
|
|
vehicleEnrollment.DepartureDateTimeUtc = request.DepartureDateTimeUtc;
|
|
|
|
var routeAddresses = _dbContext.RouteAddresses
|
|
.Where(ra => ra.RouteId == request.RouteId)
|
|
.ToList();
|
|
|
|
if (routeAddresses.Count != request.RouteAddressDetails.Count)
|
|
{
|
|
// TODO: Throw validation exception
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
vehicleEnrollment.RouteAddressDetails = new List<RouteAddressDetails>();
|
|
|
|
foreach (var detail in request.RouteAddressDetails)
|
|
{
|
|
if (!routeAddresses.Any(ra => ra.Id == detail.RouteAddressId))
|
|
{
|
|
// TODO: Throw validation exception
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
vehicleEnrollment.RouteAddressDetails.Add(new RouteAddressDetails()
|
|
{
|
|
RouteAddressId = detail.RouteAddressId,
|
|
TimeToNextAddress = detail.TimeToNextAddress,
|
|
CurrentAddressStopTime = detail.CurrentAddressStopTime,
|
|
CostToNextAddress = detail.CostToNextAddress
|
|
});
|
|
}
|
|
|
|
_dbContext.VehicleEnrollments.Add(vehicleEnrollment);
|
|
|
|
await _dbContext.SaveChangesAsync(cancellationToken);
|
|
|
|
return vehicleEnrollment.Id;
|
|
}
|
|
}
|