(
repo_request: web::Json<GourceRequest>,
job_store: web::Data<JobStore>,
)
| 129 | } |
| 130 | |
| 131 | async fn start_gource( |
| 132 | repo_request: web::Json<GourceRequest>, |
| 133 | job_store: web::Data<JobStore>, |
| 134 | ) -> impl Responder { |
| 135 | let job_id = Uuid::new_v4().to_string(); |
| 136 | log_message( |
| 137 | log::Level::Info, |
| 138 | &format!("Starting new job with ID: {}", job_id), |
| 139 | None, |
| 140 | ); |
| 141 | |
| 142 | let repo_url = repo_request.repo_url.clone(); |
| 143 | let access_token = repo_request.access_token.clone(); |
| 144 | let settings = repo_request.settings.clone().unwrap_or_default(); |
| 145 | |
| 146 | { |
| 147 | let mut store = job_store.lock().await; |
| 148 | store.insert( |
| 149 | job_id.clone(), |
| 150 | JobStatus { |
| 151 | step: ProgressStep::InitializingProject, |
| 152 | video_url: None, |
| 153 | repo_url: repo_url.clone(), |
| 154 | error: None, |
| 155 | settings: settings.clone(), |
| 156 | }, |
| 157 | ); |
| 158 | } |
| 159 | |
| 160 | let job_store_clone = job_store.clone(); |
| 161 | let job_id_clone = job_id.clone(); |
| 162 | |
| 163 | tokio::spawn(async move { |
| 164 | if let Err(e) = process_gource( |
| 165 | repo_url, |
| 166 | access_token, |
| 167 | Some(settings), |
| 168 | job_id_clone.clone(), |
| 169 | job_store_clone.clone(), |
| 170 | ) |
| 171 | .await |
| 172 | { |
| 173 | log_message( |
| 174 | log::Level::Error, |
| 175 | &format!("Job failed: {}", e), |
| 176 | Some(&job_id_clone), |
| 177 | ); |
| 178 | let mut store = job_store_clone.lock().await; |
| 179 | if let Some(status) = store.get_mut(&job_id_clone) { |
| 180 | status.step = ProgressStep::GeneratingVisualization; |
| 181 | status.error = Some(e.to_string()); |
| 182 | } |
| 183 | } |
| 184 | }); |
| 185 | |
| 186 | HttpResponse::Ok().json(GourceResponse { job_id }) |
| 187 | } |
| 188 |
nothing calls this directly
no test coverage detected