public async Task <IActionResult> PostAsync([FromBody] DemandeReservationDto dto) { try { var idVoyage = new IdVoyage(dto.IdVoyage); var passagers = dto.Passagers .Select(p => p.ToDomain()) .ToList(); await _useCase.ReserverAsync(idVoyage, passagers); return(Ok()); } catch (EmailInvalideException) { return(BadRequest("Email invalide")); } catch (VoyageSansTrainException) { return(NotFound("Pas de train pour ce voyage")); } catch (TrainPleinException) { return(BadRequest("Train plein")); } catch (VoiturePleineException) { return(BadRequest("Voiture pleine")); } catch (Exception) { return(Problem()); } }
public async Task <Train> GetTrainDuVoyageAsync(IdVoyage idVoyage) { var reservations = await _dbContext.Set <DbReservation>() .Include(r => r.Passagers) .Where(r => r.IdVoyage == (int)idVoyage) .ToListAsync(); var voyage = await _voyageUseCase.GetVoyageAsync((int)idVoyage); if (voyage == null) { return(null); } return(new Train( idVoyage, voyage.Train.Voitures .Select(v => new Voiture( new NumeroVoiture(v.Numero), v.Capacite, GetNbReservations(reservations, v.Numero))) .ToList())); }
public async Task ReserverAsync(IdVoyage idVoyage, IReadOnlyCollection <Passager> passagers) { var train = await _trainRepository.GetTrainDuVoyageAsync(idVoyage); if (train == null) { throw new VoyageSansTrainException(idVoyage); } if (!train.PeutReserver(passagers.Count, SeuilCapacite)) { throw new TrainPleinException(); } var reservation = train.Reserver(passagers, SeuilCapacite); await _reservationRepository.SaveAsync(reservation); await _notifieur.NotifierReservationValideeAsync(reservation); }