feat: index words on user and repo creation and rm from index when they

are deleted
This commit is contained in:
Aravinth Manivannan 2023-03-02 13:24:35 +05:30
parent f53a0afada
commit a22defdab1
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88
3 changed files with 41 additions and 3 deletions

View file

@ -66,6 +66,7 @@ pub async fn adding_forge_works<'a, T: SCDatabase>(
.user_exists(add_user_msg.username, Some(&add_user_msg.url)) .user_exists(add_user_msg.username, Some(&add_user_msg.url))
.await .await
.unwrap()); .unwrap());
assert!(db.is_word_mini_indexed(&add_user_msg2.username).await.unwrap());
// add repository // add repository
db.create_repository(&add_repo_msg).await.unwrap(); db.create_repository(&add_repo_msg).await.unwrap();
@ -74,6 +75,10 @@ pub async fn adding_forge_works<'a, T: SCDatabase>(
.repository_exists(add_repo_msg.name, add_repo_msg.owner, &add_repo_msg.url) .repository_exists(add_repo_msg.name, add_repo_msg.owner, &add_repo_msg.url)
.await .await
.unwrap()); .unwrap());
assert!(db.is_word_mini_indexed(&add_repo_msg.owner).await.unwrap());
assert!(db.is_word_mini_indexed(&add_repo_msg.name).await.unwrap());
assert!(db.is_word_mini_indexed(&add_repo_msg.description.unwrap()).await.unwrap());
assert!(db.is_word_mini_indexed(&add_repo_msg.website.unwrap()).await.unwrap());
assert!(db.get_all_repositories(00, 1000).await.unwrap().len() >= 1); assert!(db.get_all_repositories(00, 1000).await.unwrap().len() >= 1);
let repo_search = db.search_repository(add_repo_msg.name).await.unwrap(); let repo_search = db.search_repository(add_repo_msg.name).await.unwrap();
@ -137,5 +142,5 @@ pub async fn mini_index_helper<T: SCDatabase>(db: &T) {
} }
let mini_index = db.export_mini_index().await.unwrap(); let mini_index = db.export_mini_index().await.unwrap();
assert_eq!(mini_index, expected_mini_index); assert!(mini_index.contains(expected_mini_index));
} }

View file

@ -273,6 +273,7 @@ impl SCDatabase for Database {
.execute(&self.pool) .execute(&self.pool)
.await .await
.map_err(|e| DBError::DBError(Box::new(e)))?; .map_err(|e| DBError::DBError(Box::new(e)))?;
self.rm_word_from_mini_index(&url).await?;
Ok(()) Ok(())
} }
@ -318,6 +319,8 @@ impl SCDatabase for Database {
.map_err(map_register_err)?; .map_err(map_register_err)?;
} }
self.add_word_to_mini_index(&url).await?;
Ok(()) Ok(())
} }
@ -478,6 +481,7 @@ impl SCDatabase for Database {
.await .await
.map_err(map_register_err)?; .map_err(map_register_err)?;
self.new_fts_user(u.username).await?; self.new_fts_user(u.username).await?;
self.add_word_to_mini_index(u.username).await?;
Ok(()) Ok(())
} }
@ -600,6 +604,13 @@ impl SCDatabase for Database {
self.new_fts_repositories(r.name, r.description, r.website, r.html_link) self.new_fts_repositories(r.name, r.description, r.website, r.html_link)
.await?; .await?;
if let Some(description) = r.description {
self.add_word_to_mini_index(description).await?;
}
self.add_word_to_mini_index(r.name).await?;
if let Some(website) = r.website {
self.add_word_to_mini_index(website).await?;
}
if let Some(topics) = &r.tags { if let Some(topics) = &r.tags {
for topic in topics.iter() { for topic in topics.iter() {
@ -612,6 +623,7 @@ impl SCDatabase for Database {
.map_err(map_register_err)?; .map_err(map_register_err)?;
self.new_fts_topic(topic).await?; self.new_fts_topic(topic).await?;
self.add_word_to_mini_index(topic).await?;
sqlx::query!( sqlx::query!(
" "
@ -634,8 +646,12 @@ impl SCDatabase for Database {
/// delete user /// delete user
async fn delete_user(&self, username: &str, url: &Url) -> DBResult<()> { async fn delete_user(&self, username: &str, url: &Url) -> DBResult<()> {
let user = self.get_user(username, &url).await?;
self.rm_word_from_mini_index(&user.username).await?;
let url = db_core::clean_url(url); let url = db_core::clean_url(url);
// TODO fts delete user // TODO fts delete user
sqlx::query!( sqlx::query!(
" DELETE FROM starchart_users WHERE username = $1 AND " DELETE FROM starchart_users WHERE username = $1 AND
hostname_id = (SELECT ID FROM starchart_forges WHERE hostname = $2)", hostname_id = (SELECT ID FROM starchart_forges WHERE hostname = $2)",
@ -652,6 +668,23 @@ impl SCDatabase for Database {
async fn delete_repository(&self, owner: &str, name: &str, url: &Url) -> DBResult<()> { async fn delete_repository(&self, owner: &str, name: &str, url: &Url) -> DBResult<()> {
let url = db_core::clean_url(url); let url = db_core::clean_url(url);
// TODO fts delete repo // TODO fts delete repo
let repo = self.search_repository(&url).await?;
if !repo.is_empty() {
if let Some(r) = repo
.iter()
.find(|r| r.username == owner && r.name == name && r.url == url)
{
if let Some(description) = &r.description {
self.add_word_to_mini_index(description).await?;
}
self.add_word_to_mini_index(&r.name).await?;
if let Some(website) = &r.website {
self.add_word_to_mini_index(website).await?;
}
}
}
sqlx::query!( sqlx::query!(
" DELETE FROM starchart_repositories " DELETE FROM starchart_repositories
WHERE WHERE

View file

@ -73,8 +73,8 @@ async fn everything_works() {
name: REPO_NAME, name: REPO_NAME,
tags: Some(TAGS.into()), tags: Some(TAGS.into()),
owner: USERNAME, owner: USERNAME,
website: None, website: "https://starcahrt-sqlite-test.example.org".into(),
description: None, description: "starchart sqlite test repo sescription".into(),
url, url,
import: false, import: false,
}; };