use crate::dtos::MyceliumProfileData;
use actix_web::{get, web, Responder};
use myc_core::{
domain::dtos::tenant::Tenant,
use_cases::role_scoped::beginner::tenant::fetch_tenant_public_info,
};
use myc_diesel::repositories::SqlAppModule;
use myc_http_tools::{
utils::HttpJsonResponse,
wrappers::default_response_to_http_response::{
fetch_response_kind, handle_mapped_error,
},
};
use shaku::HasComponent;
use uuid::Uuid;
pub fn configure(config: &mut web::ServiceConfig) {
config.service(fetch_tenant_public_info_url);
}
#[utoipa::path(
get,
operation_id = "fetch_tenant_public_info",
responses(
(
status = 500,
description = "Unknown internal server error.",
body = HttpJsonResponse,
),
(
status = 403,
description = "Forbidden.",
body = HttpJsonResponse,
),
(
status = 401,
description = "Unauthorized.",
body = HttpJsonResponse,
),
(
status = 400,
description = "Bad request.",
body = HttpJsonResponse,
),
(
status = 204,
description = "Not found.",
),
(
status = 200,
description = "Profile fetching done.",
body = Tenant,
),
),
)]
#[get("/{tenant_id}")]
pub async fn fetch_tenant_public_info_url(
path: web::Path<Uuid>,
profile: MyceliumProfileData,
app_module: web::Data<SqlAppModule>,
) -> impl Responder {
match fetch_tenant_public_info(
profile.to_profile(),
path.into_inner(),
Box::new(&*app_module.resolve_ref()),
)
.await
{
Ok(res) => fetch_response_kind(res),
Err(err) => handle_mapped_error(err),
}
}