From 242ec6badf38ca9dbdac3bb5623f375d29e99775 Mon Sep 17 00:00:00 2001 From: James2Tulloch <146088090+James2Tulloch@users.noreply.github.com> Date: Sun, 2 Mar 2025 11:51:30 +0000 Subject: [PATCH] First pass of firstlogin bool --- django_project/myapp/views/userviews.py | 4 +++- rust_crud_api/src/db/groups.rs | 3 ++- rust_crud_api/src/db/init.rs | 1 + rust_crud_api/src/db/mod.rs | 2 +- rust_crud_api/src/db/users.rs | 25 ++++++++++++++++++++----- rust_crud_api/src/models/user.rs | 2 ++ 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/django_project/myapp/views/userviews.py b/django_project/myapp/views/userviews.py index d4e21c4..0c5bedf 100644 --- a/django_project/myapp/views/userviews.py +++ b/django_project/myapp/views/userviews.py @@ -24,6 +24,7 @@ def register_view(request): studentid_str = request.POST.get('studentid', '').strip() startyear_str = request.POST.get('startyear', '').strip() endyear_str = request.POST.get('endyear', '').strip() + # 1. Check required fields if not all([name, email, password, username, studentid_str, startyear_str, endyear_str]): @@ -89,7 +90,8 @@ def register_view(request): studentid, startyear, endyear, - saved_path + saved_path, + True ) # 5. After successful registration, redirect to login or some other page return redirect('login') diff --git a/rust_crud_api/src/db/groups.rs b/rust_crud_api/src/db/groups.rs index 6b0c264..5ef592d 100644 --- a/rust_crud_api/src/db/groups.rs +++ b/rust_crud_api/src/db/groups.rs @@ -85,7 +85,8 @@ pub fn get_group_members(db_url: &str, group_id: i32) -> PyResult<Vec<User>> { studentid: row.get(4), startyear: row.get(5), endyear: row.get(6), - profilepicture: row.get(7) + profilepicture: row.get(7), + firstlogin: row.get(8) }).collect(); Ok(users) diff --git a/rust_crud_api/src/db/init.rs b/rust_crud_api/src/db/init.rs index aa85fa7..1c45983 100644 --- a/rust_crud_api/src/db/init.rs +++ b/rust_crud_api/src/db/init.rs @@ -21,6 +21,7 @@ pub fn init_db(db_url: &str) -> PyResult<()> { startyear INT NOT NULL, endyear INT NOT NULL, profilepicture VARCHAR + firstlogin BOOLEAN NOT NULL DEFAULT TRUE, ); CREATE TABLE IF NOT EXISTS groups ( id SERIAL PRIMARY KEY, diff --git a/rust_crud_api/src/db/mod.rs b/rust_crud_api/src/db/mod.rs index d718c04..b59c637 100644 --- a/rust_crud_api/src/db/mod.rs +++ b/rust_crud_api/src/db/mod.rs @@ -4,6 +4,6 @@ pub mod init; pub mod posts; pub use init::init_db; -pub use users::{create_user, get_user, get_all_users, update_user, delete_user}; +pub use users::{create_user, get_user, get_all_users, update_user, delete_user, update_first_login}; pub use groups::{create_group, get_group, get_all_groups, add_user_to_group, get_group_members, delete_group}; pub use posts::{create_post, get_user_posts, get_group_posts, get_feed}; diff --git a/rust_crud_api/src/db/users.rs b/rust_crud_api/src/db/users.rs index 79cf346..ec15724 100644 --- a/rust_crud_api/src/db/users.rs +++ b/rust_crud_api/src/db/users.rs @@ -11,13 +11,13 @@ fn pg_err(e: postgres::Error) -> PyErr { #[pyfunction] pub fn create_user( - db_url: &str, name: &str, email: &str, password: &str, username: &str, studentid: i32, startyear: i32, endyear: i32, profilepicture: Option<&str>,) -> PyResult<()> { + db_url: &str, name: &str, email: &str, password: &str, username: &str, studentid: i32, startyear: i32, endyear: i32, profilepicture: Option<&str>, firstlogin: bool) -> PyResult<()> { let password_hash = hash_password(password)?; let mut client = Client::connect(db_url, NoTls).map_err(pg_err)?; let result = client.execute( - "INSERT INTO users (name, email, password_hash, username, studentid, startyear, endyear, profilepicture) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", - &[&name, &email, &password_hash, &username, &studentid, &startyear, &endyear, &profilepicture], + "INSERT INTO users (name, email, password_hash, username, studentid, startyear, endyear, profilepicture, firstlogin) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + &[&name, &email, &password_hash, &username, &studentid, &startyear, &endyear, &profilepicture, &firstlogin], ); match result { @@ -42,7 +42,7 @@ pub fn create_user( pub fn get_user(db_url: &str, user_id: i32) -> PyResult<Option<User>> { let mut client = Client::connect(db_url, NoTls).map_err(pg_err)?; let row_opt = client.query_opt( - "SELECT id, name, email, username, studentid, startyear, endyear, profilepicture FROM users WHERE id = $1", + "SELECT id, name, email, username, studentid, startyear, endyear, profilepicture, firstlogin FROM users WHERE id = $1", &[&user_id] ).map_err(pg_err)?; @@ -56,6 +56,7 @@ pub fn get_user(db_url: &str, user_id: i32) -> PyResult<Option<User>> { startyear: row.get(5), endyear: row.get(6), profilepicture: row.get(7), + firstlogin: row.get(8), }; Ok(Some(user)) @@ -82,6 +83,7 @@ pub fn get_all_users(db_url: &str) -> PyResult<Vec<User>> { startyear: row.get(5), endyear: row.get(6), profilepicture: row.get(7), + firstlogin: row.get(8), }); } @@ -145,3 +147,16 @@ pub fn update_user_profile_picture(db_url: &str, user_id: i32, path: &str) -> Py } } +#[pyfunction] +pub fn update_first_login(db_url: &str, user_id: i32, first_login: bool) -> PyResult<()> { + let mut client = Client::connect(db_url, NoTls).map_err(pg_err)?; + let updated = client.execute( + "UPDATE users SET first_login = $1 WHERE id = $2", + &[&first_login, &user_id], + ).map_err(pg_err)?; + if updated == 0 { + Err(PyRuntimeError::new_err("User not found")) + } else { + Ok(()) + } +} diff --git a/rust_crud_api/src/models/user.rs b/rust_crud_api/src/models/user.rs index b1530f9..65fbdb9 100644 --- a/rust_crud_api/src/models/user.rs +++ b/rust_crud_api/src/models/user.rs @@ -20,5 +20,7 @@ pub struct User { pub endyear: i32, #[pyo3(get,set)] pub profilepicture: Option<String>, + #[pyo3(get,set)] + pub firstlogin: bool, } -- GitLab