Implement searching via categories
This commit is contained in:
@@ -15,9 +15,10 @@ public class VenueController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetAll()
|
||||
public async Task<IActionResult> GetVenues([FromQuery] string[]? categories = null, [FromQuery] string[]? tags = null)
|
||||
{
|
||||
var venues = await _venueService.GetAllVenues();
|
||||
var venues = await _venueService.GetFilteredVenues(null, categories);
|
||||
|
||||
return Ok(venues);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,4 +6,5 @@ public interface IVenueService
|
||||
{
|
||||
public Task<IEnumerable<Venue>> GetAllVenues();
|
||||
public Task<Venue?> GetVenue(int venueId);
|
||||
public Task<IEnumerable<Venue>> GetFilteredVenues(string[]? tags = null, string[]? categories = null);
|
||||
}
|
||||
@@ -29,4 +29,21 @@ public class VenueService : IVenueService
|
||||
.Include(v => v.Tags)
|
||||
.SingleOrDefaultAsync(v => v.Id == venueId);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Venue>> GetFilteredVenues(string[]? tags = null, string[]? categories = null)
|
||||
{
|
||||
var venues = _context.Venues
|
||||
.Include(v => v.Category)
|
||||
.Include(v => v.Tags);
|
||||
|
||||
|
||||
IQueryable<Venue> filteredVenues = venues;
|
||||
|
||||
if (categories is { Length: > 0 })
|
||||
{
|
||||
filteredVenues = venues.Where(v => categories.Contains(v.Category.Name));
|
||||
}
|
||||
|
||||
return await filteredVenues.ToListAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user