using MangaReader.Core.HttpService; using System.Text.Json; namespace MangaReader.Core.WebSearch; public abstract class MangaWebSearchBase(IHttpService httpService) : IMangaWebSearch { private static 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); }