/// <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"); } }
/// <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>()); } }
/// <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"); } }