public void RentScooter(RequestRentModel rentModel) { var findMeAsClient = _context.Clients .Where(el => el.FirstName == rentModel.FirstName && el.LastName == rentModel.LastName) .Include(el => el.Scooter) .FirstOrDefault(); if (findMeAsClient == null) { findMeAsClient = _context.Clients.Add(new Client() { FirstName = rentModel.FirstName, LastName = rentModel.LastName, }).Entity; _context.SaveChanges(); } if (findMeAsClient.Scooter != null) { return; } var scooterId = _context.Scooters .Include(p => p.Rentals) .Where(x => x.Rentals.Count == 0) .Select(el => new { ScooterId = (int?)el.Id }) .FirstOrDefault()?.ScooterId ?? _context.Scooters .Include(p => p.Defect) .Include(p => p.Rentals) .Where(x => x.Defect.DefectType != Defects.Broke) .SelectMany(el => el.Rentals) .Where(el => el.EndRentTime != DateTime.MaxValue && el.EndRentTime < DateTime.UtcNow.AddMinutes(-15)) .Select(el => new { el.ScooterId }) .FirstOrDefault()?.ScooterId; if (scooterId == null) { return; } findMeAsClient.ScooterId = scooterId; _context.Rentals.Add(new Rental() { EndRentTime = DateTime.MaxValue, BeginRentTime = DateTime.UtcNow, ScooterId = scooterId, ClientId = findMeAsClient.Id }); _context.SaveChanges(); }
public void ReturnScooter(RequestRentModel rentModel) { var findMeAsClient = _context.Clients .Where(el => el.FirstName == rentModel.FirstName && el.LastName == rentModel.LastName) .Include(el => el.Scooter) .FirstOrDefault(); if (findMeAsClient?.Scooter == null) { return; } var findHistoryScrooter = _context.Rentals .Where(el => el.ClientId == findMeAsClient.Id && el.ScooterId == findMeAsClient.ScooterId) .OrderByDescending(el => el.EndRentTime) .FirstOrDefault(); findMeAsClient.ScooterId = null; findHistoryScrooter.EndRentTime = DateTime.UtcNow; _context.SaveChanges(); }
public ActionResult ReturnScooter([FromBody] RequestRentModel rentModel) { _clientService.ReturnScooter(rentModel); return(Ok()); }