You've already forked AstralRinth
forked from didirus/AstralRinth
Rewrite the app (#23)
* chore: Removed everything not needed, and added base for rewrite feat(error_handling): Added 404 general cache feat(index): Added informations about the app in the / route. * feat(indexing): Brought back the indexing, with conditions to make it easier * fix: Fixed build error with a forgotten call * feat: Add Docker development enviroment (#19) * ci: add a *lot* of new actions * fix: rename linting action * fix: invalid yaml begone(?) * ci: Added cache to speed up build times * fix(ci): 🦀ed the yaml errors * fix(ci): fixed a missing hyphen * ci: Added matrix of rust versions, and changed way to install rust toolchain * fix(ci): Added names to build with the matrix so it's easier to find the source of the problem * style(ci): Added eof lines * refactor: Finished moving the search.rs file to a separate module. * Search Endpoint * refactor: Moved around functions and struct for a better understanding of what it does. * chore: Change env default settings to resolve conversation * refactor: Removed #[use_macros] fix: Fixed meilisearch address from env * chore: Added email to Aeledfyr * fix: Brought back the dotenv variables * style: Ran `cargo fmt` Co-authored-by: Charalampos Fanoulis <charalampos.fanoulis@gmail.com> Co-authored-by: Jai A <jai.a@tuta.io>
This commit is contained in:
57
src/search/indexing/local_import.rs
Normal file
57
src/search/indexing/local_import.rs
Normal file
@@ -0,0 +1,57 @@
|
||||
use bson::doc;
|
||||
use bson::Bson;
|
||||
use futures::StreamExt;
|
||||
use log::info;
|
||||
use meilisearch_sdk::client::Client;
|
||||
|
||||
use crate::database::models::Item;
|
||||
use crate::database::{Mod, Version};
|
||||
|
||||
use crate::search::{SearchError, SearchMod, SearchRequest};
|
||||
|
||||
pub async fn index_local(client: mongodb::Client) -> Result<Vec<SearchMod>, SearchError> {
|
||||
info!("Indexing local mods!");
|
||||
|
||||
let mut docs_to_add: Vec<SearchMod> = vec![];
|
||||
|
||||
let db = client.database("modrinth");
|
||||
|
||||
let mods = db.collection("mods");
|
||||
let versions = db.collection("versions");
|
||||
|
||||
let mut results = mods.find(None, None).await?;
|
||||
|
||||
while let Some(unparsed_result) = results.next().await {
|
||||
let result: Mod = *Mod::from_doc(unparsed_result?)?;
|
||||
|
||||
let mut mod_versions = versions.find(doc! { "mod_id": result.id}, None).await?;
|
||||
|
||||
let mut mod_game_versions = vec![];
|
||||
|
||||
while let Some(unparsed_version) = mod_versions.next().await {
|
||||
let mut version: Version = *Version::from_doc(unparsed_version?)?;
|
||||
mod_game_versions.append(&mut version.game_versions);
|
||||
}
|
||||
|
||||
docs_to_add.push(SearchMod {
|
||||
mod_id: result.id,
|
||||
author: result.author,
|
||||
title: result.title,
|
||||
description: result.description,
|
||||
keywords: result.categories,
|
||||
versions: mod_game_versions,
|
||||
downloads: result.downloads,
|
||||
page_url: "".to_string(),
|
||||
icon_url: result.icon_path,
|
||||
author_url: "".to_string(),
|
||||
date_created: "".to_string(),
|
||||
created: 0,
|
||||
date_modified: "".to_string(),
|
||||
updated: 0,
|
||||
latest_version: "".to_string(),
|
||||
empty: String::from("{}{}{}"),
|
||||
});
|
||||
}
|
||||
|
||||
Ok(docs_to_add)
|
||||
}
|
||||
Reference in New Issue
Block a user