Files
BokbonSample/BokBonCheck/SearchModel/BookSearchService.cs
2025-06-29 22:05:43 +09:00

81 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
namespace BokBonCheck
{
public class BookSearchResult
{
public string SiteName { get; set; }
public int BookCount { get; set; }
public string SearchTerm { get; set; }
public DateTime SearchTime { get; set; }
public string ErrorMessage { get; set; }
public bool IsSuccess { get; set; }
}
public class BookSearchService
{
private readonly List<ILibrarySearcher> _searchers;
public BookSearchService()
{
_searchers = new List<ILibrarySearcher>
{
new KwangjuCityLibrarySearcher_central(),
new KwangjuCityLibrarySearcher_choisangjun(),
new KwangjuCityLibrarySearcher_dagachi(),
new KwangjuCityLibrarySearcher_Indi(),
new KwangjuCityLibrarySearcher_Student(),
new KwangjuCityLibrarySearcher_Kumho(),
new NamguLibrarySearcher_Children(),
new NamguLibrarySearcher_Hyocheon(),
new NamguLibrarySearcher_Munhwa(),
new NamguLibrarySearcher_Purungil(),
new NamguLibrarySearcher_Smart(),
};
}
public async Task<List<BookSearchResult>> SearchBooksAsync(string searchTerm)
{
var results = new List<BookSearchResult>();
foreach (var searcher in _searchers)
{
var result = await searcher.SearchAsync(searchTerm);
results.Add(result);
}
return results;
}
public void AddSearcher(ILibrarySearcher searcher)
{
if (!_searchers.Any(s => s.SiteName == searcher.SiteName))
{
_searchers.Add(searcher);
}
}
public void RemoveSearcher(string siteName)
{
var searcher = _searchers.FirstOrDefault(s => s.SiteName == siteName);
if (searcher != null)
{
_searchers.Remove(searcher);
}
}
public List<string> GetAvailableSites()
{
return _searchers.Select(s => s.SiteName).ToList();
}
public void ClearSearchers()
{
_searchers.Clear();
}
}
}