From c3ffd3d9a777a06bedd1ff7945df24554f8ca932 Mon Sep 17 00:00:00 2001 From: James2Tulloch <146088090+James2Tulloch@users.noreply.github.com> Date: Tue, 25 Feb 2025 09:46:45 +0000 Subject: [PATCH] Starting Year/Ending year added to db and register page --- .../myapp/templates/myapp/register.html | 6 +++++ django_project/myapp/views.py | 22 ++++++++++++++----- rust_crud_api/src/db/groups.rs | 2 ++ rust_crud_api/src/db/init.rs | 4 +++- rust_crud_api/src/db/users.rs | 18 ++++++++++----- rust_crud_api/src/models/user.rs | 4 ++++ 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/django_project/myapp/templates/myapp/register.html b/django_project/myapp/templates/myapp/register.html index f8943b5..e950129 100644 --- a/django_project/myapp/templates/myapp/register.html +++ b/django_project/myapp/templates/myapp/register.html @@ -29,7 +29,13 @@ <label for="id_studentid">studentid:</label> <input type="studentid" name="studentid" id="id_studentid" required><br><br> + + <label for="id_startyear">Starting Year:</label> + <input type="starttear" name="startyear" id="id_startyear" required><br><br> + <label for="id_endyear">Ending Year:</label> + <input type="endyear" name="endyear" id="id_endyear" required><br><br> + <button type="submit">Register</button> </form> <p> diff --git a/django_project/myapp/views.py b/django_project/myapp/views.py index 68e6b17..f77ee73 100644 --- a/django_project/myapp/views.py +++ b/django_project/myapp/views.py @@ -29,9 +29,10 @@ def register_view(request): password = request.POST.get('password', '').strip() username = request.POST.get('username', '').strip() studentid_str = request.POST.get('studentid', '').strip() - + startyear = request.POST.get('startyear', '').strip() + endyear = request.POST.get('endyear', '').strip() # 1. Check required fields - if not all([name, email, password, username, studentid_str]): + if not all([name, email, password, username, studentid_str, startyear, endyear]): context['error'] = "Name, email, username, student ID, and password are required." return render(request, 'myapp/register.html', context) @@ -39,12 +40,23 @@ def register_view(request): try: studentid = int(studentid_str) except ValueError: - context['error'] = "Student ID must be an integer." + context['error'] = "Student ID must be an number." + return render(request, 'myapp/register.html', context) + + try: + startyear = int(startyear) + except ValueError: + context['error'] = "Start year must be an number." + return render(request, 'myapp/register.html', context) + + try: + endyear = int(endyear) + except ValueError: + context['error'] = "End year must be an number." return render(request, 'myapp/register.html', context) - # 3. If the parse succeeded, call create_user in Rust try: - rust_crud_api.create_user(db_url, name, email, password, username, studentid) + rust_crud_api.create_user(db_url, name, email, password, username, studentid, startyear, endyear) # 4. Redirect on success return redirect('login') except Exception as e: diff --git a/rust_crud_api/src/db/groups.rs b/rust_crud_api/src/db/groups.rs index 73e3492..c6d5d77 100644 --- a/rust_crud_api/src/db/groups.rs +++ b/rust_crud_api/src/db/groups.rs @@ -83,6 +83,8 @@ pub fn get_group_members(db_url: &str, group_id: i32) -> PyResult<Vec<User>> { email: row.get(2), username: row.get(3), studentid: row.get(4), + startyear: row.get(5), + endyear: row.get(6), }).collect(); Ok(users) diff --git a/rust_crud_api/src/db/init.rs b/rust_crud_api/src/db/init.rs index 12f9545..73abf83 100644 --- a/rust_crud_api/src/db/init.rs +++ b/rust_crud_api/src/db/init.rs @@ -17,7 +17,9 @@ pub fn init_db(db_url: &str) -> PyResult<()> { email VARCHAR NOT NULL UNIQUE, password_hash VARCHAR NOT NULL, username VARCHAR NOT NULL, - studentid INT NOT NULL UNIQUE + studentid INT NOT NULL UNIQUE, + startyear INT NOT NULL, + endyear INT NOT NULL ); CREATE TABLE IF NOT EXISTS groups ( id SERIAL PRIMARY KEY, diff --git a/rust_crud_api/src/db/users.rs b/rust_crud_api/src/db/users.rs index 3689f1b..edb56a4 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,) -> PyResult<()> { + db_url: &str, name: &str, email: &str, password: &str, username: &str, studentid: i32, startyear: i32, endyear: i32) -> 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) - VALUES ($1, $2, $3, $4, $5)", - &[&name, &email, &password_hash, &username, &studentid], + "INSERT INTO users (name, email, password_hash, username, studentid, startyear, endyear) + VALUES ($1, $2, $3, $4, $5, $6, $7)", + &[&name, &email, &password_hash, &username, &studentid, &startyear, &endyear], ); 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 FROM users WHERE id = $1", + "SELECT id, name, email, username, studentid, startyear, endyear FROM users WHERE id = $1", &[&user_id] ).map_err(pg_err)?; @@ -53,6 +53,9 @@ pub fn get_user(db_url: &str, user_id: i32) -> PyResult<Option<User>> { email: row.get(2), username: row.get(3), studentid: row.get(4), + startyear: row.get(5), + endyear: row.get(6), + }; Ok(Some(user)) } else { @@ -64,7 +67,7 @@ pub fn get_user(db_url: &str, user_id: i32) -> PyResult<Option<User>> { #[pyfunction] pub fn get_all_users(db_url: &str) -> PyResult<Vec<User>> { let mut client = Client::connect(db_url, NoTls).map_err(pg_err)?; - let rows = client.query("SELECT id, name, email, username, studentid FROM users", &[]) + let rows = client.query("SELECT id, name, email, username, studentid, startyear, endyear FROM users", &[]) .map_err(pg_err)?; let mut users = Vec::new(); @@ -75,6 +78,9 @@ pub fn get_all_users(db_url: &str) -> PyResult<Vec<User>> { email: row.get(2), username: row.get(3), studentid: row.get(4), + startyear: row.get(5), + endyear: row.get(6), + }); } Ok(users) diff --git a/rust_crud_api/src/models/user.rs b/rust_crud_api/src/models/user.rs index 2b50363..ef54873 100644 --- a/rust_crud_api/src/models/user.rs +++ b/rust_crud_api/src/models/user.rs @@ -14,5 +14,9 @@ pub struct User { pub username: String, #[pyo3(get,set)] pub studentid: i32, + #[pyo3(get,set)] + pub startyear: i32, + #[pyo3(get,set)] + pub endyear: i32, } -- GitLab