mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 02:17:46 +08:00
feat: paginate provider keys from backend
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
pub(crate) use self::{
|
||||
create::build_admin_create_provider_key_record, payload::build_admin_provider_keys_payload,
|
||||
create::build_admin_create_provider_key_record,
|
||||
payload::{build_admin_provider_keys_page_payload, build_admin_provider_keys_payload},
|
||||
update::build_admin_update_provider_key_record,
|
||||
};
|
||||
|
||||
|
||||
@@ -3,14 +3,15 @@ use crate::provider_key_auth::provider_key_effective_api_formats;
|
||||
use aether_data_contracts::repository::provider_catalog::{
|
||||
ProviderCatalogKeyListOrder, ProviderCatalogKeyListQuery,
|
||||
};
|
||||
use serde_json::{json, Value};
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
pub(crate) async fn build_admin_provider_keys_payload(
|
||||
async fn build_admin_provider_key_items_payload(
|
||||
state: &AdminAppState<'_>,
|
||||
provider_id: &str,
|
||||
skip: usize,
|
||||
limit: usize,
|
||||
) -> Option<serde_json::Value> {
|
||||
) -> Option<(Vec<Value>, usize)> {
|
||||
if !state.has_provider_catalog_data_reader() {
|
||||
return None;
|
||||
}
|
||||
@@ -40,20 +41,47 @@ pub(crate) async fn build_admin_provider_keys_payload(
|
||||
.ok()
|
||||
.map(|duration| duration.as_secs())
|
||||
.unwrap_or(0);
|
||||
Some(serde_json::Value::Array(
|
||||
key_page
|
||||
.items
|
||||
.into_iter()
|
||||
.map(|key| {
|
||||
let api_formats =
|
||||
provider_key_effective_api_formats(&key, &provider.provider_type, &endpoints);
|
||||
state.build_admin_provider_key_response(
|
||||
&key,
|
||||
&provider.provider_type,
|
||||
&api_formats,
|
||||
now_unix_secs,
|
||||
)
|
||||
})
|
||||
.collect(),
|
||||
))
|
||||
let items = key_page
|
||||
.items
|
||||
.into_iter()
|
||||
.map(|key| {
|
||||
let api_formats =
|
||||
provider_key_effective_api_formats(&key, &provider.provider_type, &endpoints);
|
||||
state.build_admin_provider_key_response(
|
||||
&key,
|
||||
&provider.provider_type,
|
||||
&api_formats,
|
||||
now_unix_secs,
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
Some((items, key_page.total))
|
||||
}
|
||||
|
||||
pub(crate) async fn build_admin_provider_keys_payload(
|
||||
state: &AdminAppState<'_>,
|
||||
provider_id: &str,
|
||||
skip: usize,
|
||||
limit: usize,
|
||||
) -> Option<Value> {
|
||||
let (items, _) =
|
||||
build_admin_provider_key_items_payload(state, provider_id, skip, limit).await?;
|
||||
Some(Value::Array(items))
|
||||
}
|
||||
|
||||
pub(crate) async fn build_admin_provider_keys_page_payload(
|
||||
state: &AdminAppState<'_>,
|
||||
provider_id: &str,
|
||||
page: usize,
|
||||
page_size: usize,
|
||||
) -> Option<Value> {
|
||||
let skip = page.saturating_sub(1).saturating_mul(page_size);
|
||||
let (items, total) =
|
||||
build_admin_provider_key_items_payload(state, provider_id, skip, page_size).await?;
|
||||
Some(json!({
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
"keys": items,
|
||||
}))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user