/// <summary>
        /// Gets all bars from the database.
        /// </summary>
        /// <returns>List of bars, DTOs</returns>
        public async Task <IEnumerable <BarDTO> > GetAllAsync(string page, string itemsOnPage, string search, string order, bool access)
        {
            try
            {
                var p    = int.Parse(page);
                var item = int.Parse(itemsOnPage);
                var bars = _context.Bars
                           .Include(b => b.Cocktails)
                           .Include(b => b.Comments)
                           .Include(b => b.Location)
                           .Include(b => b.BarRatings).AsQueryable();
                if (!access)
                {
                    bars = bars.Where(b => b.IsDeleted == false);
                }

                if (!string.IsNullOrEmpty(search))
                {
                    if (double.TryParse(search, out double searchNumber))
                    {
                        bars = bars.Where(b => b.Name.Contains(search) ||
                                          b.Address.Contains(search) ||
                                          b.District.Contains(search) ||
                                          b.Town.Contains(search) ||
                                          (b.Rating <searchNumber + 0.1 &&
                                                     b.Rating> searchNumber - 0.1));
                    }
                    else
                    {
                        bars = bars.Where(b => b.Name.Contains(search) ||
                                          b.Address.Contains(search) ||
                                          b.District.Contains(search) ||
                                          b.Town.Contains(search));
                    }
                }

                if (order == "desc")
                {
                    bars = bars.OrderByDescending(b => b.Name);
                }
                else
                {
                    bars = bars.OrderBy(b => b.Name);
                }

                bars = bars.Skip(p * item)
                       .Take(item);

                var result = await bars.ToListAsync();

                var barsDTO = result.Select(b => _mapper.MapEntityToDTO(b));

                return(barsDTO);
            }
            catch (Exception)
            {
                throw new ArgumentException("Failed to get list");
            }
        }
Example #2
0
        /// <summary>
        /// Gets the list of bars serving the specified cocktail
        /// </summary>
        /// <param name="id">The specified cocktail Id</param>
        /// <param name="page">Page number to be loaded</param>
        /// <param name="itemsOnPage">Number of bars per page</param>
        /// <param name="searchString">Search parameter for bars</param>
        /// <param name="access">True for admin, to load unlisted bars</param>
        /// <returns></returns>
        public async Task <IEnumerable <BarDTO> > GetBarsAsync(Guid id, string page, string itemsOnPage, string searchString, bool access)
        {
            try
            {
                var bars = await _context.CocktailBars
                           .Include(c => c.Bar)
                           .ThenInclude(b => b.Comments)
                           .ThenInclude(c => c.User)
                           .Include(c => c.Bar)
                           .ThenInclude(b => b.BarRatings)
                           .ThenInclude(r => r.User)
                           .Include(c => c.Bar)
                           .ThenInclude(b => b.Location)
                           .Where(c => c.CocktailId == id)
                           .Select(c => c.Bar)
                           .ToListAsync();

                if (!access)
                {
                    bars = bars
                           .Where(b => b.IsDeleted == false).ToList();
                }
                ;

                //var barsList = await bars.ToListAsync();

                return(bars.Select(x => _barMapper.MapEntityToDTO(x)).ToList());
            }
            catch (Exception e)
            {
                return(new List <BarDTO>());
            }
        }
Example #3
0
        /// <summary>
        /// Creates new bar in the database.
        /// </summary>
        /// <param name="barDTO">bar DTO model.</param>
        /// <returns>The created bar.</returns>
        public async Task <BarDTO> CreateAsync(BarDTO barDTO)
        {
            try
            {
                if (await BarExistsByName(barDTO.Name))
                {
                    var theBar = await _context.Bars
                                 .FirstOrDefaultAsync(c => c.Name.Equals(barDTO.Name));

                    if (theBar.IsDeleted == true)
                    {
                        theBar.IsDeleted = false;
                    }
                    _context.Bars.Update(theBar);
                    await _context.SaveChangesAsync();

                    return(_mapper.MapEntityToDTO(theBar));
                }
                else
                {
                    var bar = _mapper.MapDTOToEntity(barDTO);

                    _context.Bars.Add(bar);

                    await _context.SaveChangesAsync();

                    bar = await _context.Bars.FirstOrDefaultAsync(b => b.Name == barDTO.Name);

                    return(_mapper.MapEntityToDTO(bar));
                }
            }
            catch (Exception)
            {
                throw new ArgumentNullException("Fail to create bar");
            }
        }