gitdataai/libs/api/agent/issue_triage.rs
ZhenYi bc7a5a6549 fix: resolve remaining warnings and fix API method name
- issue_triage.rs: use check_project_access instead of nonexistent get_project_member
- email/lib.rs: make EMAIL_REGEX pub to suppress dead_code warning
- tracing_fmt.rs: minor import ordering cleanup and code formatting
2026-04-27 16:42:01 +08:00

47 lines
1.5 KiB
Rust

use actix_web::{HttpResponse, Result, web};
use service::AppService;
use session::Session;
use crate::ApiResponse;
#[derive(Debug, Clone, serde::Deserialize, utoipa::IntoParams)]
pub struct TriageIssueQuery {
pub issue_number: i64,
}
#[utoipa::path(
get,
path = "/api/agents/{project}/triage",
params(
("project" = String, Path, description = "Project name"),
("issue_number" = i64, Query, description = "Issue number to triage"),
),
responses(
(status = 200, description = "Issue triage result", body = ApiResponse<service::agent::issue_triage::IssueTriageResponse>),
(status = 401, description = "Unauthorized"),
(status = 404, description = "Issue not found"),
),
tag = "Agent"
)]
pub async fn triage_issue(
service: web::Data<AppService>,
session: Session,
path: web::Path<String>,
query: web::Query<TriageIssueQuery>,
) -> Result<HttpResponse, crate::error::ApiError> {
let project_name = path.into_inner();
let user_id = session.user().ok_or(crate::error::ApiError(
service::error::AppError::Unauthorized,
))?;
let project = service.utils_find_project_by_name(project_name.clone()).await?;
// Verify user has access to the project before triggering AI triage
service
.check_project_access(project.id, user_id)
.await
.map_err(|e| crate::error::ApiError(e))?;
let resp = service
.triage_issue(project_name, query.issue_number)
.await?;
Ok(crate::ApiResponse::ok(resp).to_response())
}