use crate::{ error::{AppError, HtmlError}, page_data, server::AppState, storage::types::{job::Job, user::User}, }; use axum::{ extract::{Path, State}, response::{Html, IntoResponse, Redirect}, }; use axum_session_auth::AuthSession; use axum_session_surreal::SessionSurrealPool; use surrealdb::{engine::any::Any, Surreal}; use super::render_template; page_data!(ShowQueueTasks, "queue_tasks.html", {jobs: Vec}); pub async fn show_queue_tasks( State(state): State, auth: AuthSession, Surreal>, ) -> Result { let user = match auth.current_user { Some(user) => user, None => return Ok(Redirect::to("/signin").into_response()), }; let jobs = state .job_queue .get_user_jobs(&user.id) .await .map_err(|e| HtmlError::new(e, state.templates.clone()))?; let rendered = render_template( ShowQueueTasks::template_name(), ShowQueueTasks { jobs }, state.templates.clone(), ) .map_err(|e| HtmlError::new(AppError::from(e), state.templates.clone()))?; Ok(rendered.into_response()) } pub async fn delete_task( State(state): State, auth: AuthSession, Surreal>, Path(id): Path, ) -> Result { let user = match auth.current_user { Some(user) => user, None => return Ok(Redirect::to("/signin").into_response()), }; state .job_queue .delete_job(&id, &user.id) .await .map_err(|e| HtmlError::new(e, state.templates.clone()))?; Ok(Html("").into_response()) }