Fix tag search, add text name search, add config around seeding

This commit is contained in:
Stedoss
2022-11-01 19:58:15 +00:00
parent 38bedbaa72
commit b19f46ff92
11 changed files with 58 additions and 27 deletions

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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

View File

@@ -4,5 +4,10 @@
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Database": {
"Seed": {
"SeedDataLocation": "../leedsbeerquest.csv"
}
}
}