This commit is contained in:
parent
74e1ab9bc6
commit
bfeecd553d
|
@ -105,20 +105,27 @@ impl AppState {
|
|||
.expect("Failed to list files from S3");
|
||||
|
||||
if let Some(objects) = list_response.contents {
|
||||
// Формируем список файлов
|
||||
let file_list: Vec<String> = objects
|
||||
.iter()
|
||||
.filter_map(|object| object.key.clone())
|
||||
.collect();
|
||||
// Формируем список файлов без дубликатов по имени файла (без расширения)
|
||||
let mut file_list = std::collections::HashMap::new();
|
||||
for object in objects.iter() {
|
||||
if let Some(key) = &object.key {
|
||||
let parts: Vec<&str> = key.split('.').collect();
|
||||
if parts.len() > 1 && !parts.last().unwrap().contains('/') {
|
||||
let filename = parts[0..parts.len()-1].join(".");
|
||||
file_list.entry(filename).or_insert(key.clone());
|
||||
} else {
|
||||
file_list.entry(key.to_string()).or_insert(key.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Сохраняем список файлов в Redis в формате JSON
|
||||
// Сохраняем список файлов в Redis, используя HSET для каждого файла
|
||||
for (filename, path) in file_list {
|
||||
let _: () = redis
|
||||
.set(
|
||||
FILE_LIST_CACHE_KEY,
|
||||
serde_json::to_string(&file_list).unwrap(),
|
||||
)
|
||||
.hset(FILE_LIST_CACHE_KEY, filename, path)
|
||||
.await
|
||||
.expect("Failed to cache file list in Redis");
|
||||
.expect("Failed to cache file in Redis");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -127,14 +134,10 @@ impl AppState {
|
|||
let mut redis = self.redis.clone();
|
||||
|
||||
// Пытаемся получить кэшированный список из Redis
|
||||
let cached_list: Option<String> = redis.get(FILE_LIST_CACHE_KEY).await.unwrap_or(None);
|
||||
let cached_list: HashMap<String, String> = redis.hgetall(FILE_LIST_CACHE_KEY).await.unwrap_or_default();
|
||||
|
||||
if let Some(cached_list) = cached_list {
|
||||
// Если список найден, возвращаем его в виде вектора строк
|
||||
serde_json::from_str(&cached_list).unwrap_or_else(|_| vec![])
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
// Преобразуем HashMap в Vec<String>, используя значения (пути файлов)
|
||||
cached_list.into_values().collect()
|
||||
}
|
||||
|
||||
/// Периодически обновляет кэшированный список файлов из Storj S3.
|
||||
|
|
Loading…
Reference in New Issue
Block a user