feat: use objects from libforms for uniformity
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
da3d3635b5
commit
7e50f9be0d
4 changed files with 28 additions and 48 deletions
9
Cargo.lock
generated
9
Cargo.lock
generated
|
@ -784,6 +784,7 @@ dependencies = [
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"libforms",
|
||||||
"pretty_env_logger",
|
"pretty_env_logger",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
@ -1146,6 +1147,14 @@ version = "0.2.139"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libforms"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
version = "0.5.6"
|
version = "0.5.6"
|
||||||
|
|
|
@ -27,6 +27,7 @@ serde_json = { version ="1", features = ["raw_value"]}
|
||||||
sqlx = { version = "0.6.2", features = ["runtime-actix-rustls", "postgres", "time", "offline", "json"] }
|
sqlx = { version = "0.6.2", features = ["runtime-actix-rustls", "postgres", "time", "offline", "json"] }
|
||||||
clap = { vesrion = "3.2.20", features = ["derive"]}
|
clap = { vesrion = "3.2.20", features = ["derive"]}
|
||||||
tracing = { version = "0.1.37", features = ["log"] }
|
tracing = { version = "0.1.37", features = ["log"] }
|
||||||
|
libforms = { path = "./env/libforms" }
|
||||||
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|
|
@ -18,6 +18,7 @@ use std::collections::HashMap;
|
||||||
|
|
||||||
use actix_web::{web, HttpResponse, Responder};
|
use actix_web::{web, HttpResponse, Responder};
|
||||||
use actix_web_httpauth::middleware::HttpAuthentication;
|
use actix_web_httpauth::middleware::HttpAuthentication;
|
||||||
|
use libforms::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::db::FormSubmission;
|
use crate::db::FormSubmission;
|
||||||
|
@ -61,53 +62,6 @@ pub fn services(cfg: &mut web::ServiceConfig) {
|
||||||
cfg.service(delete_submission);
|
cfg.service(delete_submission);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Debug)]
|
|
||||||
#[serde(untagged)]
|
|
||||||
enum FormDType {
|
|
||||||
Num(f64),
|
|
||||||
Str(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FormDType {
|
|
||||||
fn apply_types(&mut self) {
|
|
||||||
if let Self::Str(data) = self {
|
|
||||||
if let Ok(num) = data.parse::<f64>() {
|
|
||||||
*self = Self::Num(num);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type FormValue = HashMap<String, FormDType>;
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
struct Page {
|
|
||||||
page: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
pub struct Table {
|
|
||||||
pub host: String,
|
|
||||||
pub path: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
|
|
||||||
pub struct FormSubmissionResp {
|
|
||||||
pub value: Option<serde_json::Value>,
|
|
||||||
pub time: i64,
|
|
||||||
pub id: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<FormSubmission> for FormSubmissionResp {
|
|
||||||
fn from(f: FormSubmission) -> Self {
|
|
||||||
Self {
|
|
||||||
value: f.value,
|
|
||||||
time: f.time.unix_timestamp(),
|
|
||||||
id: f.id as usize,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[actix_web_codegen_const_routes::post(
|
#[actix_web_codegen_const_routes::post(
|
||||||
path = "API_V1_ROUTES.forms.delete",
|
path = "API_V1_ROUTES.forms.delete",
|
||||||
wrap = "HttpAuthentication::bearer(bearerauth)"
|
wrap = "HttpAuthentication::bearer(bearerauth)"
|
||||||
|
@ -124,6 +78,11 @@ async fn delete_submission(
|
||||||
Ok(HttpResponse::Ok())
|
Ok(HttpResponse::Ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
struct Page {
|
||||||
|
page: usize,
|
||||||
|
}
|
||||||
|
|
||||||
#[actix_web_codegen_const_routes::post(
|
#[actix_web_codegen_const_routes::post(
|
||||||
path = "API_V1_ROUTES.forms.get_all",
|
path = "API_V1_ROUTES.forms.get_all",
|
||||||
wrap = "HttpAuthentication::bearer(bearerauth)"
|
wrap = "HttpAuthentication::bearer(bearerauth)"
|
||||||
|
@ -140,7 +99,7 @@ async fn list_all(
|
||||||
.await?;
|
.await?;
|
||||||
let mut resp: Vec<FormSubmissionResp> = Vec::with_capacity(subs.len());
|
let mut resp: Vec<FormSubmissionResp> = Vec::with_capacity(subs.len());
|
||||||
for sub in subs.drain(0..) {
|
for sub in subs.drain(0..) {
|
||||||
resp.push(sub.into());
|
resp.push(sub.to_resp());
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().json(resp))
|
Ok(HttpResponse::Ok().json(resp))
|
||||||
|
|
11
src/db.rs
11
src/db.rs
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
use libforms::FormSubmissionResp;
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use sqlx::types::time::OffsetDateTime;
|
use sqlx::types::time::OffsetDateTime;
|
||||||
//use sqlx::types::Json;
|
//use sqlx::types::Json;
|
||||||
|
@ -203,6 +204,16 @@ pub struct FormSubmission {
|
||||||
pub time: OffsetDateTime,
|
pub time: OffsetDateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FormSubmission {
|
||||||
|
pub fn to_resp(self) -> FormSubmissionResp {
|
||||||
|
FormSubmissionResp {
|
||||||
|
value: self.value,
|
||||||
|
time: self.time.unix_timestamp(),
|
||||||
|
id: self.id as usize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn now_unix_time_stamp() -> OffsetDateTime {
|
fn now_unix_time_stamp() -> OffsetDateTime {
|
||||||
OffsetDateTime::now_utc()
|
OffsetDateTime::now_utc()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue