mirror of
https://github.com/perstarkse/minne.git
synced 2026-04-20 07:51:23 +02:00
feat: surrealdb queue and remove lapin and rabbitmq
This commit is contained in:
@@ -44,7 +44,7 @@ pub async fn ingress_data(
|
||||
|
||||
let futures: Vec<_> = ingress_objects
|
||||
.into_iter()
|
||||
.map(|object| state.rabbitmq_producer.publish(object))
|
||||
.map(|object| state.job_queue.enqueue(object.clone(), user.id.clone()))
|
||||
.collect();
|
||||
|
||||
try_join_all(futures).await.map_err(AppError::from)?;
|
||||
|
||||
34
src/server/routes/api/ingress_task.rs
Normal file
34
src/server/routes/api/ingress_task.rs
Normal file
@@ -0,0 +1,34 @@
|
||||
use crate::{error::ApiError, server::AppState, storage::types::user::User};
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
response::IntoResponse,
|
||||
Extension, Json,
|
||||
};
|
||||
|
||||
pub async fn get_queue_tasks(
|
||||
State(state): State<AppState>,
|
||||
Extension(user): Extension<User>,
|
||||
) -> Result<impl IntoResponse, ApiError> {
|
||||
let user_tasks = state
|
||||
.job_queue
|
||||
.get_user_jobs(&user.id)
|
||||
.await
|
||||
.map_err(ApiError::from)?;
|
||||
|
||||
Ok(Json(user_tasks))
|
||||
}
|
||||
|
||||
pub async fn delete_queue_task(
|
||||
State(state): State<AppState>,
|
||||
Extension(user): Extension<User>,
|
||||
Path(id): Path<String>,
|
||||
) -> Result<impl IntoResponse, ApiError> {
|
||||
state
|
||||
.job_queue
|
||||
.delete_job(&id, &user.id)
|
||||
.await
|
||||
.map_err(ApiError::from)?;
|
||||
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod ingress;
|
||||
pub mod ingress_task;
|
||||
pub mod query;
|
||||
pub mod queue_length;
|
||||
|
||||
@@ -4,6 +4,7 @@ use tracing::info;
|
||||
use crate::{
|
||||
error::{ApiError, AppError},
|
||||
server::AppState,
|
||||
storage::{db::get_all_stored_items, types::job::Job},
|
||||
};
|
||||
|
||||
pub async fn queue_length_handler(
|
||||
@@ -11,11 +12,10 @@ pub async fn queue_length_handler(
|
||||
) -> Result<impl IntoResponse, ApiError> {
|
||||
info!("Getting queue length");
|
||||
|
||||
let queue_length = state
|
||||
.rabbitmq_consumer
|
||||
.get_queue_length()
|
||||
let queue_length = get_all_stored_items::<Job>(&state.surreal_db_client)
|
||||
.await
|
||||
.map_err(AppError::from)?;
|
||||
.map_err(AppError::from)?
|
||||
.len();
|
||||
|
||||
info!("Queue length: {}", queue_length);
|
||||
|
||||
|
||||
@@ -29,10 +29,11 @@ pub async fn index_handler(
|
||||
|
||||
let queue_length = match auth.current_user.is_some() {
|
||||
true => state
|
||||
.rabbitmq_consumer
|
||||
.get_queue_length()
|
||||
.job_queue
|
||||
.get_user_jobs(&auth.current_user.clone().unwrap().id)
|
||||
.await
|
||||
.map_err(|e| HtmlError::new(AppError::from(e), state.templates.clone()))?,
|
||||
.map_err(|e| HtmlError::new(e, state.templates.clone()))?
|
||||
.len(),
|
||||
false => 0,
|
||||
};
|
||||
|
||||
@@ -47,7 +48,7 @@ pub async fn index_handler(
|
||||
let output = render_template(
|
||||
IndexData::template_name(),
|
||||
IndexData {
|
||||
queue_length,
|
||||
queue_length: queue_length.try_into().unwrap(),
|
||||
gdpr_accepted,
|
||||
user: auth.current_user,
|
||||
},
|
||||
|
||||
@@ -80,7 +80,7 @@ pub async fn process_ingress_form(
|
||||
|
||||
let futures: Vec<_> = ingress_objects
|
||||
.into_iter()
|
||||
.map(|object| state.rabbitmq_producer.publish(object))
|
||||
.map(|object| state.job_queue.enqueue(object.clone(), user.id.clone()))
|
||||
.collect();
|
||||
|
||||
try_join_all(futures)
|
||||
|
||||
61
src/server/routes/html/ingress_tasks.rs
Normal file
61
src/server/routes/html/ingress_tasks.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
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<Job>});
|
||||
|
||||
pub async fn show_queue_tasks(
|
||||
State(state): State<AppState>,
|
||||
auth: AuthSession<User, String, SessionSurrealPool<Any>, Surreal<Any>>,
|
||||
) -> Result<impl IntoResponse, HtmlError> {
|
||||
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<AppState>,
|
||||
auth: AuthSession<User, String, SessionSurrealPool<Any>, Surreal<Any>>,
|
||||
Path(id): Path<String>,
|
||||
) -> Result<impl IntoResponse, HtmlError> {
|
||||
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())
|
||||
}
|
||||
@@ -8,6 +8,7 @@ pub mod documentation;
|
||||
pub mod gdpr;
|
||||
pub mod index;
|
||||
pub mod ingress;
|
||||
pub mod ingress_tasks;
|
||||
pub mod search_result;
|
||||
pub mod signin;
|
||||
pub mod signout;
|
||||
|
||||
Reference in New Issue
Block a user