tuwunel_api_admin/media/
delete_media_by_date_size.rs1use axum::extract::State;
2use synapse_admin_api::media::delete_media_by_date_size::v1 as delete_media_by_date_size;
3use tuwunel_core::{Err, Result, utils::math::ruma_from_usize_saturating};
4
5use super::MIN_BEFORE_TS;
6use crate::{Ruma, RumaResponse, require_admin};
7
8pub(crate) async fn admin_delete_media_by_date_size_route(
10 State(services): State<crate::State>,
11 body: Ruma<delete_media_by_date_size::Request>,
12) -> Result<RumaResponse<delete_media_by_date_size::Response>> {
13 require_admin(&services, body.sender_user()).await?;
14
15 if u64::from(body.before_ts) < MIN_BEFORE_TS {
16 return Err!(Request(InvalidParam(
17 "before_ts is before the year 1970, this is likely a mistake"
18 )));
19 }
20
21 let size_gt = body.size_gt.map(u64::from).unwrap_or(0);
22 let keep_profiles = body.keep_profiles.unwrap_or(true);
23
24 let deleted = services
25 .media
26 .delete_by_date_size(u64::from(body.before_ts), size_gt, keep_profiles)
27 .await?;
28
29 let total = ruma_from_usize_saturating(deleted.len());
30
31 let deleted_media = deleted
32 .iter()
33 .filter_map(|mxc| mxc.media_id().ok())
34 .map(ToOwned::to_owned)
35 .collect();
36
37 Ok(RumaResponse(delete_media_by_date_size::Response { deleted_media, total }))
38}