Refresh emoji caches when emoji is deleted
This commit is contained in:
parent
452de34780
commit
522fd5bafa
2 changed files with 34 additions and 1 deletions
|
@ -11,6 +11,7 @@ use crate::database::{
|
||||||
use crate::models::{
|
use crate::models::{
|
||||||
cleanup::{find_orphaned_files, DeletionQueue},
|
cleanup::{find_orphaned_files, DeletionQueue},
|
||||||
instances::queries::create_instance,
|
instances::queries::create_instance,
|
||||||
|
profiles::queries::update_emoji_caches,
|
||||||
};
|
};
|
||||||
use super::types::{DbEmoji, EmojiImage};
|
use super::types::{DbEmoji, EmojiImage};
|
||||||
|
|
||||||
|
@ -73,7 +74,8 @@ pub async fn update_emoji(
|
||||||
&emoji_id,
|
&emoji_id,
|
||||||
],
|
],
|
||||||
).await?;
|
).await?;
|
||||||
let emoji = row.try_get("emoji")?;
|
let emoji: DbEmoji = row.try_get("emoji")?;
|
||||||
|
update_emoji_caches(db_client, &emoji.id).await?;
|
||||||
Ok(emoji)
|
Ok(emoji)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,6 +177,7 @@ pub async fn delete_emoji(
|
||||||
).await?;
|
).await?;
|
||||||
let row = maybe_row.ok_or(DatabaseError::NotFound("emoji"))?;
|
let row = maybe_row.ok_or(DatabaseError::NotFound("emoji"))?;
|
||||||
let emoji: DbEmoji = row.try_get("emoji")?;
|
let emoji: DbEmoji = row.try_get("emoji")?;
|
||||||
|
update_emoji_caches(db_client, &emoji.id).await?;
|
||||||
let orphaned_files = find_orphaned_files(
|
let orphaned_files = find_orphaned_files(
|
||||||
db_client,
|
db_client,
|
||||||
vec![emoji.image.file_name],
|
vec![emoji.image.file_name],
|
||||||
|
|
|
@ -89,6 +89,36 @@ async fn update_emoji_cache(
|
||||||
Ok(profile)
|
Ok(profile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn update_emoji_caches(
|
||||||
|
db_client: &impl DatabaseClient,
|
||||||
|
emoji_id: &Uuid,
|
||||||
|
) -> Result<(), DatabaseError> {
|
||||||
|
db_client.execute(
|
||||||
|
"
|
||||||
|
WITH profile_emojis AS (
|
||||||
|
SELECT
|
||||||
|
actor_profile.id AS profile_id,
|
||||||
|
COALESCE(
|
||||||
|
jsonb_agg(emoji) FILTER (WHERE emoji.id IS NOT NULL),
|
||||||
|
'[]'
|
||||||
|
) AS emojis
|
||||||
|
FROM actor_profile
|
||||||
|
CROSS JOIN jsonb_array_elements(actor_profile.emojis) AS cached_emoji
|
||||||
|
LEFT JOIN profile_emoji ON (profile_emoji.profile_id = actor_profile.id)
|
||||||
|
LEFT JOIN emoji ON (emoji.id = profile_emoji.emoji_id)
|
||||||
|
WHERE CAST(cached_emoji ->> 'id' AS UUID) = $1
|
||||||
|
GROUP BY actor_profile.id
|
||||||
|
)
|
||||||
|
UPDATE actor_profile
|
||||||
|
SET emojis = profile_emojis.emojis
|
||||||
|
FROM profile_emojis
|
||||||
|
WHERE actor_profile.id = profile_emojis.profile_id
|
||||||
|
",
|
||||||
|
&[&emoji_id],
|
||||||
|
).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Create new profile using given Client or Transaction.
|
/// Create new profile using given Client or Transaction.
|
||||||
pub async fn create_profile(
|
pub async fn create_profile(
|
||||||
db_client: &mut impl DatabaseClient,
|
db_client: &mut impl DatabaseClient,
|
||||||
|
|
Loading…
Reference in a new issue