Skip to content
Clone
ef0b83a
36 lines 1.5 KB Rust
use ::session::Session;
use export::http::{Json, Path, State};
use export::rest::{AppResponseData, NoData};
use crate::errors::ApiError;
use crate::services::dto::SpacePath;
use crate::services::join_rules::{CreateJoinRuleCmd, JoinRuleDto};
use crate::services::service::SpaceService;
use ::session::share::session;
#[utoipa::path(
post,
path = "/spaces/{space_name}/join-rules",
tag = "space",
description = "创建根据议题事件自动授予群组成员身份的规则。",
params(SpacePath),
request_body = CreateJoinRuleCmd,
responses(
(status = 200, description = "join rule created", body = AppResponseData<JoinRuleDto>),
(status = 400, description = "bad request", body = AppResponseData<NoData>),
(status = 403, description = "forbidden", body = AppResponseData<NoData>),
(status = 404, description = "not found", body = AppResponseData<NoData>),
(status = 409, description = "conflict", body = AppResponseData<NoData>),
(status = 401, description = "authentication required", body = AppResponseData<NoData>)
)
)]
pub async fn create_join_rule(
State(service): State<SpaceService>,
session: Session,
Path(path): Path<SpacePath>,
Json(cmd): Json<CreateJoinRuleCmd>,
) -> Result<AppResponseData<JoinRuleDto>, ApiError> {
let uid = session::require_uid(&session)?;
let dto = service.create_join_rule(uid, &path.space_name, cmd).await?;
Ok(AppResponseData::ok(dto))
}