Skip to content

Commit

Permalink
feat(core): add subscriptions
Browse files Browse the repository at this point in the history
  • Loading branch information
DefectingCat committed Dec 31, 2024
1 parent 71f8ed9 commit e3517a5
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 4 deletions.
3 changes: 2 additions & 1 deletion venus/src/routes/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ pub fn routes() -> Router {
"/api/",
Router::new()
.route("/version", get(version::version))
.nest("/user/", user::routes()),
.nest("/user/", user::routes())
.nest("/subscription/", proxies::routes()),
)
.layer(
ServiceBuilder::new()
Expand Down
43 changes: 40 additions & 3 deletions venus/src/routes/proxies.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
use axum::response::IntoResponse;
use axum::{http::StatusCode, response::IntoResponse, routing::post, Router};
use serde::{Deserialize, Serialize};
use validator::Validate;
use venus_core::config::types::Subscription;

use crate::{
core::CORE,
error::AppResult,
utils::validator::{ValidatedJson, URL_REGEX},
};
Expand All @@ -17,11 +19,46 @@ pub struct SubPayload {
pub url: String,
}

/// Add subscription route
///
/// # Errors
///
/// Returns BadRequest if subscription already exists
pub async fn add_subscription(
ValidatedJson(payload): ValidatedJson<SubPayload>,
) -> AppResult<impl IntoResponse> {
let mut res: RouteResponse<Option<()>> = RouteResponse {
let mut res: RouteResponse<Option<Subscription>> = RouteResponse {
..RouteResponse::default()
};
Ok(res)

let SubPayload { name, url } = payload;

{
let subscriptions = &mut CORE.lock()?.config.venus.subscriptions;
let found = subscriptions.iter().find(|s| s.url == url);
if found.is_some() {
res.message = Some("Subscription already exists".into());
return Ok((StatusCode::BAD_REQUEST, res));
}
}

let subscription = Subscription {
name: name.into(),
url: url.into(),
nodes: vec![],
};
let res_data = subscription.clone();
{
let config = &mut CORE.lock()?.config;
config.venus.subscriptions.push(subscription);
config.write_rua()?;
}
res.message = Some("ok".into());
res.data = Some(res_data);

Ok((StatusCode::OK, res))
}

pub fn routes() -> Router {
Router::new().route("/add", post(add_subscription))
}

0 comments on commit e3517a5

Please sign in to comment.