feat: total document usage
This commit is contained in:
parent
9093363b4f
commit
0048533914
|
|
@ -2,14 +2,12 @@ use crate::error::WebAppError;
|
||||||
use crate::ext::api::{
|
use crate::ext::api::{
|
||||||
get_user_workspace_count, get_user_workspace_limit, get_user_workspace_usages,
|
get_user_workspace_count, get_user_workspace_limit, get_user_workspace_usages,
|
||||||
};
|
};
|
||||||
use crate::ext::entities::WorkspaceUsageLimits;
|
|
||||||
use crate::session::UserSession;
|
use crate::session::UserSession;
|
||||||
use askama::Template;
|
use askama::Template;
|
||||||
use axum::extract::{Path, State};
|
use axum::extract::{Path, State};
|
||||||
use axum::response::Result;
|
use axum::response::Result;
|
||||||
use axum::{response::Html, routing::get, Router};
|
use axum::{response::Html, routing::get, Router};
|
||||||
use gotrue_entity::dto::User;
|
use gotrue_entity::dto::User;
|
||||||
use human_bytes::human_bytes;
|
|
||||||
|
|
||||||
use crate::{templates, AppState};
|
use crate::{templates, AppState};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -636,3 +636,25 @@ pub async fn select_permission_from_role_id(
|
||||||
.await?;
|
.await?;
|
||||||
Ok(permission)
|
Ok(permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn select_workspace_total_collab_bytes(
|
||||||
|
pool: &PgPool,
|
||||||
|
workspace_id: &Uuid,
|
||||||
|
) -> Result<i64, AppError> {
|
||||||
|
let sum = sqlx::query_scalar!(
|
||||||
|
r#"
|
||||||
|
SELECT SUM(len) FROM af_collab WHERE workspace_id = $1
|
||||||
|
"#,
|
||||||
|
workspace_id
|
||||||
|
)
|
||||||
|
.fetch_one(pool)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
match sum {
|
||||||
|
Some(s) => Ok(s),
|
||||||
|
None => Err(AppError::RecordNotFound(format!(
|
||||||
|
"Failed to get total collab bytes for workspace_id: {}",
|
||||||
|
workspace_id
|
||||||
|
))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -849,9 +849,12 @@ async fn get_workspace_usage_handler(
|
||||||
workspace_id: web::Path<Uuid>,
|
workspace_id: web::Path<Uuid>,
|
||||||
state: Data<AppState>,
|
state: Data<AppState>,
|
||||||
) -> Result<Json<AppResponse<WorkspaceUsage>>> {
|
) -> Result<Json<AppResponse<WorkspaceUsage>>> {
|
||||||
let res = WorkspaceUsage {
|
let res = biz::workspace::ops::get_workspace_document_total_bytes(
|
||||||
total_document_size: 19978, // TODO
|
&state.pg_pool,
|
||||||
};
|
&user_uuid,
|
||||||
|
&workspace_id,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
Ok(Json(AppResponse::Ok().with_data(res)))
|
Ok(Json(AppResponse::Ok().with_data(res)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,14 @@ use database::user::select_uid_from_email;
|
||||||
use database::workspace::{
|
use database::workspace::{
|
||||||
change_workspace_icon, delete_from_workspace, delete_workspace_members, get_invitation_by_id,
|
change_workspace_icon, delete_from_workspace, delete_workspace_members, get_invitation_by_id,
|
||||||
insert_user_workspace, insert_workspace_invitation, rename_workspace, select_all_user_workspaces,
|
insert_user_workspace, insert_workspace_invitation, rename_workspace, select_all_user_workspaces,
|
||||||
select_workspace, select_workspace_invitations_for_user, select_workspace_member_list,
|
select_user_is_workspace_owner, select_workspace, select_workspace_invitations_for_user,
|
||||||
|
select_workspace_member_list, select_workspace_total_collab_bytes,
|
||||||
update_updated_at_of_workspace, update_workspace_invitation_set_status_accepted,
|
update_updated_at_of_workspace, update_workspace_invitation_set_status_accepted,
|
||||||
upsert_workspace_member, upsert_workspace_member_with_txn,
|
upsert_workspace_member, upsert_workspace_member_with_txn,
|
||||||
};
|
};
|
||||||
use database_entity::dto::{
|
use database_entity::dto::{
|
||||||
AFAccessLevel, AFRole, AFWorkspace, AFWorkspaceInvitation, AFWorkspaceInvitationStatus,
|
AFAccessLevel, AFRole, AFWorkspace, AFWorkspaceInvitation, AFWorkspaceInvitationStatus,
|
||||||
|
WorkspaceUsage,
|
||||||
};
|
};
|
||||||
|
|
||||||
use gotrue::params::InviteUserParams;
|
use gotrue::params::InviteUserParams;
|
||||||
|
|
@ -366,3 +368,21 @@ pub async fn update_workspace_member(
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_workspace_document_total_bytes(
|
||||||
|
pg_pool: &PgPool,
|
||||||
|
user_uuid: &Uuid,
|
||||||
|
workspace_id: &Uuid,
|
||||||
|
) -> Result<WorkspaceUsage, AppError> {
|
||||||
|
let is_owner = select_user_is_workspace_owner(pg_pool, user_uuid, workspace_id).await?;
|
||||||
|
if !is_owner {
|
||||||
|
return Err(AppError::UserUnAuthorized(
|
||||||
|
"User is not the owner of the workspace".to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
let byte_count = select_workspace_total_collab_bytes(pg_pool, workspace_id).await?;
|
||||||
|
Ok(WorkspaceUsage {
|
||||||
|
total_document_size: byte_count,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue