diff --git a/admin_frontend/src/ext.rs b/admin_frontend/src/ext/api.rs similarity index 63% rename from admin_frontend/src/ext.rs rename to admin_frontend/src/ext/api.rs index 9b822a18..7f191142 100644 --- a/admin_frontend/src/ext.rs +++ b/admin_frontend/src/ext/api.rs @@ -1,5 +1,6 @@ use database_entity::dto::AFWorkspace; -use serde::Deserialize; + +use super::entities::{JsonResponse, UserUsageLimit}; pub async fn get_user_workspace_count( auth_header: &str, @@ -36,13 +37,22 @@ pub async fn get_user_workspace_limit( Ok(c as u32) } -#[derive(Debug, Deserialize)] -pub struct JsonResponse { - pub code: u16, - pub data: T, -} +pub async fn get_workspace_limit( + auth_header: &str, + appflowy_cloud_base_url: &str, +) -> Result { + let http_client = reqwest::Client::new(); + let resp = http_client + .get(format!("{}/api/user/limit", appflowy_cloud_base_url)) + .header("Authorization", format!("Bearer {}", auth_header)) + .send() + .await?; -#[derive(Deserialize)] -pub struct UserUsageLimit { - pub workspace_count: Option, + let res = resp.json::>().await?; + let b = res.data; + let c = b.workspace_count.unwrap_or({ + tracing::warn!("workspace_count is None, returning 0"); + 0 + }); + Ok(c as u32) } diff --git a/admin_frontend/src/ext/entities.rs b/admin_frontend/src/ext/entities.rs new file mode 100644 index 00000000..5543a2ff --- /dev/null +++ b/admin_frontend/src/ext/entities.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize)] +pub struct JsonResponse { + pub code: u16, + pub data: T, +} + +#[derive(Deserialize)] +pub struct UserUsageLimit { + pub workspace_count: Option, +} + +#[derive(Serialize)] +pub struct WorkspaceUsage { + pub name: String, + pub member_count: i64, + pub member_limit: i64, + pub total_doc_size: String, + pub total_blob_size: String, + pub total_blob_limit: String, +} diff --git a/admin_frontend/src/ext/mod.rs b/admin_frontend/src/ext/mod.rs new file mode 100644 index 00000000..2ebf5d4d --- /dev/null +++ b/admin_frontend/src/ext/mod.rs @@ -0,0 +1,2 @@ +pub mod api; +pub mod entities; diff --git a/admin_frontend/src/templates.rs b/admin_frontend/src/templates.rs index e5dc45c9..96292442 100644 --- a/admin_frontend/src/templates.rs +++ b/admin_frontend/src/templates.rs @@ -1,6 +1,8 @@ use askama::Template; use gotrue_entity::{dto::User, sso::SSOProvider}; +use crate::ext::entities::WorkspaceUsage; + #[derive(Template)] #[template(path = "components/user_usage.html")] pub struct UserUsage { @@ -8,15 +10,11 @@ pub struct UserUsage { pub workspace_limit: u32, } +// ./../templates/components/workspace_usage.html #[derive(Template)] #[template(path = "components/workspace_usage.html")] -pub struct WorkspaceUsage<'a> { - pub name: &'a str, - pub member_count: u32, - pub member_limit: u32, - pub total_doc_size: &'a str, - pub total_blob_size: &'a str, - pub total_blob_limit: &'a str, +pub struct WorkspaceUsageList { + pub workspace_usages: Vec, } #[derive(Template)] diff --git a/admin_frontend/src/web_app.rs b/admin_frontend/src/web_app.rs index 5d5806a6..47ee5b4e 100644 --- a/admin_frontend/src/web_app.rs +++ b/admin_frontend/src/web_app.rs @@ -1,5 +1,6 @@ use crate::error::WebAppError; -use crate::ext::{get_user_workspace_count, get_user_workspace_limit}; +use crate::ext::api::{get_user_workspace_count, get_user_workspace_limit}; +use crate::ext::entities::WorkspaceUsage; use crate::session::UserSession; use askama::Template; use axum::extract::{Path, State}; @@ -122,15 +123,30 @@ pub async fn user_usage_handler( }) } -pub async fn workspace_usage_handler(session: UserSession) -> Result, WebAppError> { - render_template(templates::WorkspaceUsage { - name: "test", - member_count: 6, - member_limit: 7, - total_doc_size: &human_bytes(987654), - total_blob_size: &human_bytes(9876543), - total_blob_limit: &human_bytes(98765432), - }) +pub async fn workspace_usage_handler( + State(app_state): State, + session: UserSession, +) -> Result, WebAppError> { + let workspace_usages = vec![ + WorkspaceUsage { + name: "test".to_owned(), + member_count: 6, + member_limit: 7, + total_doc_size: human_bytes(987654), + total_blob_size: human_bytes(9876543), + total_blob_limit: human_bytes(98765432), + }, + WorkspaceUsage { + name: "test".to_owned(), + member_count: 6, + member_limit: 7, + total_doc_size: human_bytes(987654), + total_blob_size: human_bytes(9876543), + total_blob_limit: human_bytes(98765432), + }, + ]; + + render_template(templates::WorkspaceUsageList { workspace_usages }) } pub async fn admin_users_create_handler() -> Result, WebAppError> { diff --git a/admin_frontend/templates/components/workspace_usage.html b/admin_frontend/templates/components/workspace_usage.html index f555dd24..1d4ce91f 100644 --- a/admin_frontend/templates/components/workspace_usage.html +++ b/admin_frontend/templates/components/workspace_usage.html @@ -10,13 +10,17 @@ Object Storage Limit - - {{ name|escape }} - {{ member_count|escape }} - {{ member_limit|escape }} - {{ total_doc_size|escape }} - {{ total_blob_size|escape }} - {{ total_blob_limit|escape }} - + + {% for workspace_usage in workspace_usages %} + + {{ workspace_usage.name|escape }} + {{ workspace_usage.member_count|escape }} + {{ workspace_usage.member_limit|escape }} + {{ workspace_usage.total_doc_size|escape }} + {{ workspace_usage.total_blob_size|escape }} + {{ workspace_usage.total_blob_limit|escape }} + + {% endfor %} +