headless_lms_server/controllers/cms/
organizations.rs1use crate::prelude::*;
4
5#[instrument(skip(payload, request, pool, file_store, app_conf))]
21async fn add_media(
22 organization_id: web::Path<Uuid>,
23 payload: Multipart,
24 request: HttpRequest,
25 pool: web::Data<PgPool>,
26 user: AuthUser,
27 file_store: web::Data<dyn FileStore>,
28 app_conf: web::Data<ApplicationConfiguration>,
29) -> ControllerResult<web::Json<UploadResult>> {
30 let mut conn = pool.acquire().await?;
31 let token = authorize(
32 &mut conn,
33 Act::Edit,
34 Some(user.id),
35 Res::Organization(*organization_id),
36 )
37 .await?;
38 let organization = models::organizations::get_organization(&mut conn, *organization_id).await?;
39
40 let media_path = upload_file_from_cms(
41 request.headers(),
42 payload,
43 StoreKind::Organization(organization.id),
44 file_store.as_ref(),
45 &mut conn,
46 user,
47 )
48 .await?;
49 let download_url = file_store.get_download_url(media_path.as_path(), app_conf.as_ref());
50 token.authorized_ok(web::Json(UploadResult { url: download_url }))
51}
52
53pub fn _add_routes(cfg: &mut ServiceConfig) {
61 cfg.route("/{organization_id}/upload", web::post().to(add_media));
62}