find method

Future<List<Book>> find(
  1. SearchRequest searchRequest
)

Returns a List of books based on a search request.

Implementation

Future<List<Book>> find(SearchRequest searchRequest) async {
  try {
    final searchTermQuery = '&q=${searchRequest.query}';

    final author = searchRequest.author.replaceAll(',', '');
    final authorQuery = '&termtype_1=author&termval_1=$author';

    final filtersQuery = _buildFiltersQuery(searchRequest);

    final url =
        '$baseUrl/search?index=&page=1$searchTermQuery$authorQuery$filtersQuery';
    final soup = await cookSoup(Uri.encodeFull(url));
    final resultCount = _getAnnaResultCount(soup);
    if (resultCount == null || resultCount == 0) {
      return [];
    }

    final books = soup.findAll(
      'div',
      class_: 'h-[125px] flex flex-col justify-center',
      limit: resultCount < searchRequest.limit
          ? resultCount
          : searchRequest.limit,
    );

    return convertListToModelWithErrorCount<Book>(
      [...books],
      getBookfromAnna,
    ).results;
  } catch (e) {
    throw Exception('Error finding books');
  }
}