feat: enhance media management with EXIF data extraction, metadata filtering, and storage path generation

refactor: update configuration handling to use environment variables and improve code organization
This commit is contained in:
2025-11-14 11:22:51 +01:00
parent 70dc0a7131
commit 3c3b51a2a7
24 changed files with 393 additions and 181 deletions

View File

@@ -2,7 +2,7 @@ use std::sync::Arc;
use async_trait::async_trait;
use libertas_core::{
config::Config, error::{CoreError, CoreResult}, models::Media, repositories::MediaRepository, schema::ListMediaOptions
config::AppConfig, error::{CoreError, CoreResult}, models::Media, repositories::MediaRepository, schema::ListMediaOptions
};
use sqlx::PgPool;
use uuid::Uuid;
@@ -16,11 +16,11 @@ pub struct PostgresMediaRepository {
}
impl PostgresMediaRepository {
pub fn new(pool: PgPool, config: &Config) -> Self {
pub fn new(pool: PgPool, config: &AppConfig) -> Self {
let allowed_columns = config
.allowed_sort_columns
.clone()
.unwrap_or_else(|| vec!["created_at".to_string()]);
.unwrap_or_else(|| vec!["created_at".to_string(), "original_filename".to_string()]);
Self { pool, query_builder: Arc::new(MediaQueryBuilder::new(allowed_columns)) }
}
@@ -89,10 +89,10 @@ impl MediaRepository for PostgresMediaRepository {
async fn list_by_user(&self, user_id: Uuid, options: &ListMediaOptions) -> CoreResult<Vec<Media>> {
let mut query = sqlx::QueryBuilder::new(
r#"
SELECT id, owner_id, storage_path, original_filename, mime_type, hash, created_at,
thumbnail_path
SELECT media.id, media.owner_id, media.storage_path, media.original_filename, media.mime_type, media.hash, media.created_at,
media.thumbnail_path
FROM media
WHERE owner_id =
WHERE media.owner_id =
"#,
);