diff --git a/.env.dist b/.env.dist new file mode 100644 index 0000000000000000000000000000000000000000..7c26e96577a539823ed3caad91f659ce9428aa16 --- /dev/null +++ b/.env.dist @@ -0,0 +1,10 @@ +# Flask app settings + +MYSQL_HOST= +MYSQL_USER= +MYSQL_PASSWORD= +MYSQL_DB= + +# MySQL settings +MYSQL_DATABASE= +MYSQL_ROOT_PASSWORD= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..26f1a2243177f73bdaf62de1e0dba04ef49aade7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__ +.env +docker-compose.yaml +Dockerfile \ No newline at end of file diff --git a/README.md b/README.md index 9a632cb719371a4d0667cf6fcb51b0fe8efb8596..e223949c00b3b14d50b9da070c684917d367b393 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,7 @@ - ecrire le dockerfile pour conteneuriser l'application - ecrire le docker-compose file pour lancer le conteneur - utiliser les commandes de base git pour créer les branches puis les merger dans une barnche par default + +# Flask MySQL CRUD Application + +Il s'agit d'une application Flask simple qui effectue des opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) sur une base de données MySQL. L'application est Dockerisée à l'aide de Docker Compose, qui orchestre l'application Flask et les services MySQL. diff --git a/app.py b/app.py index def6287b599f84a218be9aef1ae85bc99013e544..06c20348472084043422be273ba4443a17c3eb4b 100644 --- a/app.py +++ b/app.py @@ -1,14 +1,77 @@ -from flask import Flask +from flask import Flask, jsonify, request, redirect, url_for +from flask_mysqldb import MySQL +import MySQLdb.cursors import os app = Flask(__name__) +# MySQL configurations +app.config['MYSQL_HOST'] = os.getenv('MYSQL_HOST') +app.config['MYSQL_USER'] = os.getenv('MYSQL_USER') +app.config['MYSQL_PASSWORD'] = os.getenv('MYSQL_PASSWORD') +app.config['MYSQL_DB'] = os.getenv('MYSQL_DB') -name = os.getenv('name') + +# Initialize MySQL +mysql = MySQL(app) + +# Create operation +@app.route('/add_user', methods=['POST']) +def add_user(): + firstname = request.json['firstname'] + email = request.json['email'] + cursor = mysql.connection.cursor() + cursor.execute("INSERT INTO users (firstname, email) VALUES (%s, %s)", (firstname, email)) + mysql.connection.commit() + cursor.close() + return jsonify({'message': 'User added successfully!'}) + +# Read operation +@app.route('/users', methods=['GET']) +def get_users(): + cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor) + cursor.execute("SELECT * FROM users") + users = cursor.fetchall() + cursor.close() + return jsonify(users) + +# Read operation by id +@app.route('/user/<int:id>', methods=['GET']) +def get_user(id): + cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor) + cursor.execute("SELECT * FROM users WHERE id = %s", (id,)) + user = cursor.fetchone() + cursor.close() + + if user: + return jsonify(user) + else: + return jsonify({'message': 'User not found'}), 404 + + +# Update operation +@app.route('/update_user/<int:id>', methods=['PUT']) +def update_user(id): + firstname = request.json['firstname'] + email = request.json['email'] + cursor = mysql.connection.cursor() + cursor.execute("UPDATE users SET firstname = %s, email = %s WHERE id = %s", (firstname, email, id)) + mysql.connection.commit() + cursor.close() + return jsonify({'message': 'User updated successfully!'}) + +# Delete operation +@app.route('/delete_user/<int:id>', methods=['DELETE']) +def delete_user(id): + cursor = mysql.connection.cursor() + cursor.execute("DELETE FROM users WHERE id = %s", (id,)) + mysql.connection.commit() + cursor.close() + return jsonify({'message': 'User deleted successfully!'}) @app.route('/') def hello_world(): - return f'Hello, {name}!' + return f'Hello, from flask app!' if __name__ == '__main__': app.run(debug=True, host=os.environ.get('FLASK_RUN_HOST', '0.0.0.0'), port=int(os.environ.get('FLASK_RUN_PORT', 5000))) diff --git a/requirements.txt b/requirements.txt index db4365489b6f8e934b0ab7fa0472793d2b5b9e36..a406bf9f674399edfc02ca5c713ffcb4e1be33ea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Flask==3.0.0 requests==2.26.0 Flask-DotEnv==0.1.2 +Flask-MySQLdb==2.0.0 diff --git a/scripts/user.sql b/scripts/user.sql new file mode 100644 index 0000000000000000000000000000000000000000..7bbf5296517afbaba3a9528835175ffa0a4deace --- /dev/null +++ b/scripts/user.sql @@ -0,0 +1,9 @@ +CREATE DATABASE IF NOT EXISTS workshop; + +USE workshop; + +CREATE TABLE IF NOT EXISTS users ( + id INT AUTO_INCREMENT PRIMARY KEY, + firstname VARCHAR(100), + email VARCHAR(100) +);