Skip to main content

tuwunel_api_admin/media/
delete_media_by_date_size.rs

1use 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
8/// # `POST /_synapse/admin/v1/media/delete`
9pub(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}