#!/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