5f84089
use ::session::Session;
use export::http::{Json, Path, State};
use export::rest::{AppResponseData, NoData};
use crate::errors::ApiError;
use crate::services::comments::{CommentDto, CreateCommentCmd};
use crate::services::issues::IssuePath;
use crate::services::service::IssueService;
use ::session::share::session;
#[utoipa::path(
post,
path = "/issues/{space_name}/boards/{board_id}/issues/{issue_id}/comments",
tag = "issues",
description = "在议题下新增评论或回复,并处理提及与通知。",
params(IssuePath),
request_body = CreateCommentCmd,
responses(
(status = 200, description = "create comment", body = AppResponseData<CommentDto>),
(status = 429, description = "creation quota exceeded", body = AppResponseData<NoData>),
(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 = "resource already exists", body = AppResponseData<NoData>),
(status = 401, description = "authentication required", body = AppResponseData<NoData>)
)
)]
pub async fn create_comment(
State(service): State<IssueService>,
session: Session,
Path(path): Path<IssuePath>,
Json(cmd): Json<CreateCommentCmd>,
) -> Result<AppResponseData<CommentDto>, ApiError> {
let uid = session::require_uid(&session)?;
let issue_id = service
.resolve_issue_ref(uid, &path.space_name, path.board_id, &path.issue_id)
.await?;
let dto = service
.create_comment(uid, &path.space_name, path.board_id, issue_id, cmd)
.await?;
Ok(AppResponseData::ok(dto))
}