diff --git a/app.py b/app.py deleted file mode 100644 index a2968bf..0000000 --- a/app.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import sys -from flask import Flask -from config import Config, DevelopmentConfig, StagingConfig, ProductionConfig -from flask_sqlalchemy import SQLAlchemy - -if __name__ == '__main__': - app = Flask(__name__) - - PORT = int(os.environ.get('PORT', 33507)) - db1 = SQLAlchemy(app) - db2 = SQLAlchemy(app) - - FLASK_ENV = os.environ.get('FLASK_ENV', None) - if FLASK_ENV == 'production': - DEBUG = ProductionConfig.DEBUG - elif FLASK_ENV == 'stage': - DEBUG = StagingConfig.DEBUG - elif FLASK_ENV == 'development': - DEBUG = DevelopmentConfig.DEBUG - else: - sys.exit("Error FLASK_ENV") - - if Config.SQLALCHEMY_DATABASE_URI_1 is None or Config.SQLALCHEMY_DATABASE_URI_2 is None: - sys.exit("Error SQLALCHEMY_DATABASE_URI_1 or/and SQLALCHEMY_DATABASE_URI_2") - - app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Config.SQLALCHEMY_TRACK_MODIFICATIONS - app.config['SECRET_KEY'] = Config.SECRET_KEY - app.run(host='0.0.0.0', port=PORT, debug=DEBUG) \ No newline at end of file diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..7a0c77b --- /dev/null +++ b/backend/app.py @@ -0,0 +1,6 @@ +from application import create_app + +app = create_app() + +if __name__ == "__main__": + app.run(host='0.0.0.0') diff --git a/backend/application/__init__.py b/backend/application/__init__.py new file mode 100644 index 0000000..1734aec --- /dev/null +++ b/backend/application/__init__.py @@ -0,0 +1,31 @@ +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from ddtrace import patch_all +import sys +import os + +db = SQLAlchemy() +patch_all() + + +def create_app(): + app = Flask(__name__) + FLASK_ENV = os.environ.get('FLASK_ENV', None) + if FLASK_ENV == 'production': + app.config.from_object("config.ProductionConfig") + elif FLASK_ENV == 'staging': + app.config.from_object("config.StagingConfig") + elif FLASK_ENV == 'development': + app.config.from_object("config.DevelopmentConfig") + else: + app.config.from_object("config.Config") + + if app.config['SQLALCHEMY_DATABASE_URI_1'] is None or app.config['SQLALCHEMY_DATABASE_URI_2'] is None: + print('No ENV Variable for DATABASE_URL_1 or DATABASE_URL_2') + sys.exit(1) + + db.init_app(app) + with app.app_context(): + from . import routes + db.create_all() + return app diff --git a/models/logs.model.py b/backend/application/logs_model.py similarity index 59% rename from models/logs.model.py rename to backend/application/logs_model.py index 3cada69..78b42a2 100644 --- a/models/logs.model.py +++ b/backend/application/logs_model.py @@ -1,16 +1,16 @@ -from app import db2 +from . import db -class Logs(db2.Model): - __tablename__ = 'logs' +class Logs(db.Model): + __bind_key__ = 'logs' - id = db2.Column(db2.Integer, primary_key=True) - date = db2.Column(db2.Date()) - user = db2.Column(db2.String()) - ip = db2.Column(db2.String()) - table = db2.Column(db2.String()) - action = db2.Column(db2.String()) - status = db2.Column(db2.String()) + id = db.Column(db.Integer, primary_key=True) + date = db.Column(db.Date()) + user = db.Column(db.String()) + ip = db.Column(db.String()) + table = db.Column(db.String()) + action = db.Column(db.String()) + status = db.Column(db.String()) def __init__(self, date, user, ip, table, action, status): self.date = date diff --git a/responses.py b/backend/application/responses.py similarity index 95% rename from responses.py rename to backend/application/responses.py index 4015a3c..df1c610 100644 --- a/responses.py +++ b/backend/application/responses.py @@ -1,4 +1,4 @@ -from app import app +from flask import current_app as app import json diff --git a/routes.py b/backend/application/routes.py similarity index 61% rename from routes.py rename to backend/application/routes.py index d0f7d10..8e582d9 100644 --- a/routes.py +++ b/backend/application/routes.py @@ -1,5 +1,8 @@ -from app import app -from responses import send_message, send_error +from flask import current_app as app +from flask import request +from .logs_model import Logs, db +from .users_model import Users, db +from .responses import send_message, send_error # Login @@ -11,7 +14,29 @@ def login(): # Register @app.route('/api/register', methods=['POST']) def register(): - return send_message('Register not implemented', None) + post_email = str(request.form['email']) + post_login = str(request.form['login']) + post_hashPass = str(request.form['hashPass']) + post_role = str(request.form['role']) + + if post_email and post_login and post_hashPass and post_role: + user = Users.query.filter( + Users.email == post_email or Users.login == post_login + ).first() + if user: + return send_message(f"{post_email} ({post_login}) already exist.", None) + user = Users( + email=post_email, + login=post_login, + hashPass=post_hashPass, + role=post_role + ) + db.session.add(user) + db.session.commit() + return send_message('User registered.', user) + + else: + return send_error(400, 'POST Request Error : Need email, login, hashPass and role fields.') # Logout diff --git a/models/users.model.py b/backend/application/users_model.py similarity index 58% rename from models/users.model.py rename to backend/application/users_model.py index 2323f6c..c378181 100644 --- a/models/users.model.py +++ b/backend/application/users_model.py @@ -1,14 +1,14 @@ -from app import db1 +from . import db -class Users(db1.Model): - __tablename__ = 'users' +class Users(db.Model): + __bind_key__ = 'users' - id = db1.Column(db1.Integer, primary_key=True) - email = db1.Column(db1.String()) - login = db1.Column(db1.String()) - hashPass = db1.Column(db1.String()) - role = db1.Column(db1.String()) + id = db.Column(db.Integer, primary_key=True) + email = db.Column(db.String()) + login = db.Column(db.String()) + hashPass = db.Column(db.String()) + role = db.Column(db.String()) def __init__(self, email, login, hash_pass, role): self.email = email diff --git a/config.py b/backend/config.py similarity index 59% rename from config.py rename to backend/config.py index bc0b0c2..a924e0a 100644 --- a/config.py +++ b/backend/config.py @@ -1,14 +1,26 @@ import os +basedir = os.path.abspath(os.path.dirname(__file__)) + class Config(object): DEBUG = False TESTING = False CSRF_ENABLED = True + + PORT = int(os.environ.get('PORT', 33507)) SECRET_KEY = os.environ.get('SECRET_KEY', None) + FLASK_APP = os.environ.get('FLASK_APP', None) + FLASK_ENV = os.environ.get('FLASK_ENV', None) + + SQLALCHEMY_ECHO = False SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_DATABASE_URI_1 = os.environ.get('DATABASE_URL_1', None) SQLALCHEMY_DATABASE_URI_2 = os.environ.get('DATABASE_URL_2', None) + SQLALCHEMY_BINDS = { + 'users': SQLALCHEMY_DATABASE_URI_1, + 'logs': SQLALCHEMY_DATABASE_URI_2 + } class ProductionConfig(Config): diff --git a/backend/manage.py b/backend/manage.py new file mode 100644 index 0000000..5d1985b --- /dev/null +++ b/backend/manage.py @@ -0,0 +1,14 @@ +from flask_script import Manager +from flask_migrate import Migrate, MigrateCommand + +from flask import current_app as app +from . import db + +migrate = Migrate(app, db) +manager = Manager(app) + +manager.add_command('db', MigrateCommand) + + +if __name__ == '__main__': + manager.run() \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..6a74357 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,5 @@ +Flask_Migrate==3.1.0 +ddtrace==0.56.1 +Flask_SQLAlchemy==2.5.1 +Flask_Script==2.0.6 +Flask==2.0.2