backend: add users CRUD

This commit is contained in:
tylen 2025-09-25 01:13:11 +03:00
parent 42635e2281
commit 78b04811b9
2 changed files with 113 additions and 0 deletions

View File

@ -9,11 +9,13 @@ from flask import Flask, request, jsonify
from dotenv import load_dotenv from dotenv import load_dotenv
from db_client import DBClient from db_client import DBClient
from car import registerCarEndpoints from car import registerCarEndpoints
from user import registerUserEndpoints
load_dotenv() load_dotenv()
app = Flask(__name__) app = Flask(__name__)
database = DBClient() database = DBClient()
registerCarEndpoints(app=app, database=database) registerCarEndpoints(app=app, database=database)
registerUserEndpoints(app=app, database=database)
@app.route('/login', methods=['POST']) @app.route('/login', methods=['POST'])
def login(): def login():

111
backend/src/user.py Normal file
View File

@ -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