public IActionResult CheckIn(Guid venueId)
        {
            var venueCheckInViewModel = new VenueCheckInViewModel();

            try
            {
                var venueDb = this._venueService.GetVenueById(venueId);

                if (venueDb == null)
                {
                    throw new Exception("venue was not found");
                }

                venueCheckInViewModel.VenueId = venueDb.Id;

                var venueViewModel = new VenueViewModel {
                    Name      = venueDb.Name,
                    Email     = venueDb.Email,
                    Telephone = venueDb.Telephone,
                    Address   = venueDb.Address,
                    Capacity  = venueDb.Capacity
                };

                venueCheckInViewModel.VenueDetails = venueViewModel;
            }
            catch (System.Exception ex)
            {
                _logger.LogError("Error", ex.Message);
                ModelState.AddModelError("Error", ex.Message);
            }

            return(View(venueCheckInViewModel));
        }
        public async Task <IActionResult> CheckIn(VenueCheckInViewModel checkIn)
        {
            var venueViewModel = new VenueViewModel();

            try
            {
                var venueDb     = this._venueService.GetVenueById(checkIn.VenueId);
                var currentUser = await GetUserIdAsync();

                var venueVisit = new Visit {
                    CheckIn = DateTime.Now,
                    Venue   = this._venueService.GetVenueById(checkIn.VenueId),
                    User    = currentUser
                };

                var allUserVisits = this._venueService.FindVisitsByUser(currentUser);

                foreach (var userVisit in allUserVisits)
                {
                    if (userVisit.CheckOut == DateTime.MinValue || userVisit.CheckOut == null)
                    {
                        checkIn.VenueDetails = new VenueViewModel {
                            Name      = venueDb.Name,
                            Address   = venueDb.Address,
                            Telephone = venueDb.Telephone,
                        };
                        throw new Exception($"You have already checked in { userVisit.Venue.Name }");
                    }
                }

                this._venueService.CheckInVisitor(venueVisit);
            }
            catch (System.Exception ex)
            {
                _logger.LogError("Error", ex.Message);
                ModelState.AddModelError("Error", ex.Message);
                return(View(checkIn));
            }

            return(RedirectToAction("Index"));
        }