Пример #1
0
        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();
        }
Пример #2
0
        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());
 }