diff --git a/src/forms.rs b/src/forms.rs index 4cd546a..0b5d6ef 100644 --- a/src/forms.rs +++ b/src/forms.rs @@ -6,14 +6,31 @@ use serde::Deserialize; use std::convert::TryFrom; #[derive(Deserialize)] -pub struct RegisterForm { +#[serde(rename_all = "lowercase")] +enum Action { + Register, + Update, + Delete, +} + +#[derive(Deserialize)] +pub struct ChangeForm { + action: Action, macaddr: String, descr: String, privacy: i8, } -impl RegisterForm { +impl ChangeForm { pub async fn handle(self, request: &crate::Request) -> Message { + match self.action { + Action::Register => self.register(request).await, + Action::Update => self.update(request).await, + Action::Delete => self.delete(request).await, + } + } + + pub async fn register(self, request: &crate::Request) -> Message { let privacy = match db::PrivacyLevel::try_from(self.privacy) { Ok(privacy) => privacy, Err(_) => return (Level::Error, "unable to parse privacy level".to_string()), @@ -39,17 +56,8 @@ impl RegisterForm { Err(_) => (Level::Error, "unable to create device".to_string()), }; } -} -#[derive(Deserialize)] -pub struct UpdateForm { - macaddr: String, - descr: String, - privacy: i8, -} - -impl UpdateForm { - pub async fn handle(self, request: &crate::Request) -> Message { + pub async fn update(self, request: &crate::Request) -> Message { let mut device = match db::Device::for_mac(&self.macaddr) .fetch_one(&request.state().pool) .await @@ -77,15 +85,8 @@ impl UpdateForm { Err(_) => (Level::Error, "unable to update device".to_string()), } } -} -#[derive(Deserialize)] -pub struct DeleteForm { - macaddr: String, -} - -impl DeleteForm { - pub async fn handle(self, request: &crate::Request) -> Message { + pub async fn delete(self, request: &crate::Request) -> Message { let device = match db::Device::for_mac(&self.macaddr) .fetch_one(&request.state().pool) .await diff --git a/src/main.rs b/src/main.rs index 875719a..8a47663 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,9 +62,7 @@ async fn main() -> Result<(), io::Error> { let mut app = tide::with_state(State { pool }); app.with(session_store); app.at("/").get(routes::index); - app.at("/register").post(routes::register); - app.at("/update").post(routes::update); - app.at("/delete").post(routes::delete); + app.at("/change").post(routes::change); app.at("/healthz").get(routes::healthz); app.at("/static").serve_dir("static/")?; app.listen(config.listen).await diff --git a/src/routes.rs b/src/routes.rs index 784289c..7415e8e 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -22,22 +22,8 @@ pub async fn index(mut request: crate::Request) -> tide::Result { Ok(templates::IndexTemplate::new(my, unassinged, messages).into()) } -pub async fn register(mut request: crate::Request) -> tide::Result { - let form: forms::RegisterForm = request.body_form().await?; - let message = form.handle(&request).await; - Session::from(&mut request).add_message(message); - Ok(Redirect::see_other("/").into()) -} - -pub async fn update(mut request: crate::Request) -> tide::Result { - let form: forms::UpdateForm = request.body_form().await?; - let message = form.handle(&request).await; - Session::from(&mut request).add_message(message); - Ok(Redirect::see_other("/").into()) -} - -pub async fn delete(mut request: crate::Request) -> tide::Result { - let form: forms::DeleteForm = request.body_form().await?; +pub async fn change(mut request: crate::Request) -> tide::Result { + let form: forms::ChangeForm = request.body_form().await?; let message = form.handle(&request).await; Session::from(&mut request).add_message(message); Ok(Redirect::see_other("/").into()) diff --git a/templates/index.html b/templates/index.html index 78ca8ec..89083e9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -15,7 +15,7 @@

macnickenson

-
+
{% for message in messages %} {{ message.1 }} {% endfor %} @@ -24,7 +24,7 @@

Your Devices:

{% for device in my %} -
+
{{ device.macaddr }} {{ device.present }} @@ -58,7 +58,7 @@ class="rounded bg-gray-300 font-bold px-2 bg-green-500"> Update - @@ -70,7 +70,7 @@

Unregistred Devices:

{% for device in unassinged %} - +
{{ device.macaddr }} @@ -92,7 +92,7 @@