-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: refactored implementation and added samples for user endpoint
Co-authored-by: Trisha Reddy <105570654+trishavreddy@users.noreply.github.com>
- Loading branch information
1 parent
d398937
commit b4e6fda
Showing
6 changed files
with
135 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,41 @@ | ||
#!/usr/bin/env python3 | ||
import os | ||
|
||
from flask import Flask, request, jsonify | ||
from flask_sqlalchemy import SQLAlchemy | ||
|
||
import config | ||
|
||
app = Flask(__name__) | ||
app.config["SQLALCHEMY_DATABASE_URI"] = config.DATABASE_URI | ||
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False | ||
import routes.user as user | ||
|
||
basedir = os.path.abspath(os.path.dirname(__file__)) | ||
|
||
db = SQLAlchemy(app) | ||
app = Flask(__name__) | ||
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join( | ||
basedir, config.DATABASE_NAME | ||
) | ||
db = SQLAlchemy(app=app) | ||
|
||
|
||
# debugging endpoint | ||
@app.route("/api", methods=["GET", "POST", "PUT", "DELETE"]) | ||
def api(): | ||
data = request.get_json() | ||
# data = | ||
def api_handler(): | ||
data = request.json | ||
print(data) | ||
return jsonify(data) | ||
|
||
|
||
@app.route("/api/user/<id>", methods=["GET", "POST", "PUT", "DELETE"]) | ||
def user(id): | ||
return user.router() | ||
# user endpoint | ||
@app.route("/api/user", defaults={"id": None}, methods=["POST"]) | ||
@app.route("/api/user/<id>", methods=["GET", "PUT", "DELETE"]) | ||
def user_handler(id): | ||
return user.router(id) | ||
|
||
|
||
if __name__ == "__main__": | ||
app.run(debug=True, host="0.0.0.0", port=5000) | ||
with app.app_context(): | ||
from models.user import User | ||
|
||
db.metadata._add_table(User.__tablename__, None, User.__table__) | ||
db.create_all() | ||
|
||
app.run(host="0.0.0.0", port=5000, debug=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
DATABASE_URI = "sqlite:///sqlite.db" | ||
DATABASE_NAME = "sqlite.db" |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,57 +1,106 @@ | ||
#!/usr/bin/env python3 | ||
from flask import jsonify, request | ||
|
||
from models.user import User | ||
|
||
def router(): | ||
|
||
# user router | ||
def router(id): | ||
if request.method == "GET": | ||
return get() | ||
return get(id) | ||
if request.method == "POST": | ||
return post() | ||
if request.method == "PUT": | ||
return put() | ||
return put(id) | ||
if request.method == "DELETE": | ||
return delete() | ||
return jsonify(), 500 | ||
return delete(id) | ||
|
||
res = {"status": "Unsupported HTTP request method."} | ||
|
||
def get(): | ||
# getting user | ||
return jsonify(res), 500 | ||
|
||
users = User.query.all() | ||
return jsonify([user.serialize() for user in users]) | ||
|
||
# retrieve user from database by id | ||
def get(id): | ||
if id is None: | ||
res = {"status": "User ID required."} | ||
return jsonify(res), 400 | ||
|
||
def post(): | ||
# creating user | ||
res = {"status": ""} | ||
|
||
from app import app, db | ||
|
||
with app.app_context(): | ||
users = [] | ||
|
||
if id == "all": | ||
users = db.session.query(User).all() | ||
else: | ||
users = db.session.query(User).filter_by(id=id).all() | ||
|
||
if len(users) == 0: | ||
res["status"] = "User not found." | ||
return jsonify(res), 404 | ||
|
||
res["users"] = [user.json() for user in users] | ||
|
||
data = request.get_json() | ||
return jsonify(res), 200 | ||
|
||
|
||
# create user | ||
def post(): | ||
data = request.json | ||
username = data.get("username") | ||
password = data.get("password") | ||
new_user = User(username=username, password=password) | ||
db.session.add(new_user) | ||
db.session.commit() | ||
return jsonify(new_user.serialize()), 201 | ||
|
||
|
||
def put(user_id): | ||
# updating user | ||
|
||
user = User.query.get(user_id) | ||
if user: | ||
data = request.get_json() | ||
user.username = data.get("username") | ||
user.password = data.get("password") | ||
db.session.commit() | ||
return jsonify(user.serialize()) | ||
return jsonify({"message": "User not found"}), 404 | ||
|
||
|
||
def delete(user_id): | ||
# deleting user | ||
|
||
user = User.query.get(user_id) | ||
if user: | ||
db.session.delete(user) | ||
db.session.commit() | ||
return jsonify({"message": "User deleted"}) | ||
return jsonify({"message": "User not found"}), 404 | ||
|
||
res = {"status": ""} | ||
|
||
if username is None or password is None: | ||
res["status"] = "Both `username` and `password` are required." | ||
return jsonify(res), 400 | ||
|
||
from app import app, db | ||
|
||
with app.app_context(): | ||
user = db.session.query(User).filter_by(username=username).first() | ||
|
||
if user is not None: | ||
res["status"] = "User already exists." | ||
return jsonify(res), 409 | ||
|
||
new_user = User(username=username, password=password) | ||
new_user.save_to_db() | ||
|
||
res["status"] = "User created." | ||
res["user"] = new_user.json() | ||
|
||
return jsonify(res), 201 | ||
|
||
|
||
# update user | ||
def put(id): | ||
res = {"status": ""} | ||
|
||
# user = User.query.get(user_id) | ||
# if user: | ||
# data = request.get_json() | ||
# user.username = data.get("username") | ||
# user.password = data.get("password") | ||
# db.session.commit() | ||
# return jsonify(user.serialize()) | ||
|
||
res["status"] = "User not found." | ||
return jsonify(res), 404 | ||
|
||
|
||
# delete user | ||
def delete(id): | ||
res = {"status": ""} | ||
|
||
# user = User.query.get(user_id) | ||
# if user: | ||
# db.session.delete(user) | ||
# db.session.commit() | ||
# return jsonify({"message": "User deleted"}) | ||
|
||
res["status"] = "User not found." | ||
return jsonify(res), 404 |