Skip to content
Clone
194c44c
36 lines 1.2 KB Rust
use axum::Json;
use axum::extract::State;
use export::rest::{AppResponseData, NoData};
use jwt::Session;
use crate::errors::ApiError;
use crate::services::AuthService;
use crate::services::reports::{CreateReportCmd, ReportDto};
use jwt::share::session::require_uid;
#[utoipa::path(
post,
path = "/me/reports",
tag = "reports",
description = "提交针对其他用户的举报及可选证据,供平台按处理状态跟踪。",
request_body = CreateReportCmd,
responses(
(status = 200, description = "report filed", body = AppResponseData<ReportDto>),
(status = 409, description = "resource already exists", body = AppResponseData<NoData>),
(status = 400, description = "request failed validation", body = AppResponseData<NoData>),
(status = 401, description = "authentication required", body = AppResponseData<NoData>)
)
)]
pub async fn create_report(
State(service): State<AuthService>,
session: Session,
Json(cmd): Json<CreateReportCmd>,
) -> Result<AppResponseData<ReportDto>, ApiError> {
let uid = require_uid(&session)?;
let resp = service
.create_report(uid, cmd)
.await
.map_err(ApiError::from)?;
Ok(AppResponseData::ok(resp))
}