public async Task <BarReviewDTO> CreateBarReviewAsync(Guid barId, Guid userId, int rating, string comment)
        {
            var barReviewExists = await _cmContext.BarReviews.AnyAsync(br => br.UserId == userId && br.BarId == barId && br.DeletedOn == null);

            if (barReviewExists)
            {
                throw new ArgumentException("This bar has already been reviewed by the user");
            }

            var bar = await _cmContext.Bars.Where(b => b.Id == barId && b.UnlistedOn == null).FirstOrDefaultAsync();

            if (bar == null)
            {
                throw new ArgumentNullException("Bar is not available.");
            }

            var userExists = await _cmContext.Users.AnyAsync(u => u.Id == userId && u.DeletedOn == null);

            if (!userExists)
            {
                throw new ArgumentNullException("User is not available");
            }
            if (rating < 1 || rating > 5)
            {
                throw new ArgumentOutOfRangeException("Rating must be bewtween 1 and 5.");
            }
            var barReview = new BarReview();

            barReview.BarId      = barId;
            barReview.UserId     = userId;
            barReview.Rating     = rating;
            barReview.Comment    = comment;
            barReview.ReviewedOn = DateTime.UtcNow;
            try
            {
                bar.AvgRating = await this.CalculateAvgRating(barId, rating);

                _cmContext.BarReviews.Add(barReview);
                await _cmContext.SaveChangesAsync();
            }
            catch (Exception)
            {
                throw;
            }
            var barReviewDTO = barReview.BarMapReviewDTO();

            return(barReviewDTO);
        }