/// <summary> /// Allows to fetch reservation according to specified options: /// Booked / Canceled / Picked-up / Returned /// Picked-up date-time from /// Picked-up date-time to /// Client full name or email or phone number /// </summary> /// <param name="parameters"></param> /// <returns></returns> public RezervationCollectionModel FindRezervations(RezervationBrowsingParams parameters) { if (parameters == null) { throw new InvalidParameterException(nameof(parameters)); } var dbRezervations = this.dbContext.Rezervations.AsQueryable(); if (!string.IsNullOrWhiteSpace(parameters.ClientEmail)) { dbRezervations = dbRezervations.Include(x => x.ClientAccount).Where(x => x.ClientAccount.Email == parameters.ClientEmail); } if (!string.IsNullOrWhiteSpace(parameters.ClientFullName)) { dbRezervations = dbRezervations.Include(x => x.ClientAccount).Where(x => x.ClientAccount.FullName == parameters.ClientFullName); } if (!string.IsNullOrWhiteSpace(parameters.ClientPhone)) { dbRezervations = dbRezervations.Include(x => x.ClientAccount).Where(x => x.ClientAccount.Phone == parameters.ClientPhone); } if (parameters.PickUpDateFrom.HasValue) { dbRezervations = dbRezervations.Where(x => x.PickUpDate >= parameters.PickUpDateFrom); } if (parameters.PickUpDateTo.HasValue) { dbRezervations = dbRezervations.Where(x => x.PickUpDate <= parameters.PickUpDateTo); } if (parameters.IsBooked) { dbRezervations = dbRezervations.Where(x => !x.IsCancelled && !x.IsPickedUp && !x.IsReturned); } if (parameters.IsReturned) { dbRezervations = dbRezervations.Where(x => x.IsReturned); } if (parameters.IsPickedUp) { dbRezervations = dbRezervations.Where(x => x.IsPickedUp && !x.IsCancelled); } if (parameters.IsCancelled) { dbRezervations = dbRezervations.Where(x => x.IsCancelled); } return(new RezervationCollectionModel(dbRezervations.ToList().Select(x => x.ToModel()).ToList(), parameters.StartIndex, parameters.MaxItems)); }
public RezervationCollectionModel GetAllRezervations(RezervationBrowsingParams parameters) { if (parameters == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = "Invalid parameters." }); } return(this.rezervationService.FindRezervations(parameters)); }
public void FindRezervationsTest() { using (var context = new CarRentalDbContext(this.dbContextOptions)) { var dbRezervations = context.Rezervations.ToList(); var clientAccountService = new ClientAccountService(context); var rezervationService = new RezervationService(context, clientAccountService); var parameters = new RezervationBrowsingParams { ClientEmail = "*****@*****.**", ClientFullName = "Client Name 1", ClientPhone = "+11111", PickUpDateFrom = DateTime.Today.AddDays(1), PickUpDateTo = DateTime.Today.AddDays(2), IsBooked = true, }; var rezervations = rezervationService.FindRezervations(parameters); Assert.IsTrue(rezervations.Count == 1); parameters = new RezervationBrowsingParams { ClientEmail = "*****@*****.**", ClientFullName = "Client Name 1", ClientPhone = "+11111", PickUpDateFrom = DateTime.Today.AddDays(1), PickUpDateTo = DateTime.Today.AddDays(2), IsPickedUp = true, }; rezervations = rezervationService.FindRezervations(parameters); Assert.IsTrue(rezervations.Count == 2); parameters = new RezervationBrowsingParams { IsCancelled = true, }; rezervations = rezervationService.FindRezervations(parameters); Assert.IsTrue(rezervations.Count == 1); parameters = new RezervationBrowsingParams { IsReturned = true, }; rezervations = rezervationService.FindRezervations(parameters); Assert.IsTrue(rezervations.Count == 2); parameters = new RezervationBrowsingParams { MaxItems = 2, StartIndex = 1, }; rezervations = rezervationService.FindRezervations(parameters); Assert.IsTrue(rezervations.Count == 2); try { rezervationService.FindRezervations(null); Assert.Fail(); } catch (InvalidParameterException) { } catch { Assert.Fail(); } } }