/// <summary> /// Обновить Хуету /// </summary> public async Task <TripOnRouteWithStationsDto> UpdateTripOnRoute(TripOnRouteWithStationsDto input) { await CompareDaysFromTurnover(input); //Начинаем транзакцию using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var sqlRStationOnTrip = new StantionOnTripsRepository(_logger); var sqlRDaysOfTrip = new DayOfTripsRepoisitory(_logger); //var sqlRStationOnTripNoTransaction = new StantionOnTripsRepository(_logger); //Удаляем лишние станции нахуй, если есть var stations = await sqlRStationOnTrip.ByTripId(input.TripWithDateTimeStations.Id); foreach (var station in stations) { if (input.TripWithDateTimeStations.StantionOnTripsWithStringTime.Any(e => e.Id == station.Id)) { continue; } sqlRStationOnTrip.Delete(station.Id); } var currentDaysOfTrip = await sqlRDaysOfTrip.DaysByTripId(input.TripId); var currentDays = currentDaysOfTrip.Select(x => x.Day).ToList(); foreach (var day in input.Days) { if (currentDays.Contains(day)) { await sqlRDaysOfTrip.Add(new DayOfTrip { TripId = input.TripId, Day = day }); currentDays.Remove(day); } } if (currentDays.Count > 0) { foreach (var currentDay in currentDays) { var toRemove = currentDaysOfTrip.FirstOrDefault(x => x.Day.Equals(currentDay)); await sqlRDaysOfTrip.Delete(toRemove.Id); } } var sqlRTripOnRoute = new TripsOnRouteRepository(_logger); var newTripOnRoute = await sqlRTripOnRoute.Update(_mapper.Map <TripOnRouteWithStationsDto, TripOnRoute>(input)); var result = _mapper.Map <TripOnRoute, TripOnRouteWithStationsDto>(newTripOnRoute); result.TripWithDateTimeStations = new TripWithDateTimeStations { StantionOnTripsWithStringTime = new List <StationOnTripWithStringDateTime>() }; foreach (var item in input.TripWithDateTimeStations.StantionOnTripsWithStringTime) { var stationOnTrip = await sqlRStationOnTrip.Update( _mapper.Map <StationOnTripWithStringDateTime, StantionOnTrip>(item)); result.TripWithDateTimeStations.StantionOnTripsWithStringTime.Add( _mapper.Map <StantionOnTrip, StationOnTripWithStringDateTime>(item)); } transaction.Complete(); return(result); } }