using MangaReader.Core.HttpService; using System.Text.Json; namespace MangaReader.Core.Search; public abstract class MangaSearchProviderBase(IHttpService httpService) : IMangaSearchProvider { private static readonly JsonSerializerOptions _jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; public async Task SearchAsync(string keyword) { T? searchResult = await GetSearchResultAsync(keyword); if (searchResult == null) return []; return GetSearchResult(searchResult); } private async Task GetSearchResultAsync(string keyword) { string url = GetSearchUrl(keyword); string response = await httpService.GetStringAsync(url); return JsonSerializer.Deserialize(response, _jsonSerializerOptions); } protected abstract string GetSearchUrl(string keyword); protected abstract MangaSearchResult[] GetSearchResult(T searchResult); }