From 78b04811b9edbd79f566218bf03729426ef040c0 Mon Sep 17 00:00:00 2001 From: tylen Date: Thu, 25 Sep 2025 01:13:11 +0300 Subject: [PATCH] backend: add users CRUD --- backend/src/server.py | 2 + backend/src/user.py | 111 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 backend/src/user.py diff --git a/backend/src/server.py b/backend/src/server.py index 905022f..e920d45 100644 --- a/backend/src/server.py +++ b/backend/src/server.py @@ -9,11 +9,13 @@ from flask import Flask, request, jsonify from dotenv import load_dotenv from db_client import DBClient from car import registerCarEndpoints +from user import registerUserEndpoints load_dotenv() app = Flask(__name__) database = DBClient() registerCarEndpoints(app=app, database=database) +registerUserEndpoints(app=app, database=database) @app.route('/login', methods=['POST']) def login(): diff --git a/backend/src/user.py b/backend/src/user.py new file mode 100644 index 0000000..167250d --- /dev/null +++ b/backend/src/user.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# encoding: utf-8 + +''' +user.py is a source for all user endpoints. +''' + +from flask import request, jsonify + +def registerUserEndpoints(app, database): + @app.route('/users', methods=['GET']) + def get_users(): + query = f'SELECT * from users' + users = database.query(query_str=query) + if not users: + return jsonify({"message": "No users exist"}), 404 + response = {} + for user in users: + if len(user) != 3: + return jsonify({'error': 'User data is corrupted'}), 500 + + response.update({ + "name": user[0], + "attendance": user[1], + "has_car": bool(user[2]) + }) + return jsonify(response), 200 + + @app.route('/user', methods=['GET']) + def get_user(): + if not request.is_json: + return jsonify({'error': 'Request must contain JSON data'}), 400 + + data = request.get_json() + + if not data.get('name'): + return jsonify({'error': 'Request must contain name field'}), 400 + + query = f'SELECT * from users WHERE name = %s' + output = database.query(query_str=query, params=(data['name'],)) + if not output: + return jsonify({"message": "No user by that name exist"}), 404 + user = output[0] + if len(user) != 3: + return jsonify({'error': 'User data is corrupted'}), 500 + + response = { + "name": user[0], + "attendance": user[1], + "has_car": bool(user[2]) + } + return jsonify(response), 200 + + @app.route('/user', methods=['POST']) + def add_user(): + if not request.is_json: + return jsonify({'error': 'Request must contain JSON data'}), 400 + + data = request.get_json() + if not data.get('name') or not data.get('attendance') or data.get('has_car') is None: + return jsonify({'error': 'JSON must contain user fields'}), 400 + + query = 'SELECT * from users WHERE name = %s' + output = database.query(query_str=query, params=(data['name'],)) + if output: + return jsonify({'error': 'A person already exists'}), 409 + + query = 'INSERT into users (Name, Attendance, HasCar) VALUES (%s, %s, %s)' + output = database.query(query_str=query, params=(data['name'],data['attendance'],data['has_car'])) + + database.commit() + return jsonify({"message": "user added", "user": data}), 200 + + @app.route('/user', methods=['UPDATE']) + def update_user(): + if not request.is_json: + return jsonify({'error': 'Request must contain JSON data'}), 400 + + data = request.get_json() + if not data.get('name') or not data.get('attendance') or data.get('has_car') is None: + return jsonify({'error': 'JSON must contain user fields'}), 400 + + query = 'SELECT * from users WHERE name = %s' + output = database.query(query_str=query, params=(data['name'],)) + if not output: + return jsonify({'error': 'Such user does not exist. Add it first'}), 409 + + query = 'UPDATE user SET Name = %s, Attendance = %s, HasCar = %s' + output = database.query(query_str=query, params=(data['name'],data['attendance'],data['has_car'])) + + database.commit() + return jsonify({"message": "user modified", "user": data}), 200 + + @app.route('/user', methods=['DELETE']) + def delete_user(): + if not request.is_json: + return jsonify({'error': 'Request must contain JSON data'}), 400 + + data = request.get_json() + if not data.get('name'): + return jsonify({'error': 'JSON must contain persons name to delete'}), 400 + + query = 'SELECT * from users WHERE name = %s' + output = database.query(query_str=query, params=(data['name'],)) + if not output: + return jsonify({'error': 'Such person does not exist'}), 409 + + query = 'DELETE FROM users WHERE Name = %s' + output = database.query(query_str=query, params=(data['name'],)) + database.commit() + return jsonify({"message": "user deleted"}), 200 \ No newline at end of file