API was finished
This commit is contained in:
72
did_router/Cargo.lock
generated
72
did_router/Cargo.lock
generated
@@ -65,7 +65,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -182,7 +182,7 @@ dependencies = [
|
||||
"actix-router",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -365,7 +365,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -376,7 +376,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -407,7 +407,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustc_version",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
@@ -421,6 +421,8 @@ dependencies = [
|
||||
"dotenvy",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"strum",
|
||||
"strum_macros",
|
||||
"xml-builder",
|
||||
]
|
||||
|
||||
@@ -447,7 +449,7 @@ dependencies = [
|
||||
"heck 0.4.1",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -460,7 +462,7 @@ dependencies = [
|
||||
"dsl_auto_type",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -469,7 +471,7 @@ version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe2444076b48641147115697648dc743c2c00b61adade0f01ce67133c7babe8c"
|
||||
dependencies = [
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -490,7 +492,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -516,7 +518,7 @@ dependencies = [
|
||||
"heck 0.5.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1117,6 +1119,12 @@ dependencies = [
|
||||
"semver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.23"
|
||||
@@ -1162,7 +1170,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1267,6 +1275,36 @@ version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||
|
||||
[[package]]
|
||||
name = "strum"
|
||||
version = "0.24.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
|
||||
|
||||
[[package]]
|
||||
name = "strum_macros"
|
||||
version = "0.24.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
|
||||
dependencies = [
|
||||
"heck 0.4.1",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.117"
|
||||
@@ -1286,7 +1324,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1379,7 +1417,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1585,7 +1623,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -1606,7 +1644,7 @@ checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1626,7 +1664,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -1660,7 +1698,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -11,3 +11,5 @@ dotenvy = "0.15"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
serde_json = "1.0.149"
|
||||
diesel-derive-enum = { version = "3.0.0-beta.1", features = ["postgres"] }
|
||||
strum = "0.24"
|
||||
strum_macros = "0.24"
|
||||
@@ -2,7 +2,7 @@
|
||||
CREATE TYPE did_target_type AS ENUM ('URL', 'MOH', 'EXTERNAL_NUMBER', 'NO_SERVICE', 'NIGHT_MODE', 'CUSTOME_MESSAGE');
|
||||
CREATE TABLE dids (
|
||||
id SERIAL PRIMARY KEY,
|
||||
did VARCHAR(64) NOT NULL,
|
||||
did_number VARCHAR(64) NOT NULL,
|
||||
target_type DID_TARGET_TYPE NOT NULL DEFAULT 'NO_SERVICE',
|
||||
target VARCHAR(512),
|
||||
active BOOLEAN NOT NULL DEFAULT TRUE
|
||||
|
||||
@@ -5,9 +5,10 @@ use dotenvy::dotenv;
|
||||
use std::env;
|
||||
use serde::{Serialize};
|
||||
use diesel_derive_enum::DbEnum;
|
||||
use std::str::FromStr;
|
||||
use strum_macros::EnumString;
|
||||
|
||||
|
||||
#[derive(Debug, PartialEq, DbEnum, Serialize)]
|
||||
#[derive(Debug, PartialEq, DbEnum, Serialize, EnumString)]
|
||||
#[db_enum(existing_type_path = "crate::schema::sql_types::DidTargetType")]
|
||||
pub enum DidTargetType {
|
||||
#[db_enum(rename ="URL")]
|
||||
@@ -24,12 +25,12 @@ pub enum DidTargetType {
|
||||
CustomMessage
|
||||
}
|
||||
|
||||
#[derive(Queryable, Selectable, Serialize)]
|
||||
#[derive(Queryable, Selectable, Serialize, AsChangeset)]
|
||||
#[diesel(table_name = crate::schema::dids)]
|
||||
#[diesel(check_for_backend(diesel::pg::Pg))]
|
||||
pub struct Did {
|
||||
pub id: i32,
|
||||
pub did: String,
|
||||
pub did_number: String,
|
||||
pub target_type: DidTargetType,
|
||||
pub target: Option<String>,
|
||||
pub active: bool
|
||||
@@ -38,7 +39,7 @@ pub struct Did {
|
||||
#[derive(Insertable)]
|
||||
#[diesel(table_name = crate::schema::dids)]
|
||||
pub struct NewDid<'a> {
|
||||
pub did: &'a str,
|
||||
pub did_number: &'a str,
|
||||
pub target_type: DidTargetType,
|
||||
pub target: Option<&'a str>,
|
||||
pub active: bool
|
||||
@@ -52,15 +53,51 @@ pub fn connect() -> PgConnection {
|
||||
.unwrap_or_else(|_| panic!("Error connecting to database"))
|
||||
}
|
||||
|
||||
pub fn add_did() -> Result<Did, Error> {
|
||||
pub fn get_did(a_id :i32) -> Result<Did, Error> {
|
||||
use crate::schema::dids::dsl::*;
|
||||
|
||||
let mut conn = connect();
|
||||
let result = dids.find(a_id).first(&mut conn)?;
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn delete_did(i: i32) -> Result<(), Error> {
|
||||
use crate::schema::dids;
|
||||
use crate::schema::dids::columns::id;
|
||||
|
||||
let mut conn = connect();
|
||||
diesel::delete(dids::table)
|
||||
.filter(id.eq(i))
|
||||
.execute(&mut conn)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn update_did(d: Did)-> Result<(), Error> {
|
||||
use crate::schema::dids;
|
||||
use crate::schema::dids::dsl::*;
|
||||
|
||||
let mut conn = connect();
|
||||
|
||||
diesel::update(dids::table)
|
||||
.filter(id.eq(d.id))
|
||||
.set(d)
|
||||
.execute(&mut conn)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn add_did(did_number: &str, target_type: &str, target: &str, active: bool)
|
||||
-> Result<Did, Error> {
|
||||
use crate::schema::dids;
|
||||
|
||||
let mut conn = connect();
|
||||
let new_did = NewDid {
|
||||
did: "123456",
|
||||
target_type: DidTargetType::Url,
|
||||
target: Some("123456"),
|
||||
active: true
|
||||
did_number: did_number,
|
||||
target_type: DidTargetType::from_str(target_type).unwrap(),
|
||||
target: Some(target),
|
||||
active: active
|
||||
};
|
||||
|
||||
let did = diesel::insert_into(dids::table)
|
||||
|
||||
@@ -1,19 +1,35 @@
|
||||
pub mod database;
|
||||
pub mod schema;
|
||||
|
||||
use std::ops::Deref;
|
||||
use std::str::FromStr;
|
||||
use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
|
||||
use actix_web::{get, post, web, App,
|
||||
use actix_web::{web, App,
|
||||
HttpResponse,
|
||||
HttpServer,
|
||||
http::header::ContentType,
|
||||
Responder,
|
||||
};
|
||||
use serde::Deserialize;
|
||||
use database as db;
|
||||
use database::DidTargetType;
|
||||
|
||||
use database::{ add_did,
|
||||
list_did
|
||||
};
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct RouteData {
|
||||
#[serde(rename = "Caller-Destination-Number")]
|
||||
dest_did: String
|
||||
}
|
||||
|
||||
async fn route_did() -> impl Responder {
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct JsonDid {
|
||||
did_number: String,
|
||||
target_type: String,
|
||||
target: String,
|
||||
active: bool
|
||||
}
|
||||
|
||||
async fn route_did(data: web::Form<RouteData>) -> impl Responder {
|
||||
let _dest_did = data.dest_did.clone();
|
||||
let mut xml = XMLBuilder::new()
|
||||
.version(XMLVersion::XML1_1)
|
||||
.encoding("UTF-8".into())
|
||||
@@ -43,29 +59,60 @@ async fn route_did() -> impl Responder {
|
||||
.body(writer)
|
||||
}
|
||||
|
||||
async fn did_post() -> impl Responder {
|
||||
add_did().unwrap();
|
||||
async fn did_post(d: web::Json<JsonDid>) -> impl Responder {
|
||||
let did = d.deref();
|
||||
|
||||
db::add_did(&did.did_number, &did.target_type, &did.target, did.active).unwrap();
|
||||
HttpResponse::Ok().body("DID added.")
|
||||
}
|
||||
|
||||
async fn did_index() -> impl Responder {
|
||||
let dids = list_did().unwrap();
|
||||
let dids = db::list_did().unwrap();
|
||||
HttpResponse::Ok().json(dids)
|
||||
}
|
||||
|
||||
async fn did_get(path: web::Path<i32>) -> impl Responder {
|
||||
let id = path.into_inner();
|
||||
let did = db::get_did(id).unwrap();
|
||||
|
||||
HttpResponse::Ok().json(did)
|
||||
}
|
||||
|
||||
async fn did_patch(d: web::Json<JsonDid>, path: web::Path<i32>) -> impl Responder {
|
||||
let id = path.into_inner();
|
||||
let d = d.deref();
|
||||
let did = db::Did {
|
||||
id: id,
|
||||
did_number: d.did_number.clone(),
|
||||
target_type: DidTargetType::from_str(&d.target_type).unwrap(),
|
||||
target: Some(d.target.clone()),
|
||||
active: d.active
|
||||
};
|
||||
|
||||
db::update_did(did).unwrap();
|
||||
|
||||
HttpResponse::Ok().body("DID updated")
|
||||
}
|
||||
|
||||
async fn did_delete(path: web::Path<i32>) -> impl Responder {
|
||||
let id = path.into_inner();
|
||||
|
||||
db::delete_did(id).unwrap();
|
||||
|
||||
HttpResponse::Ok().body("DID deleted.")
|
||||
}
|
||||
|
||||
fn api_config(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(
|
||||
web::resource("/fs")
|
||||
.route(web::get().to(did_index))
|
||||
.route(web::post().to(did_post))
|
||||
.route(web::patch().to(|| async { HttpResponse::Ok().body("did patch") }))
|
||||
.route(web::delete().to(|| async { HttpResponse::Ok().body("did delete") }))
|
||||
);
|
||||
cfg.service(
|
||||
web::resource("/fs/{id}")
|
||||
.route(web::get().to(|| async { HttpResponse::Ok().body("did get")}))
|
||||
.route(web::patch().to(|| async { HttpResponse::Ok().body("did patch")}))
|
||||
.route(web::delete().to(|| async { HttpResponse::Ok().body("did delete")}))
|
||||
.route(web::get().to(did_get))
|
||||
.route(web::patch().to(did_patch))
|
||||
.route(web::delete().to(did_delete))
|
||||
);
|
||||
cfg.service(
|
||||
web::resource("/route_did")
|
||||
|
||||
@@ -13,7 +13,7 @@ diesel::table! {
|
||||
dids (id) {
|
||||
id -> Int4,
|
||||
#[max_length = 64]
|
||||
did -> Varchar,
|
||||
did_number -> Varchar,
|
||||
target_type -> DidTargetType,
|
||||
#[max_length = 512]
|
||||
target -> Nullable<Varchar>,
|
||||
|
||||
Reference in New Issue
Block a user