Cleanup the search people API method

This commit is contained in:
Joseph Milazzo 2025-05-09 15:25:49 -05:00
parent a5c1c2e75f
commit 19d2e20f24
6 changed files with 22 additions and 17 deletions

View file

@ -48,10 +48,15 @@ public class PersonController : BaseApiController
return Ok(await _unitOfWork.PersonRepository.GetPersonDtoByName(name, User.GetUserId()));
}
[HttpGet("search-people")]
public async Task<ActionResult<List<PersonDto>>> SearchPeople([FromQuery] string name)
/// <summary>
/// Find a person by name or alias against a query string
/// </summary>
/// <param name="queryString"></param>
/// <returns></returns>
[HttpGet("search")]
public async Task<ActionResult<List<PersonDto>>> SearchPeople([FromQuery] string queryString)
{
var people = await _unitOfWork.PersonRepository.SearchPeople(name);
var people = await _unitOfWork.PersonRepository.SearchPeople(queryString);
return Ok(people.Select(person => _mapper.Map<PersonDto>(person)).ToList());
}

View file

@ -68,7 +68,7 @@ public interface IPersonRepository
Task<IList<Person>> GetPeopleByNames(List<string> normalizedNames, PersonIncludes includes = PersonIncludes.Aliases);
Task<Person?> GetPersonByAniListId(int aniListId, PersonIncludes includes = PersonIncludes.Aliases);
Task<IList<Person>> SearchPeople(string query, PersonIncludes includes = PersonIncludes.Aliases);
Task<IList<Person>> SearchPeople(string searchQuery, PersonIncludes includes = PersonIncludes.Aliases);
}
public class PersonRepository : IPersonRepository
@ -305,12 +305,14 @@ public class PersonRepository : IPersonRepository
.FirstOrDefaultAsync();
}
public async Task<IList<Person>> SearchPeople(string query, PersonIncludes includes = PersonIncludes.Aliases)
public async Task<IList<Person>> SearchPeople(string searchQuery, PersonIncludes includes = PersonIncludes.Aliases)
{
searchQuery = searchQuery.ToNormalized();
return await _context.Person
.Includes(includes)
.Where(p => EF.Functions.Like(p.Name, $"%{query}%")
|| p.Aliases.Any(pa => EF.Functions.Like(pa.Alias, $"%{query}%")))
.Where(p => EF.Functions.Like(p.Name, $"%{searchQuery}%")
|| p.Aliases.Any(pa => EF.Functions.Like(pa.Alias, $"%{searchQuery}%")))
.ToListAsync();
}