Skip to content
Clone
d5939db
26 lines 846 B Rust
use axum::extract::State;
use export::data::{AppRequest, AppRequestData, AppResponseData};
use jwt::extractor::AuthUser;
use crate::error::RepoResult;
use crate::features::RepoService;
use crate::features::lifecycle::CreateRepoOption;
use crate::features::lifecycle::RepoView;
#[utoipa::path(
post,
path = "/repos",
tag = "repo",
request_body = AppRequestData<CreateRepoOption>,
responses((status = 201, description = "Create a repository", body = AppResponseData<RepoView>)),
security(("bearer_auth" = []))
)]
pub(crate) async fn handler(
State(svc): State<RepoService>,
AuthUser { claims }: AuthUser,
input: AppRequest<CreateRepoOption>,
) -> RepoResult<AppResponseData<RepoView>> {
let view = svc.create_repo(claims.sub, input.into_inner()).await?;
Ok(AppResponseData::ok(view).with_code(201))
}