From 11d714fe9441ebfd794964b560ba4b5bc249991c Mon Sep 17 00:00:00 2001 From: cupcakearmy Date: Sun, 2 May 2021 12:32:03 +0200 Subject: [PATCH] serve spa --- src/client.rs | 10 ++++++++++ src/main.rs | 7 ++++++- src/note/routes.rs | 39 +++++++-------------------------------- src/store.rs | 28 ++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 src/client.rs create mode 100644 src/store.rs diff --git a/src/client.rs b/src/client.rs new file mode 100644 index 0000000..796da37 --- /dev/null +++ b/src/client.rs @@ -0,0 +1,10 @@ +use actix_files::{Files, NamedFile}; +use actix_web::{web, Responder}; + +pub fn init(cfg: &mut web::ServiceConfig) { + cfg.service(Files::new("/", "./client/build").index_file("index.html")); +} + +pub async fn fallback_fn() -> impl Responder { + NamedFile::open("./client/build/index.html") +} diff --git a/src/main.rs b/src/main.rs index b8f4d45..0f6cd56 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,11 @@ -use actix_web::{middleware, App, HttpServer}; +use actix_web::{middleware, web, App, HttpServer}; #[macro_use] extern crate lazy_static; +mod client; mod note; +mod store; #[actix_web::main] async fn main() -> std::io::Result<()> { @@ -11,7 +13,10 @@ async fn main() -> std::io::Result<()> { App::new() .wrap(middleware::Compress::default()) .wrap(middleware::DefaultHeaders::default()) + // .wrap(middleware::NormalizePath::default()) .configure(note::init) + .configure(client::init) + .default_service(web::resource("").route(web::get().to(client::fallback_fn))) }) .bind("127.0.0.1:5000")? .run() diff --git a/src/note/routes.rs b/src/note/routes.rs index 34bb902..03e9c09 100644 --- a/src/note/routes.rs +++ b/src/note/routes.rs @@ -1,9 +1,9 @@ use actix_web::{delete, get, post, web, HttpResponse, Responder}; -use memcache; use serde::{Deserialize, Serialize}; use std::time::SystemTime; use crate::note::{generate_id, Note, NoteInfo, NotePublic}; +use crate::store; fn now() -> u64 { SystemTime::now() @@ -12,31 +12,6 @@ fn now() -> u64 { .as_secs() } -lazy_static! { - static ref CLIENT: memcache::Client = - memcache::connect("memcache://127.0.0.1:11211?timeout=10&tcp_nodelay=true").unwrap(); -} - -fn set(id: &String, note: &Note) { - let serialized = serde_json::to_string(¬e.clone()).unwrap(); - CLIENT.set(id, serialized, 0).unwrap(); -} - -fn get(id: &String) -> Option { - let value: Option = CLIENT.get(&id).unwrap(); - match value { - None => return None, - Some(s) => { - let deserialize: Note = serde_json::from_str(&s).unwrap(); - return Some(deserialize); - } - } -} - -fn del(id: &String) { - CLIENT.delete(id).unwrap(); -} - #[derive(Serialize, Deserialize)] struct NotePath { id: String, @@ -45,7 +20,7 @@ struct NotePath { #[get("/notes/{id}")] async fn one(path: web::Path) -> impl Responder { let p = path.into_inner(); - let note = get(&p.id); + let note = store::get(&p.id); match note { None => return HttpResponse::NotFound().finish(), Some(note) => { @@ -86,14 +61,14 @@ async fn create(note: web::Json) -> impl Responder { } _ => {} } - set(&id.clone(), &n.clone()); + store::set(&id.clone(), &n.clone()); return HttpResponse::Ok().json(CreateResponse { id: id }); } #[delete("/notes/{id}")] async fn delete(path: web::Path) -> impl Responder { let p = path.into_inner(); - let note = get(&p.id); + let note = store::get(&p.id); match note { None => return HttpResponse::NotFound().finish(), Some(note) => { @@ -106,9 +81,9 @@ async fn delete(path: web::Path) -> impl Responder { changed.views = Some(v - 1); let id = p.id.clone(); if v <= 1 { - del(&id); + store::del(&id); } else { - set(&id, &changed.clone()); + store::set(&id, &changed.clone()); } } _ => {} @@ -116,7 +91,7 @@ async fn delete(path: web::Path) -> impl Responder { match changed.expiration { Some(e) => { if e > now() { - del(&p.id.clone()); + store::del(&p.id.clone()); return HttpResponse::BadRequest().finish(); } } diff --git a/src/store.rs b/src/store.rs new file mode 100644 index 0000000..5eb9e73 --- /dev/null +++ b/src/store.rs @@ -0,0 +1,28 @@ +use memcache; + +use crate::note::Note; + +lazy_static! { + static ref CLIENT: memcache::Client = + memcache::connect("memcache://127.0.0.1:11211?timeout=10&tcp_nodelay=true").unwrap(); +} + +pub fn set(id: &String, note: &Note) { + let serialized = serde_json::to_string(¬e.clone()).unwrap(); + CLIENT.set(id, serialized, 0).unwrap(); +} + +pub fn get(id: &String) -> Option { + let value: Option = CLIENT.get(&id).unwrap(); + match value { + None => return None, + Some(s) => { + let deserialize: Note = serde_json::from_str(&s).unwrap(); + return Some(deserialize); + } + } +} + +pub fn del(id: &String) { + CLIENT.delete(id).unwrap(); +}