treewide: fix various UI bugs; optimize crypto dependencies & format
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: If8fe8b38c1d9c4fecd40ff71f88d2ae06a6a6964
This commit is contained in:
parent
764aafa88d
commit
3ccddce7fd
178 changed files with 58342 additions and 54241 deletions
|
|
@ -1,87 +1,88 @@
|
|||
use axum::Json;
|
||||
use axum::extract::{Query, State};
|
||||
use axum::{
|
||||
Json,
|
||||
extract::{Query, State},
|
||||
};
|
||||
use pinakes_core::{
|
||||
model::Pagination,
|
||||
search::{SearchRequest, SortOrder, parse_search_query},
|
||||
};
|
||||
|
||||
use crate::dto::*;
|
||||
use crate::error::ApiError;
|
||||
use crate::state::AppState;
|
||||
|
||||
use pinakes_core::model::Pagination;
|
||||
use pinakes_core::search::{SearchRequest, SortOrder, parse_search_query};
|
||||
use crate::{dto::*, error::ApiError, state::AppState};
|
||||
|
||||
fn resolve_sort(sort: Option<&str>) -> SortOrder {
|
||||
match sort {
|
||||
Some("date_asc") => SortOrder::DateAsc,
|
||||
Some("date_desc") => SortOrder::DateDesc,
|
||||
Some("name_asc") => SortOrder::NameAsc,
|
||||
Some("name_desc") => SortOrder::NameDesc,
|
||||
Some("size_asc") => SortOrder::SizeAsc,
|
||||
Some("size_desc") => SortOrder::SizeDesc,
|
||||
_ => SortOrder::Relevance,
|
||||
}
|
||||
match sort {
|
||||
Some("date_asc") => SortOrder::DateAsc,
|
||||
Some("date_desc") => SortOrder::DateDesc,
|
||||
Some("name_asc") => SortOrder::NameAsc,
|
||||
Some("name_desc") => SortOrder::NameDesc,
|
||||
Some("size_asc") => SortOrder::SizeAsc,
|
||||
Some("size_desc") => SortOrder::SizeDesc,
|
||||
_ => SortOrder::Relevance,
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn search(
|
||||
State(state): State<AppState>,
|
||||
Query(params): Query<SearchParams>,
|
||||
State(state): State<AppState>,
|
||||
Query(params): Query<SearchParams>,
|
||||
) -> Result<Json<SearchResponse>, ApiError> {
|
||||
if params.q.len() > 2048 {
|
||||
return Err(ApiError(
|
||||
pinakes_core::error::PinakesError::InvalidOperation(
|
||||
"search query exceeds maximum length of 2048 characters".into(),
|
||||
),
|
||||
));
|
||||
}
|
||||
if params.q.len() > 2048 {
|
||||
return Err(ApiError(
|
||||
pinakes_core::error::PinakesError::InvalidOperation(
|
||||
"search query exceeds maximum length of 2048 characters".into(),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
let query = parse_search_query(¶ms.q)?;
|
||||
let sort = resolve_sort(params.sort.as_deref());
|
||||
let query = parse_search_query(¶ms.q)?;
|
||||
let sort = resolve_sort(params.sort.as_deref());
|
||||
|
||||
let request = SearchRequest {
|
||||
query,
|
||||
sort,
|
||||
pagination: Pagination::new(
|
||||
params.offset.unwrap_or(0),
|
||||
params.limit.unwrap_or(50).min(1000),
|
||||
None,
|
||||
),
|
||||
};
|
||||
let request = SearchRequest {
|
||||
query,
|
||||
sort,
|
||||
pagination: Pagination::new(
|
||||
params.offset.unwrap_or(0),
|
||||
params.limit.unwrap_or(50).min(1000),
|
||||
None,
|
||||
),
|
||||
};
|
||||
|
||||
let results = state.storage.search(&request).await?;
|
||||
let results = state.storage.search(&request).await?;
|
||||
|
||||
Ok(Json(SearchResponse {
|
||||
items: results.items.into_iter().map(MediaResponse::from).collect(),
|
||||
total_count: results.total_count,
|
||||
}))
|
||||
Ok(Json(SearchResponse {
|
||||
items: results.items.into_iter().map(MediaResponse::from).collect(),
|
||||
total_count: results.total_count,
|
||||
}))
|
||||
}
|
||||
|
||||
pub async fn search_post(
|
||||
State(state): State<AppState>,
|
||||
Json(body): Json<SearchRequestBody>,
|
||||
State(state): State<AppState>,
|
||||
Json(body): Json<SearchRequestBody>,
|
||||
) -> Result<Json<SearchResponse>, ApiError> {
|
||||
if body.q.len() > 2048 {
|
||||
return Err(ApiError(
|
||||
pinakes_core::error::PinakesError::InvalidOperation(
|
||||
"search query exceeds maximum length of 2048 characters".into(),
|
||||
),
|
||||
));
|
||||
}
|
||||
if body.q.len() > 2048 {
|
||||
return Err(ApiError(
|
||||
pinakes_core::error::PinakesError::InvalidOperation(
|
||||
"search query exceeds maximum length of 2048 characters".into(),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
let query = parse_search_query(&body.q)?;
|
||||
let sort = resolve_sort(body.sort.as_deref());
|
||||
let query = parse_search_query(&body.q)?;
|
||||
let sort = resolve_sort(body.sort.as_deref());
|
||||
|
||||
let request = SearchRequest {
|
||||
query,
|
||||
sort,
|
||||
pagination: Pagination::new(
|
||||
body.offset.unwrap_or(0),
|
||||
body.limit.unwrap_or(50).min(1000),
|
||||
None,
|
||||
),
|
||||
};
|
||||
let request = SearchRequest {
|
||||
query,
|
||||
sort,
|
||||
pagination: Pagination::new(
|
||||
body.offset.unwrap_or(0),
|
||||
body.limit.unwrap_or(50).min(1000),
|
||||
None,
|
||||
),
|
||||
};
|
||||
|
||||
let results = state.storage.search(&request).await?;
|
||||
let results = state.storage.search(&request).await?;
|
||||
|
||||
Ok(Json(SearchResponse {
|
||||
items: results.items.into_iter().map(MediaResponse::from).collect(),
|
||||
total_count: results.total_count,
|
||||
}))
|
||||
Ok(Json(SearchResponse {
|
||||
items: results.items.into_iter().map(MediaResponse::from).collect(),
|
||||
total_count: results.total_count,
|
||||
}))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue