39 lines
1.7 KiB
Rust
39 lines
1.7 KiB
Rust
|
use log::error;
|
||
|
use sea_orm::ColumnTrait;
|
||
|
use sea_orm::{DatabaseConnection, EntityTrait, QueryFilter};
|
||
|
use asklyphe_common::nats::authservice::deranklist::DerankEntry;
|
||
|
use entity::{derank_list_entry, derank_list_subscription};
|
||
|
|
||
|
/// given a user id, finds and returns all active derank list entries, regardless of list
|
||
|
/// will just return an empty list if no derank entries exist for that user, should only
|
||
|
/// return an error if the database returns an error
|
||
|
pub async fn user_all_active_derank_entries(db: &DatabaseConnection, user_id: String) -> Result<Vec<DerankEntry>, ()> {
|
||
|
let user_subscribed_derank_lists = derank_list_subscription::Entity::find()
|
||
|
.filter(derank_list_subscription::Column::UserId.eq(user_id))
|
||
|
.filter(derank_list_subscription::Column::Active.eq(true))
|
||
|
.all(db).await
|
||
|
.map_err(|e| {
|
||
|
error!("DATABASE ERROR WHILE USERALLDERANKENTRIES (get user): {e}");
|
||
|
})?;
|
||
|
|
||
|
let mut derank_entries: Vec<DerankEntry> = vec![];
|
||
|
for list in user_subscribed_derank_lists {
|
||
|
if list.active {
|
||
|
// should always be true but just being safe
|
||
|
derank_entries.extend(derank_list_entry::Entity::find()
|
||
|
.filter(derank_list_entry::Column::DerankListId.eq(&list.id))
|
||
|
.all(db).await.map_err(|e| {
|
||
|
error!("DATABASE ERROR WHILE USERALLDERANKENTRIES (get entries): {e}");
|
||
|
})?.into_iter().map(|v| {
|
||
|
DerankEntry {
|
||
|
urlmatch: v.url_match,
|
||
|
and: v.and,
|
||
|
unless: v.unless,
|
||
|
multiplier: v.multiplier,
|
||
|
comment: v.comment,
|
||
|
}
|
||
|
}));
|
||
|
}
|
||
|
}
|
||
|
Ok(derank_entries)
|
||
|
}
|