autobus-api_old/AutobusApi.Application/VehicleEnrollments/Commands/CreateVehicleEnrollment/CreateVehicleEnrollmentCommandHandler.cs

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;
}
}