using AutobusApi.Application.Common.Exceptions; using AutobusApi.Application.Common.Interfaces; using MediatR; using Microsoft.EntityFrameworkCore; namespace AutobusApi.Application.VehicleEnrollments.Commands.UpdateVehicleEnrollment; public class UpdateVehicleEnrollmentCommandHandler : IRequestHandler { private readonly IApplicationDbContext _dbContext; public UpdateVehicleEnrollmentCommandHandler(IApplicationDbContext dbContext) { _dbContext = dbContext; } public async Task Handle( UpdateVehicleEnrollmentCommand request, CancellationToken cancellationToken) { var vehicleEnrollment = await _dbContext.VehicleEnrollments .Include(ve => ve.RouteAddressDetails) .FirstAsync(ve => ve.Id == request.Id, cancellationToken); if (vehicleEnrollment == null) { throw new NotFoundException(); } vehicleEnrollment.DepartureDateTimeUtc = request.DepartureDateTimeUtc; foreach (var requestDetail in request.RouteAddressDetails) { var detail = vehicleEnrollment.RouteAddressDetails .First(rad => rad.RouteAddressId == requestDetail.RouteAddressId); detail.TimeToNextAddress = requestDetail.TimeToNextAddress; detail.CurrentAddressStopTime = requestDetail.CurrentAddressStopTime; detail.CostToNextAddress = requestDetail.CostToNextAddress; } await _dbContext.SaveChangesAsync(cancellationToken); } }