You've already forked AstralRinth
forked from didirus/AstralRinth
7a6ecd86c6
* 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>
58 lines
1.7 KiB
Rust
58 lines
1.7 KiB
Rust
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)
|
|
}
|