feat: enhance database configuration and media handling with PostgreSQL integration and storage quota management

This commit is contained in:
2025-11-03 03:24:55 +01:00
parent 964bcf2655
commit 22857cf056
14 changed files with 271 additions and 76 deletions

View File

@@ -7,7 +7,7 @@ pub fn load_config() -> CoreResult<Config> {
Ok(Config {
database: DatabaseConfig {
db_type: DatabaseType::Postgres,
url: "postgres://postgres:postgres@localhost:5432/libertas_db".to_string(),
url: "postgres://libertas:libertas_password@localhost:5436/libertas_db".to_string(),
},
server_address: "127.0.0.1:8080".to_string(),
jwt_secret: "super_secret_jwt_key".to_string(),

View File

@@ -48,13 +48,17 @@ impl MediaService for MediaServiceImpl {
async fn upload_media(&self, mut data: UploadMediaData<'_>) -> CoreResult<Media> {
let (file_bytes, hash, file_size) = self.hash_and_buffer_stream(&mut data).await?;
self.check_upload_prerequisites(data.owner_id, file_size, &hash)
let owner_id = data.owner_id;
let filename = data.filename;
let mime_type = data.mime_type;
self.check_upload_prerequisites(owner_id, file_size, &hash)
.await?;
let storage_path = self.persist_media_file(&file_bytes, &data.filename).await?;
let storage_path = self.persist_media_file(&file_bytes, &filename).await?;
let media = self
.persist_media_metadata(&data, storage_path, hash, file_size)
.persist_media_metadata(owner_id, filename, mime_type, storage_path, hash, file_size)
.await?;
self.publish_new_media_job(media.id).await?;
@@ -237,17 +241,19 @@ impl MediaServiceImpl {
async fn persist_media_metadata(
&self,
data: &UploadMediaData<'_>,
owner_id: Uuid,
filename: String,
mime_type: String,
storage_path: String,
hash: String,
file_size: i64,
) -> CoreResult<Media> {
let media_model = Media {
id: Uuid::new_v4(),
owner_id: data.owner_id,
owner_id,
storage_path,
original_filename: data.filename.clone(),
mime_type: data.mime_type.clone(),
original_filename: filename,
mime_type,
hash,
created_at: chrono::Utc::now(),
extracted_location: None,
@@ -257,7 +263,7 @@ impl MediaServiceImpl {
self.repo.create(&media_model).await?;
self.user_repo
.update_storage_used(data.owner_id, file_size)
.update_storage_used(owner_id, file_size)
.await?;
Ok(media_model)