79 lines
2.1 KiB
Rust
79 lines
2.1 KiB
Rust
use crate::shared::database::traits::scraping_repository::ScrapingRepository;
|
|
use crate::shared::errors::AppError;
|
|
use crate::shared::utils::fetch_html_with_retry;
|
|
use crate::shared::utils::web::scraping_urls::{get_komik_api_url, get_komik_url};
|
|
use async_trait::async_trait;
|
|
|
|
pub struct KomikRepository;
|
|
|
|
impl Default for KomikRepository {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
impl KomikRepository {
|
|
pub fn new() -> Self {
|
|
Self
|
|
}
|
|
|
|
pub fn api_url(&self) -> String {
|
|
get_komik_api_url()
|
|
}
|
|
|
|
pub fn base_url(&self) -> String {
|
|
get_komik_url()
|
|
}
|
|
|
|
pub fn genre_url(&self, genre_slug: &str, page: u32) -> String {
|
|
if page == 1 {
|
|
format!("{}/genre/{}/", self.api_url(), genre_slug)
|
|
} else {
|
|
format!("{}/genre/{}/page/{}/", self.api_url(), genre_slug, page)
|
|
}
|
|
}
|
|
|
|
pub fn search_url(&self, query: &str, page: u32) -> String {
|
|
if page == 1 {
|
|
format!("{}/search/{}/", self.api_url(), query)
|
|
} else {
|
|
format!("{}/search/{}/page/{}/", self.api_url(), query, page)
|
|
}
|
|
}
|
|
|
|
pub fn manga_list_url(&self, page: u32) -> String {
|
|
format!("{}/manga/page/{}/?tipe=manga", self.api_url(), page)
|
|
}
|
|
|
|
pub fn manhua_list_url(&self, page: u32) -> String {
|
|
format!("{}/manga/page/{}/?tipe=manhua", self.api_url(), page)
|
|
}
|
|
|
|
pub fn manhwa_list_url(&self, page: u32) -> String {
|
|
format!("{}/manga/page/{}/?tipe=manhwa", self.api_url(), page)
|
|
}
|
|
|
|
pub fn popular_list_url(&self, page: u32) -> String {
|
|
format!(
|
|
"{}/manga/page/{}/?orderby=meta_value_num",
|
|
self.api_url(),
|
|
page
|
|
)
|
|
}
|
|
|
|
pub fn detail_url(&self, slug: &str) -> String {
|
|
format!("{}/manga/{}/", self.base_url(), slug)
|
|
}
|
|
|
|
pub fn chapter_url(&self, chapter_url: &str) -> String {
|
|
format!("{}/{}", self.base_url(), chapter_url)
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl ScrapingRepository for KomikRepository {
|
|
async fn fetch_html(&self, url: &str) -> Result<String, AppError> {
|
|
fetch_html_with_retry(url).await
|
|
}
|
|
}
|