From 0c2c428ce4411fcac8b6fb243eb4bbe6a919268c Mon Sep 17 00:00:00 2001 From: Johannes Randerath Date: Wed, 28 Aug 2024 22:18:53 +0200 Subject: [PATCH] Added add column button --- inventur_db/src/jrcolumns.rs | 10 +++---- inventur_db/src/lib.rs | 6 ++--- src/main.rs | 2 +- src/table.rs | 38 +++++++++++++++++++++++++++ templates/table.html.tera | 51 +++++++++++++++++++++++++++++++++--- 5 files changed, 94 insertions(+), 13 deletions(-) diff --git a/inventur_db/src/jrcolumns.rs b/inventur_db/src/jrcolumns.rs index aa5304b..3543c5c 100644 --- a/inventur_db/src/jrcolumns.rs +++ b/inventur_db/src/jrcolumns.rs @@ -4,7 +4,7 @@ use crate::models; use crate::schema; use crate::jrtables; use models::{ Jrcolumn, NewJrcolumn }; -use schema::jrcolumns::dsl::{ jrcolumns, id, name, jrtable_id, id_in_table }; +use schema::jrcolumns::dsl::{ jrcolumns, id, name, jrtable_id, id_in_table, column_type }; pub fn create_jrcolumn(conn: &mut MysqlConnection, tblid: i32, clmnname: String, clmtype: crate::FIELDTYPE) -> Result { @@ -78,17 +78,17 @@ pub fn get_clmid_relative(conn: &mut MysqlConnection, tblid: i32, idintbl: i32) .first::(conn) } -pub fn rename_column_relative(conn: &mut MysqlConnection, tblid: i32, id_in_tbl: i32, new_name: String) -> Result { +pub fn edit_column_relative(conn: &mut MysqlConnection, tblid: i32, id_in_tbl: i32, new_name: &String, clmtype: crate::FIELDTYPE) -> Result { let clmid = get_clmid_relative(conn, tblid, id_in_tbl); if clmid.is_err() { return Err(clmid.err().unwrap()); } - rename_column(conn, clmid.unwrap(), new_name) + edit_column(conn, clmid.unwrap(), new_name, clmtype) } -pub fn rename_column(conn: &mut MysqlConnection, clmnid: i32, new_name: String) -> Result { +pub fn edit_column(conn: &mut MysqlConnection, clmnid: i32, new_name: &String, clmtype: crate::FIELDTYPE) -> Result { diesel::update(jrcolumns.find(clmnid)) - .set(name.eq(new_name)) + .set((name.eq(new_name), column_type.eq(clmtype as i32))) .execute(conn) } diff --git a/inventur_db/src/lib.rs b/inventur_db/src/lib.rs index 127470a..899e6eb 100644 --- a/inventur_db/src/lib.rs +++ b/inventur_db/src/lib.rs @@ -185,7 +185,7 @@ pub fn search_table(tbl: Tbl, search_fields: Vec, search_value: String) -> let mut field_sets = HashSet::new(); for field in search_fields { for row in &rows { - if row.cells[field as usize].to_lowercase().contains(&search_value) { + if row.cells[field as usize].to_lowercase().contains(&search_value.to_lowercase()) { field_sets.insert(row.clone()); } } @@ -405,11 +405,11 @@ pub fn delete_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, ui Some(true) } -pub fn rename_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, new_name: String, uid: i32) -> Option { +pub fn edit_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, new_name: &String, new_type: FIELDTYPE, uid: i32) -> Option { let owner = jrtables::get_owner_id(conn, tblid); if owner.is_err() || owner.unwrap() != uid || - jrcolumns::rename_column_relative(conn, tblid, column_pos, new_name).is_err() + jrcolumns::edit_column_relative(conn, tblid, column_pos, new_name, new_type).is_err() { return None; } diff --git a/src/main.rs b/src/main.rs index 591a6ac..d5bdda3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -67,7 +67,7 @@ async fn rocket() -> _ { .mount("/", routes![auth::oauth_login, auth::oauth_callback, home, login_home]) .mount("/table", routes![table::table, table::table_sec, table::edit_tname, table::create, table::import_table, table::delete_table]) .mount("/row", routes![table::new_entry, table::edit_entry, table::delete_entry]) - .mount("/column", routes![table::delete_column]) + .mount("/column", routes![table::delete_column, table::edit_column]) .register("/", catchers![auth::redirect_to_login]) .mount("/static", FileServer::from(relative!("static"))) diff --git a/src/table.rs b/src/table.rs index 1fe5ce6..5356040 100644 --- a/src/table.rs +++ b/src/table.rs @@ -17,6 +17,21 @@ struct DeleteColumn { id_in_table: i32, } +#[derive(FromForm)] +struct EditColumn { + tblid: i32, + id_in_table: i32, + name: String, + column_type: isize, +} + +#[derive(FromForm)] +struct NewColumn { + tblid: i32, + name: String, + column_type: isize, +} + #[derive(FromForm)] struct NewEntry { tblid: i32, @@ -201,6 +216,29 @@ pub async fn delete_entry(conn: Db, data: Form, user: AuthUser) -> Ok(Redirect::to(uri!("/table", table_sec(tblid)))) } +#[post("/create", data="")] +pub async fn create_column(conn: Db, data: Form, user: AuthUser) -> Result { + let uid = user.uid; + let tblid = data.tblid; + let coltype = FIELDTYPE::from(data.column_type); + if conn.run(move |c| inventur_db::add_column(c, tblid, data.name.clone(), coltype, uid)).await.is_none() { + return Err(Status::Forbidden); + } + Ok(Redirect::to(uri!("/table", table_sec(tblid)))) +} + +#[post("/edit", data="")] +pub async fn edit_column(conn: Db, data: Form, user: AuthUser) -> Result { + let uid = user.uid; + let tblid = data.tblid; + let idintbl = data.id_in_table; + let clmtype = FIELDTYPE::from(data.column_type); + if conn.run(move |c| inventur_db::edit_column(c, tblid, idintbl, &data.name, clmtype, uid)).await.is_none() { + return Err(Status::Forbidden); + } + Ok(Redirect::to(uri!("/table", table_sec(tblid)))) +} + #[post("/delete", data="")] pub async fn delete_column(conn: Db, data: Form, user: AuthUser) -> Result { let uid = user.uid; diff --git a/templates/table.html.tera b/templates/table.html.tera index f2fc064..a681b68 100644 --- a/templates/table.html.tera +++ b/templates/table.html.tera @@ -73,6 +73,7 @@ document.getElementById('form_edit_column_type').value = column_types[clmn_index]; document.getElementById('modal_caller').innerHTML = column_names[clmn_index]; document.getElementById('form_delete_column_idintbl').value = clmn_index + 1; + document.getElementById('form_edit_column_idintbl').value = clmn_index + 1; } {% endblock script %} @@ -84,7 +85,7 @@