Attempt to also index all posts made by posters that previously posted in Russian
I don't know if this will work well though, performance-wise. It's basically going to now do a query per post, which may or may not be a great idea
This commit is contained in:
parent
8ad19f6fa5
commit
556f939774
|
@ -14,11 +14,25 @@ use crate::services::database::{self, Database};
|
|||
/// An algorithm that serves posts written in Russian by people living in Netherlands
|
||||
pub struct Nederlandskie {
|
||||
language_detector: Arc<LanguageDetector>,
|
||||
database: Arc<Database>,
|
||||
}
|
||||
|
||||
impl Nederlandskie {
|
||||
pub fn new(language_detector: Arc<LanguageDetector>) -> Self {
|
||||
Self { language_detector }
|
||||
pub fn new(language_detector: Arc<LanguageDetector>, database: Arc<Database>) -> Self {
|
||||
Self {
|
||||
language_detector,
|
||||
database,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Nederlandskie {
|
||||
fn is_post_in_russian(&self, post: &bluesky::PostRecord) -> bool {
|
||||
self.language_detector.detect_language_of(&post.text) == Some(Russian)
|
||||
}
|
||||
|
||||
async fn is_profile_residing_in_netherlands(&self, did: &str) -> Result<bool> {
|
||||
Ok(self.database.is_profile_in_this_country(did, "nl").await? == Some(true))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,10 +40,11 @@ impl Nederlandskie {
|
|||
impl Algo for Nederlandskie {
|
||||
async fn should_index_post(
|
||||
&self,
|
||||
_author_did: &str,
|
||||
author_did: &str,
|
||||
post: &bluesky::PostRecord,
|
||||
) -> Result<bool> {
|
||||
Ok(self.language_detector.detect_language_of(&post.text) == Some(Russian))
|
||||
Ok(self.is_post_in_russian(&post)
|
||||
|| self.is_profile_residing_in_netherlands(author_did).await?)
|
||||
}
|
||||
|
||||
async fn fetch_posts(
|
||||
|
|
|
@ -36,7 +36,10 @@ async fn main() -> Result<()> {
|
|||
|
||||
let algos = Arc::new(
|
||||
AlgosBuilder::new()
|
||||
.add("nederlandskie", Nederlandskie::new(language_detector))
|
||||
.add(
|
||||
"nederlandskie",
|
||||
Nederlandskie::new(language_detector, database.clone()),
|
||||
)
|
||||
.build(),
|
||||
);
|
||||
|
||||
|
|
|
@ -192,6 +192,27 @@ impl Database {
|
|||
Ok(true)
|
||||
}
|
||||
|
||||
pub async fn is_profile_in_this_country(
|
||||
&self,
|
||||
did: &str,
|
||||
country: &str,
|
||||
) -> Result<Option<bool>> {
|
||||
let mut params = Parameters::new();
|
||||
|
||||
Ok(query(
|
||||
&select("likely_country_of_living")
|
||||
.from("Profile")
|
||||
.where_(format!("did = {}", params.next()))
|
||||
.where_("has_been_processed = TRUE")
|
||||
.to_string(),
|
||||
)
|
||||
.bind(did)
|
||||
.map(|r: PgRow| r.get("likely_country_of_living"))
|
||||
.map(|c: String| c == country)
|
||||
.fetch_optional(&self.connection_pool)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn fetch_subscription_cursor(&self, did: &str) -> Result<Option<i32>> {
|
||||
let mut params = Parameters::new();
|
||||
|
||||
|
|
Loading…
Reference in New Issue