public async Task CreateLock()
        {
            Lock lockEntity = GenerateLock();
            await _applicationDbContext.Locks.AddAsync(lockEntity);

            await _applicationDbContext.SaveChangesAsync();

            List <User> admins = await _applicationDbContext.Users.Where(x => x.Role == ApplicationRole.Admin).ToListAsync();

            List <LockRent> adminRents = new List <LockRent>();

            foreach (var admin in admins)
            {
                LockRent lockRent =
                    new LockRent {
                    LockId    = lockEntity.Id,
                    Lock      = lockEntity,
                    RentStart = DateTime.Now,
                    Rights    = RentRights.Admin,
                    UserId    = admin.Id,
                    User      = admin
                };
                adminRents.Add(lockRent);
            }
            await _applicationDbContext.LockRents.AddRangeAsync(adminRents);

            await _applicationDbContext.SaveChangesAsync();
        }
        public async Task CancelRights(int lockId, int userId)
        {
            LockRent rent = await _applicationDbContext.LockRents
                            .FirstOrDefaultAsync(x => x.LockId == lockId && x.UserId == userId && CheckTiming(x));

            rent.RentFinish = DateTime.Now;
            _applicationDbContext.LockRents.Update(rent);
            await _applicationDbContext.SaveChangesAsync();
        }
        public async Task ShareRights(ShareRightsViewModel shareRightsViewModel)
        {
            var currRent = await GetCurrentRent(shareRightsViewModel.LockId, shareRightsViewModel.OwnerId);

            if (currRent != null)
            {
                return;
            }
            LockRent ownerRent =
                new LockRent
            {
                UserId     = shareRightsViewModel.OwnerId,
                LockId     = shareRightsViewModel.LockId,
                Rights     = shareRightsViewModel.Rights,
                RentStart  = shareRightsViewModel.From,
                RentFinish = shareRightsViewModel.To
            };
            await _applicationDbContext.LockRents.AddAsync(ownerRent);

            await _applicationDbContext.SaveChangesAsync();
        }
        private bool CheckTiming(LockRent rent)
        {
            DateTime dateTimeNow = DateTime.Now;

            return(rent.RentStart <= dateTimeNow && (!rent.RentFinish.HasValue || rent.RentFinish > dateTimeNow));
        }