Merge branch 'main' into leave-workspace
This commit is contained in:
commit
44ced4036e
|
|
@ -1,18 +1,13 @@
|
|||
use crate::pg_row::AFBlobMetadataRow;
|
||||
use crate::resource_usage::{
|
||||
delete_blob_metadata, get_blob_metadata, get_workspace_usage_size, insert_blob_metadata,
|
||||
is_blob_metadata_exists,
|
||||
delete_blob_metadata, get_blob_metadata, insert_blob_metadata, is_blob_metadata_exists,
|
||||
};
|
||||
use app_error::AppError;
|
||||
use async_trait::async_trait;
|
||||
use sqlx::PgPool;
|
||||
use tracing::{event, instrument, warn};
|
||||
use tracing::{instrument, warn};
|
||||
use uuid::Uuid;
|
||||
|
||||
/// Maximum size of a blob in bytes.
|
||||
pub const MAX_BLOB_SIZE: usize = 6 * 1024 * 1024;
|
||||
pub const MAX_USAGE: u64 = 10 * 1024 * 1024 * 1024;
|
||||
|
||||
pub trait ResponseBlob {
|
||||
fn to_blob(self) -> Vec<u8>;
|
||||
}
|
||||
|
|
@ -64,22 +59,7 @@ where
|
|||
return Ok(());
|
||||
}
|
||||
|
||||
// query the storage space of the workspace
|
||||
let obj_key = format!("{}/{}", workspace_id, file_id);
|
||||
let usage = get_workspace_usage_size(&self.pg_pool, &workspace_id).await?;
|
||||
event!(
|
||||
tracing::Level::TRACE,
|
||||
"workspace consumed space: {}, new file:{} with size: {}",
|
||||
obj_key,
|
||||
file_id,
|
||||
file_data.len(),
|
||||
);
|
||||
if usage > MAX_USAGE {
|
||||
return Err(AppError::StorageSpaceNotEnough);
|
||||
}
|
||||
|
||||
let obj_key = format!("{}/{}", workspace_id, file_id);
|
||||
|
||||
let mut tx = self.pg_pool.begin().await?;
|
||||
insert_blob_metadata(
|
||||
&mut tx,
|
||||
|
|
|
|||
|
|
@ -74,7 +74,6 @@ impl WorkspaceMemberChangeset {
|
|||
|
||||
#[derive(Deserialize, Serialize)]
|
||||
pub struct WorkspaceSpaceUsage {
|
||||
pub total_capacity: u64,
|
||||
pub consumed_capacity: u64,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ use actix_web::{
|
|||
use actix_web::{HttpResponse, Result};
|
||||
use app_error::AppError;
|
||||
use chrono::DateTime;
|
||||
use database::file::{MAX_BLOB_SIZE, MAX_USAGE};
|
||||
use database::resource_usage::{get_all_workspace_blob_metadata, get_workspace_usage_size};
|
||||
use shared_entity::dto::workspace_dto::{BlobMetadata, RepeatedBlobMetaData, WorkspaceSpaceUsage};
|
||||
use shared_entity::response::{AppResponse, AppResponseError, JsonAppResponse};
|
||||
|
|
@ -57,15 +56,6 @@ async fn put_blob_handler(
|
|||
let content_length = content_length.into_inner().into_inner();
|
||||
let content_type = content_type.into_inner().to_string();
|
||||
let content = {
|
||||
// Check content length, if it's too large, return error.
|
||||
if content_length > MAX_BLOB_SIZE {
|
||||
return Ok(
|
||||
AppResponse::from(AppError::PayloadTooLarge(
|
||||
"The uploading file is too large".to_string(),
|
||||
))
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
let mut payload_reader = payload_to_async_read(payload);
|
||||
let mut content = vec![0; content_length];
|
||||
let n = payload_reader.read_exact(&mut content).await?;
|
||||
|
|
@ -204,7 +194,6 @@ async fn get_workspace_usage_handler(
|
|||
.map_err(AppResponseError::from)?;
|
||||
let usage = WorkspaceSpaceUsage {
|
||||
consumed_capacity: current,
|
||||
total_capacity: MAX_USAGE,
|
||||
};
|
||||
Ok(AppResponse::Ok().with_data(usage).into())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue