Fix tag search, add text name search, add config around seeding
This commit is contained in:
@@ -15,9 +15,12 @@ public class VenueController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetVenues([FromQuery] string[]? categories = null, [FromQuery] string[]? tags = null)
|
||||
public async Task<IActionResult> GetVenues(
|
||||
[FromQuery] string? search = null,
|
||||
[FromQuery] string[]? categories = null,
|
||||
[FromQuery] string[]? tags = null)
|
||||
{
|
||||
var venues = await _venueService.GetFilteredVenues(null, categories);
|
||||
var venues = await _venueService.GetFilteredVenues(search, tags, categories);
|
||||
|
||||
return Ok(venues);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
using CsvHelper;
|
||||
using LeedsBeerQuest.API.Data.Contexts;
|
||||
using LeedsBeerQuest.API.Data.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace LeedsBeerQuest.API.Data.Seed;
|
||||
|
||||
@@ -28,7 +27,7 @@ public class LeedsBeerQuestSeeder
|
||||
|
||||
IEnumerable<LeedsBeerQuestCSV>? lbqCSV;
|
||||
|
||||
using (var reader = new StreamReader("../leedsbeerquest.csv"))
|
||||
using (var reader = new StreamReader(_dataSourcePath))
|
||||
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
|
||||
{
|
||||
lbqCSV = csv.GetRecords<LeedsBeerQuestCSV>().ToList();
|
||||
|
||||
@@ -6,5 +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);
|
||||
public Task<IEnumerable<Venue>> GetFilteredVenues(string? nameSearch = null, string[]? tags = null, string[]? categories = null);
|
||||
}
|
||||
@@ -30,7 +30,10 @@ public class VenueService : IVenueService
|
||||
.SingleOrDefaultAsync(v => v.Id == venueId);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Venue>> GetFilteredVenues(string[]? tags = null, string[]? categories = null)
|
||||
public async Task<IEnumerable<Venue>> GetFilteredVenues(
|
||||
string? nameSearch = null,
|
||||
string[]? tags = null,
|
||||
string[]? categories = null)
|
||||
{
|
||||
var venues = _context.Venues
|
||||
.Include(v => v.Category)
|
||||
@@ -39,9 +42,21 @@ public class VenueService : IVenueService
|
||||
|
||||
IQueryable<Venue> filteredVenues = venues;
|
||||
|
||||
if (nameSearch != null)
|
||||
{
|
||||
filteredVenues = filteredVenues.Where(v => v.Name.ToLower().Contains(nameSearch.ToLower()));
|
||||
}
|
||||
|
||||
if (categories is { Length: > 0 })
|
||||
{
|
||||
filteredVenues = venues.Where(v => categories.Contains(v.Category.Name));
|
||||
filteredVenues = filteredVenues.Where(v => categories.Contains(v.Category.Name));
|
||||
}
|
||||
|
||||
if (tags is { Length: > 0 })
|
||||
{
|
||||
filteredVenues = tags.Aggregate(filteredVenues, (current, filteredTag) =>
|
||||
current.Where(v =>
|
||||
v.Tags.Contains(_context.Tags.FirstOrDefault(t => t.Name == filteredTag)!)));
|
||||
}
|
||||
|
||||
return await filteredVenues.ToListAsync();
|
||||
|
||||
@@ -19,7 +19,7 @@ var app = builder.Build();
|
||||
|
||||
#if LBQ_SEED_DATA
|
||||
var dbContext = app.Services.GetRequiredService<LeedsBeerQuestDbContext>();
|
||||
var seeder = new LeedsBeerQuestSeeder(dbContext!, "");
|
||||
var seeder = new LeedsBeerQuestSeeder(dbContext!, app.Configuration["Database:Seed:SeedDataLocation"]);
|
||||
seeder.Seed();
|
||||
#endif
|
||||
|
||||
|
||||
@@ -4,5 +4,10 @@
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"Database": {
|
||||
"Seed": {
|
||||
"SeedDataLocation": "../leedsbeerquest.csv"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user