tuwunel_api_admin/media/
purge_media_cache.rs1use std::time::Duration;
2
3use axum::extract::State;
4use synapse_admin_api::media::purge_media_cache::v1::{Request, Response};
5use tuwunel_core::{
6 Err, Result,
7 utils::{math::ruma_from_usize_saturating, time::timepoint_from_epoch},
8};
9
10use super::MIN_BEFORE_TS;
11use crate::{Ruma, require_admin};
12
13pub(crate) async fn admin_purge_media_cache_route(
18 State(services): State<crate::State>,
19 body: Ruma<Request>,
20) -> Result<Response> {
21 require_admin(&services, body.sender_user()).await?;
22
23 let before_ts = u64::from(body.before_ts);
24 if before_ts < MIN_BEFORE_TS {
25 return Err!(Request(InvalidParam(
26 "before_ts is before the year 1970, this is likely a mistake"
27 )));
28 }
29
30 let cutoff = timepoint_from_epoch(Duration::from_millis(before_ts))?;
31
32 let deleted = services
33 .media
34 .delete_range(cutoff, true, false, false)
35 .await?;
36
37 let deleted = ruma_from_usize_saturating(deleted);
38
39 Ok(Response { deleted })
40}