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}