feature/upstream-service #13
@@ -1,5 +1,6 @@
|
|||||||
pub mod get_upstream;
|
pub mod get_upstream;
|
||||||
pub mod get_upstream_target;
|
pub mod get_upstream_target;
|
||||||
|
pub mod info;
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ use axum::{
|
|||||||
extract::{Path, Query, State},
|
extract::{Path, Query, State},
|
||||||
response::Result as AxumResult,
|
response::Result as AxumResult,
|
||||||
};
|
};
|
||||||
use chrono::{DateTime, Utc};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
@@ -13,7 +12,12 @@ use crate::{
|
|||||||
errors::service_error::ServiceError,
|
errors::service_error::ServiceError,
|
||||||
routes::{
|
routes::{
|
||||||
AppState,
|
AppState,
|
||||||
api::helper::pagination::{ExtractPagination, PaginationInfo},
|
api::{
|
||||||
|
helper::pagination::{ExtractPagination, PaginationInfo},
|
||||||
|
restricted::nginx::upstream::info::response::{
|
||||||
|
UpstreamInfoResponse, UpstreamListResponse,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
services::nginx::upstream::GetUpstreamOptions,
|
services::nginx::upstream::GetUpstreamOptions,
|
||||||
};
|
};
|
||||||
@@ -35,77 +39,6 @@ impl From<GetUpstreamParams> for ConcreteGetUpstreamParams {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
|
||||||
pub struct UpstreamTargetBasicInfo {
|
|
||||||
pub id: uuid::Uuid,
|
|
||||||
pub target_host: String,
|
|
||||||
pub target_port: i64,
|
|
||||||
pub enabled: bool,
|
|
||||||
pub is_backup: bool,
|
|
||||||
pub weight: i32,
|
|
||||||
//
|
|
||||||
pub created_at: DateTime<Utc>,
|
|
||||||
pub updated_at: DateTime<Utc>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<crate::services::nginx::info::upstream_target::UpstreamTargetInfo>
|
|
||||||
for UpstreamTargetBasicInfo
|
|
||||||
{
|
|
||||||
fn from(info: crate::services::nginx::info::upstream_target::UpstreamTargetInfo) -> Self {
|
|
||||||
Self {
|
|
||||||
id: info.id,
|
|
||||||
target_host: info.target_host,
|
|
||||||
target_port: info.target_port,
|
|
||||||
enabled: info.enabled,
|
|
||||||
is_backup: info.is_backup,
|
|
||||||
weight: info.weight as i32,
|
|
||||||
//
|
|
||||||
created_at: info.created_at,
|
|
||||||
updated_at: info.updated_at,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
|
||||||
pub struct UpstreamInfoResponse {
|
|
||||||
pub id: uuid::Uuid,
|
|
||||||
pub name: String,
|
|
||||||
pub protocol: String,
|
|
||||||
pub algorithm: String,
|
|
||||||
pub sticky_session: bool,
|
|
||||||
pub created_by: Option<uuid::Uuid>,
|
|
||||||
pub created_at: DateTime<Utc>,
|
|
||||||
pub updated_at: DateTime<Utc>,
|
|
||||||
//
|
|
||||||
pub upstream_targets: Vec<UpstreamTargetBasicInfo>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<crate::services::nginx::info::upstream::UpstreamInfo> for UpstreamInfoResponse {
|
|
||||||
fn from(info: crate::services::nginx::info::upstream::UpstreamInfo) -> Self {
|
|
||||||
Self {
|
|
||||||
id: info.id,
|
|
||||||
name: info.name,
|
|
||||||
protocol: info.protocol,
|
|
||||||
algorithm: info.algorithm,
|
|
||||||
sticky_session: info.sticky_session,
|
|
||||||
created_by: info.created_by,
|
|
||||||
created_at: info.created_at,
|
|
||||||
updated_at: info.updated_at,
|
|
||||||
upstream_targets: info
|
|
||||||
.upstream_targets
|
|
||||||
.into_iter()
|
|
||||||
.map(|t| t.into())
|
|
||||||
.collect(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
|
||||||
pub struct UpstreamListResponse {
|
|
||||||
pub items: Vec<UpstreamInfoResponse>,
|
|
||||||
pub pagination: PaginationInfo,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_upstream_list(
|
pub async fn get_upstream_list(
|
||||||
ExtractPagination(pagination): ExtractPagination,
|
ExtractPagination(pagination): ExtractPagination,
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
@@ -168,6 +101,7 @@ mod tests {
|
|||||||
use crate::configs::{FromConfig, ProgramSettings};
|
use crate::configs::{FromConfig, ProgramSettings};
|
||||||
|
|
||||||
use crate::routes::api::restricted::nginx::upstream::get_upstream_router;
|
use crate::routes::api::restricted::nginx::upstream::get_upstream_router;
|
||||||
|
use crate::routes::api::restricted::nginx::upstream::info::response::UpstreamInfoResponse;
|
||||||
use crate::services::get_app_service;
|
use crate::services::get_app_service;
|
||||||
|
|
||||||
fn get_router_with_state(db: DatabaseConnection) -> axum::Router {
|
fn get_router_with_state(db: DatabaseConnection) -> axum::Router {
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ use axum::{
|
|||||||
extract::{Path, Query, State},
|
extract::{Path, Query, State},
|
||||||
response::Result as AxumResult,
|
response::Result as AxumResult,
|
||||||
};
|
};
|
||||||
use chrono::{DateTime, Utc};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{errors::service_error::ServiceError, routes::AppState};
|
use crate::{
|
||||||
|
errors::service_error::ServiceError,
|
||||||
|
routes::{AppState, api::restricted::nginx::upstream::info::response::UpstreamTargetInfo},
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
pub struct GetUpstreamTargetsParams {
|
pub struct GetUpstreamTargetsParams {
|
||||||
@@ -28,59 +30,6 @@ impl From<GetUpstreamTargetsParams> for ConcreteGetUpstreamTargetsParams {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
|
||||||
pub struct UpstreamTargetInfo {
|
|
||||||
pub id: uuid::Uuid,
|
|
||||||
pub target_host: String,
|
|
||||||
pub target_port: i64,
|
|
||||||
pub enabled: bool,
|
|
||||||
pub is_backup: bool,
|
|
||||||
pub weight: i32,
|
|
||||||
//
|
|
||||||
pub created_at: DateTime<Utc>,
|
|
||||||
pub updated_at: DateTime<Utc>,
|
|
||||||
//
|
|
||||||
pub upstream_id: Uuid,
|
|
||||||
pub upstream: Option<UpstreamBasicInfo>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
|
||||||
pub struct UpstreamBasicInfo {
|
|
||||||
pub id: uuid::Uuid,
|
|
||||||
pub name: String,
|
|
||||||
pub protocol: String,
|
|
||||||
//
|
|
||||||
pub created_at: DateTime<Utc>,
|
|
||||||
pub updated_at: DateTime<Utc>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<crate::services::nginx::info::upstream_target::UpstreamTargetInfo>
|
|
||||||
for UpstreamTargetInfo
|
|
||||||
{
|
|
||||||
fn from(info: crate::services::nginx::info::upstream_target::UpstreamTargetInfo) -> Self {
|
|
||||||
Self {
|
|
||||||
id: info.id,
|
|
||||||
target_host: info.target_host,
|
|
||||||
target_port: info.target_port,
|
|
||||||
enabled: info.enabled,
|
|
||||||
is_backup: info.is_backup,
|
|
||||||
weight: info.weight as i32,
|
|
||||||
//
|
|
||||||
created_at: info.created_at,
|
|
||||||
updated_at: info.updated_at,
|
|
||||||
//
|
|
||||||
upstream_id: info.upstream_id,
|
|
||||||
upstream: info.upstream.map(|u| UpstreamBasicInfo {
|
|
||||||
id: u.id,
|
|
||||||
name: u.name,
|
|
||||||
protocol: u.protocol,
|
|
||||||
created_at: u.created_at,
|
|
||||||
updated_at: u.updated_at,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_upstream_target(
|
pub async fn get_upstream_target(
|
||||||
Path(upstream_target_id): Path<Uuid>,
|
Path(upstream_target_id): Path<Uuid>,
|
||||||
Query(params): Query<GetUpstreamTargetsParams>,
|
Query(params): Query<GetUpstreamTargetsParams>,
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
pub mod response;
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
use chrono::{DateTime, Utc};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::routes::api::helper::pagination::PaginationInfo;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
|
pub struct UpstreamTargetInfo {
|
||||||
|
pub id: uuid::Uuid,
|
||||||
|
pub target_host: String,
|
||||||
|
pub target_port: i64,
|
||||||
|
pub enabled: bool,
|
||||||
|
pub is_backup: bool,
|
||||||
|
pub weight: i32,
|
||||||
|
//
|
||||||
|
pub created_at: DateTime<Utc>,
|
||||||
|
pub updated_at: DateTime<Utc>,
|
||||||
|
//
|
||||||
|
pub upstream_id: Uuid,
|
||||||
|
pub upstream: Option<UpstreamBasicInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
|
pub struct UpstreamBasicInfo {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub name: String,
|
||||||
|
pub protocol: String,
|
||||||
|
//
|
||||||
|
pub created_at: DateTime<Utc>,
|
||||||
|
pub updated_at: DateTime<Utc>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<crate::services::nginx::info::upstream_target::UpstreamTargetInfo>
|
||||||
|
for UpstreamTargetInfo
|
||||||
|
{
|
||||||
|
fn from(info: crate::services::nginx::info::upstream_target::UpstreamTargetInfo) -> Self {
|
||||||
|
Self {
|
||||||
|
id: info.id,
|
||||||
|
target_host: info.target_host,
|
||||||
|
target_port: info.target_port,
|
||||||
|
enabled: info.enabled,
|
||||||
|
is_backup: info.is_backup,
|
||||||
|
weight: info.weight as i32,
|
||||||
|
//
|
||||||
|
created_at: info.created_at,
|
||||||
|
updated_at: info.updated_at,
|
||||||
|
//
|
||||||
|
upstream_id: info.upstream_id,
|
||||||
|
upstream: info.upstream.map(|u| UpstreamBasicInfo {
|
||||||
|
id: u.id,
|
||||||
|
name: u.name,
|
||||||
|
protocol: u.protocol,
|
||||||
|
created_at: u.created_at,
|
||||||
|
updated_at: u.updated_at,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
|
pub struct UpstreamTargetBasicInfo {
|
||||||
|
pub id: uuid::Uuid,
|
||||||
|
pub target_host: String,
|
||||||
|
pub target_port: i64,
|
||||||
|
pub enabled: bool,
|
||||||
|
pub is_backup: bool,
|
||||||
|
pub weight: i32,
|
||||||
|
//
|
||||||
|
pub created_at: DateTime<Utc>,
|
||||||
|
pub updated_at: DateTime<Utc>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<crate::services::nginx::info::upstream_target::UpstreamTargetInfo>
|
||||||
|
for UpstreamTargetBasicInfo
|
||||||
|
{
|
||||||
|
fn from(info: crate::services::nginx::info::upstream_target::UpstreamTargetInfo) -> Self {
|
||||||
|
Self {
|
||||||
|
id: info.id,
|
||||||
|
target_host: info.target_host,
|
||||||
|
target_port: info.target_port,
|
||||||
|
enabled: info.enabled,
|
||||||
|
is_backup: info.is_backup,
|
||||||
|
weight: info.weight as i32,
|
||||||
|
//
|
||||||
|
created_at: info.created_at,
|
||||||
|
updated_at: info.updated_at,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
|
pub struct UpstreamInfoResponse {
|
||||||
|
pub id: uuid::Uuid,
|
||||||
|
pub name: String,
|
||||||
|
pub protocol: String,
|
||||||
|
pub algorithm: String,
|
||||||
|
pub sticky_session: bool,
|
||||||
|
pub created_by: Option<uuid::Uuid>,
|
||||||
|
pub created_at: DateTime<Utc>,
|
||||||
|
pub updated_at: DateTime<Utc>,
|
||||||
|
//
|
||||||
|
pub upstream_targets: Vec<UpstreamTargetBasicInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<crate::services::nginx::info::upstream::UpstreamInfo> for UpstreamInfoResponse {
|
||||||
|
fn from(info: crate::services::nginx::info::upstream::UpstreamInfo) -> Self {
|
||||||
|
Self {
|
||||||
|
id: info.id,
|
||||||
|
name: info.name,
|
||||||
|
protocol: info.protocol,
|
||||||
|
algorithm: info.algorithm,
|
||||||
|
sticky_session: info.sticky_session,
|
||||||
|
created_by: info.created_by,
|
||||||
|
created_at: info.created_at,
|
||||||
|
updated_at: info.updated_at,
|
||||||
|
upstream_targets: info
|
||||||
|
.upstream_targets
|
||||||
|
.into_iter()
|
||||||
|
.map(|t| t.into())
|
||||||
|
.collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, utoipa::ToSchema)]
|
||||||
|
pub struct UpstreamListResponse {
|
||||||
|
pub items: Vec<UpstreamInfoResponse>,
|
||||||
|
pub pagination: PaginationInfo,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user