diff --git a/services/blob/src/database/errors.rs b/services/blob/src/database/errors.rs new file mode 100644 --- /dev/null +++ b/services/blob/src/database/errors.rs @@ -0,0 +1,39 @@ +use std::fmt::{Display, Formatter}; + +use aws_sdk_dynamodb::Error as DynamoDBError; +use comm_services_lib::database::DBItemError; + +use crate::s3::S3PathError; + +#[derive( + Debug, derive_more::Display, derive_more::From, derive_more::Error, +)] +pub enum Error { + #[display(...)] + AwsSdk(DynamoDBError), + #[display(...)] + Attribute(DBItemError), + #[display(...)] + Blob(BlobDBError), + #[display(...)] + ItemAlreadyExists, +} + +#[derive(Debug)] +pub enum BlobDBError { + HolderAlreadyExists(String), + InvalidS3Path(S3PathError), +} + +impl Display for BlobDBError { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + match self { + BlobDBError::HolderAlreadyExists(holder) => { + write!(f, "Item for given holder [{}] already exists", holder) + } + BlobDBError::InvalidS3Path(err) => err.fmt(f), + } + } +} + +impl std::error::Error for BlobDBError {} diff --git a/services/blob/src/database/mod.rs b/services/blob/src/database/mod.rs new file mode 100644 --- /dev/null +++ b/services/blob/src/database/mod.rs @@ -0,0 +1,2 @@ +pub mod errors; +pub mod old; diff --git a/services/blob/src/database.rs b/services/blob/src/database/old.rs rename from services/blob/src/database.rs rename to services/blob/src/database/old.rs --- a/services/blob/src/database.rs +++ b/services/blob/src/database/old.rs @@ -1,14 +1,9 @@ use aws_sdk_dynamodb::{ operation::get_item::GetItemOutput, types::AttributeValue, - Error as DynamoDBError, }; use chrono::{DateTime, Utc}; -use comm_services_lib::database::{self, DBItemError}; -use std::{ - collections::HashMap, - fmt::{Display, Formatter}, - sync::Arc, -}; +use comm_services_lib::database; +use std::{collections::HashMap, sync::Arc}; use tracing::error; use crate::{ @@ -19,9 +14,11 @@ BLOB_S3_BUCKET_NAME, BLOB_TABLE_BLOB_HASH_FIELD, BLOB_TABLE_CREATED_FIELD, BLOB_TABLE_NAME, BLOB_TABLE_S3_PATH_FIELD, }, - s3::{S3Path, S3PathError}, + s3::S3Path, }; +use super::errors::{BlobDBError, Error}; + #[derive(Clone, Debug)] pub struct BlobItem { pub blob_hash: String, @@ -306,34 +303,3 @@ Ok(()) } } - -#[derive( - Debug, derive_more::Display, derive_more::From, derive_more::Error, -)] -pub enum Error { - #[display(...)] - AwsSdk(DynamoDBError), - #[display(...)] - Attribute(DBItemError), - #[display(...)] - Blob(BlobDBError), -} - -#[derive(Debug)] -pub enum BlobDBError { - HolderAlreadyExists(String), - InvalidS3Path(S3PathError), -} - -impl Display for BlobDBError { - fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { - match self { - BlobDBError::HolderAlreadyExists(holder) => { - write!(f, "Item for given holder [{}] already exists", holder) - } - BlobDBError::InvalidS3Path(err) => err.fmt(f), - } - } -} - -impl std::error::Error for BlobDBError {} diff --git a/services/blob/src/grpc.rs b/services/blob/src/grpc.rs --- a/services/blob/src/grpc.rs +++ b/services/blob/src/grpc.rs @@ -13,7 +13,8 @@ GRPC_CHUNK_SIZE_LIMIT, GRPC_METADATA_SIZE_PER_MESSAGE, MPSC_CHANNEL_BUFFER_CAPACITY, S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE, }, - database::{BlobItem, DatabaseClient, Error as DBError, ReverseIndexItem}, + database::errors::Error as DBError, + database::old::{BlobItem, DatabaseClient, ReverseIndexItem}, s3::{MultiPartUploadSession, S3Client, S3Path}, tools::MemOps, }; diff --git a/services/blob/src/http/context.rs b/services/blob/src/http/context.rs --- a/services/blob/src/http/context.rs +++ b/services/blob/src/http/context.rs @@ -1,5 +1,5 @@ -use crate::database::ReverseIndexItem; -use crate::database::{BlobItem, DatabaseClient, Error as DBError}; +use crate::database::errors::Error as DBError; +use crate::database::old::{BlobItem, DatabaseClient, ReverseIndexItem}; use crate::s3::{Error as S3Error, S3Client, S3Path}; use actix_web::error::{ ErrorBadRequest, ErrorInternalServerError, ErrorNotFound, diff --git a/services/blob/src/http/handlers/blob.rs b/services/blob/src/http/handlers/blob.rs --- a/services/blob/src/http/handlers/blob.rs +++ b/services/blob/src/http/handlers/blob.rs @@ -1,7 +1,7 @@ use crate::constants::{ BLOB_DOWNLOAD_CHUNK_SIZE, S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE, }; -use crate::database::{BlobItem, ReverseIndexItem}; +use crate::database::old::{BlobItem, ReverseIndexItem}; use crate::http::context::handle_s3_error; use crate::tools::MemOps; use crate::validate_identifier; diff --git a/services/blob/src/http/mod.rs b/services/blob/src/http/mod.rs --- a/services/blob/src/http/mod.rs +++ b/services/blob/src/http/mod.rs @@ -1,5 +1,5 @@ use crate::config::CONFIG; -use crate::database::DatabaseClient; +use crate::database::old::DatabaseClient; use crate::s3::S3Client; use actix_cors::Cors; diff --git a/services/blob/src/main.rs b/services/blob/src/main.rs --- a/services/blob/src/main.rs +++ b/services/blob/src/main.rs @@ -26,7 +26,7 @@ config::parse_cmdline_args()?; let aws_config = config::load_aws_config().await; - let db = database::DatabaseClient::new(&aws_config); + let db = database::old::DatabaseClient::new(&aws_config); let s3 = s3::S3Client::new(&aws_config); tokio::select! {