2023-01-17 23:14:18 +00:00
|
|
|
use crate::database::{DatabaseClient, DatabaseError};
|
2021-09-29 11:43:45 +00:00
|
|
|
|
|
|
|
pub struct DeletionQueue {
|
|
|
|
pub files: Vec<String>,
|
|
|
|
pub ipfs_objects: Vec<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn find_orphaned_files(
|
2023-01-17 23:14:18 +00:00
|
|
|
db_client: &impl DatabaseClient,
|
2021-09-29 11:43:45 +00:00
|
|
|
files: Vec<String>,
|
|
|
|
) -> Result<Vec<String>, DatabaseError> {
|
|
|
|
let rows = db_client.query(
|
|
|
|
"
|
2022-07-06 22:36:13 +00:00
|
|
|
SELECT DISTINCT fname
|
2021-09-29 11:43:45 +00:00
|
|
|
FROM unnest($1::text[]) AS fname
|
|
|
|
WHERE
|
|
|
|
NOT EXISTS (
|
|
|
|
SELECT 1 FROM media_attachment WHERE file_name = fname
|
|
|
|
)
|
|
|
|
AND NOT EXISTS (
|
|
|
|
SELECT 1 FROM actor_profile
|
2023-01-06 21:49:15 +00:00
|
|
|
WHERE avatar ->> 'file_name' = fname
|
|
|
|
OR banner ->> 'file_name' = fname
|
2021-09-29 11:43:45 +00:00
|
|
|
)
|
2023-01-16 22:52:22 +00:00
|
|
|
AND NOT EXISTS (
|
|
|
|
SELECT 1 FROM emoji
|
|
|
|
WHERE image ->> 'file_name' = fname
|
|
|
|
)
|
2021-09-29 11:43:45 +00:00
|
|
|
",
|
|
|
|
&[&files],
|
|
|
|
).await?;
|
|
|
|
let orphaned_files = rows.iter()
|
|
|
|
.map(|row| row.try_get("fname"))
|
|
|
|
.collect::<Result<_, _>>()?;
|
|
|
|
Ok(orphaned_files)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn find_orphaned_ipfs_objects(
|
2023-01-17 23:14:18 +00:00
|
|
|
db_client: &impl DatabaseClient,
|
2021-09-29 11:43:45 +00:00
|
|
|
ipfs_objects: Vec<String>,
|
|
|
|
) -> Result<Vec<String>, DatabaseError> {
|
|
|
|
let rows = db_client.query(
|
|
|
|
"
|
2022-07-06 22:36:13 +00:00
|
|
|
SELECT DISTINCT cid
|
2021-09-29 11:43:45 +00:00
|
|
|
FROM unnest($1::text[]) AS cid
|
|
|
|
WHERE
|
|
|
|
NOT EXISTS (
|
|
|
|
SELECT 1 FROM media_attachment WHERE ipfs_cid = cid
|
|
|
|
)
|
|
|
|
AND NOT EXISTS (
|
|
|
|
SELECT 1 FROM post WHERE ipfs_cid = cid
|
|
|
|
)
|
|
|
|
",
|
|
|
|
&[&ipfs_objects],
|
|
|
|
).await?;
|
|
|
|
let orphaned_ipfs_objects = rows.iter()
|
|
|
|
.map(|row| row.try_get("cid"))
|
|
|
|
.collect::<Result<_, _>>()?;
|
|
|
|
Ok(orphaned_ipfs_objects)
|
|
|
|
}
|