Browse Source

new version

Evgeny Polivanov 2 years ago
parent
commit
37c9d01e35
3 changed files with 93 additions and 51 deletions
  1. 86 51
      api.py
  2. 1 0
      folder-alias.json
  3. 6 0
      requirements.txt

+ 86 - 51
api.py

@@ -1,24 +1,42 @@
-
-from flask import Flask, jsonify, request
+from flask import Flask, jsonify, request, json
+from types import SimpleNamespace
 from xmpp import cli
 from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token
-from datetime import timedelta
+from datetime import date, timedelta, datetime
 
-from api_config import Config
-from BackendApi.SharixQuery import SharixQuery
-#from OpenSSL import SSL
+import sqlalchemy as db 
+from sqlalchemy import create_engine, Integer, Date, DateTime, Column, String, Boolean, or_
+from sqlalchemy.orm import sessionmaker, scoped_session, declarative_base
+from BackendApi.connect import connect
 
-#context = SSL.Context(SSL.PROTOCOL_TLSv1_2)
-#context.use_privatekey_file('server.key')
-#context.use_certificate_file('server.crt')
-### ssl_context=context in run
 
-#Инициализация класс для запросов к базе данны
-db_query = SharixQuery()
-#Инициализация Flask
+from api_config import Config
+
 app = Flask(__name__)
 #Добавление секртного слова для шифрования JWT
 app.config.from_object(Config)
+
+engine = create_engine(connect())
+session = scoped_session(sessionmaker(
+    autocommit=False,
+    autoflush=False,
+    bind=engine
+))
+Base = declarative_base()
+
+class UserModel(Base):
+    __tablename__ = 'rest_user'
+    id = Column(Integer, primary_key=True, autoincrement=True, )
+    name = Column(String, unique=True, nullable=False)
+    birthday = Column(Date)
+    insys = Column(Boolean)
+    idrole = Column(Integer)
+    lastlogintime = Column(DateTime)
+    email = Column(String, unique=True, nullable=False)
+    password = Column(String)
+
+    def as_dict(self):
+        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
 #Инициализация класса шифрования
 jwt = JWTManager(app)
 
@@ -34,40 +52,52 @@ def gen_token(id, min):
 #Ошибка сервера (возвращает ошибку и код ошибки)
 def err_mes(ex):
     return jsonify({"msg":str(ex)}), 500
+def data_for_model(data):
+    return json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
 
 #Авторизация пользователя
-@app.route('/auth', methods=['POST'])
-def post_auth():
-    try:
-        result = db_query.auth_query(request.get_json())
-        return gen_token(result[data]['id'], 5), result[code]
-    except Exception as ex:
-        return err_mes(ex)   
+# @app.route('/auth', methods=['POST'])
+# def post_auth():
+#     try:
+#         result = db_query.auth_query(request.get_json())
+#         return gen_token(result[data]['id'], 5), result[code]
+#     except Exception as ex:
+#         return err_mes(ex)   
 
 #Добавление пользователя и проверка на сходства
 @app.route('/adduser', methods=['POST'])
-def get_add():
+def add_user():
     try:
-        result = db_query.add_query(request.get_json())
-        return jsonify(result[data]), result[code]
+        user = UserModel(**request.get_json())
+        chek = session.query(UserModel).filter(or_(UserModel.email==user.email, UserModel.name==user.name)).first()
+        if chek is None:
+            session.add(user)
+            session.flush()
+            session.commit()
+            return str(user.id), 200
+        else:
+            return "User exist", 400
     except Exception as ex:
-        err_mes(ex) 
+        return err_mes(ex) 
 
 #Запрос на получение данных об одном пользователе
-@app.route('/user/<int:id>', methods=['GET'])
-def get_user(id):
-    try:
-        result = db_query.get_user_query(id)
-        return jsonify(result[data]), result[code]
-    except Exception as ex:
-        return err_mes(ex) 
+# @app.route('/user/<int:id>', methods=['GET'])
+# def get_user(id):
+#     try:
+#         result = db_query.get_user_query(id)
+#         return jsonify(result[data]), result[code]
+#     except Exception as ex:
+#         return err_mes(ex) 
 
 #Запрос на получение данных всех пользователей
 @app.route('/users', methods=['GET'])
 def get_show_user():
     try:
-        result = db_query.get_all_user_query()
-        return jsonify(result[data]), result[code]
+        data = []
+        for user in session.query(UserModel).all():
+            data.append(user.as_dict())
+        #result = db_query.get_all_user_query()
+        return jsonify(data), 200
     except Exception as ex:
         return err_mes(ex) 
 
@@ -75,20 +105,24 @@ def get_show_user():
 @app.route('/deleteuser', methods=['POST'])
 def delete_user():
     try:
-        result = db_query.delete_user_query(request.get_json())
-        return jsonify(result[data]), result[code]
+        user = UserModel(**request.get_json())
+        session.query(UserModel).filter_by(id=user.id).delete()
+        session.commit()
+        return "Success delete"
+        #result = db_query.delete_user_query(request.get_json())
+        #return jsonify(result[data]), result[code]
     except Exception as ex:
         return err_mes(ex) 
 
 #Обновление данных пользователя
-@app.route('/updateuser', methods=['POST'])
-@jwt_required()
-def test_api():
-    try:
-        result = db_query.update_user_query(request.get_json(), get_jwt_identity())
-        return jsonify(result[data]), result[code]
-    except Exception as ex:
-        return err_mes(ex) 
+# @app.route('/updateuser', methods=['POST'])
+# @jwt_required()
+# def test_api():
+#     try:
+#         result = db_query.update_user_query(request.get_json(), get_jwt_identity())
+#         return jsonify(result[data]), result[code]
+#     except Exception as ex:
+#         return err_mes(ex) 
 
 #Отправка сообщения через XMPP
 @app.route('/testmessage', methods=['POST'])
@@ -101,16 +135,17 @@ def send_mess():
     except Exception as ex:
         return err_mes(ex) 
 
-@app.route('/testaddcarlog', methods=['POST'])
-def test_add_car_log():
-    try:
-        result = db_query.add_car_log(request.get_json())
-        return gen_token(result[data], 5), result[code]
-    except Exception as ex:
-        return err_mes(ex) 
+# @app.route('/testaddcarlog', methods=['POST'])
+# def test_add_car_log():
+#     try:
+#         result = db_query.add_car_log(request.get_json())
+#         return gen_token(result[data], 5), result[code]
+#     except Exception as ex:
+#         return err_mes(ex) 
+
 
 
 if __name__ == '__main__':
     #from waitress import serve
     #serve(app, host='127.0.0.2', port='8080')
-    app.run(host='127.0.0.2', port='8080', debug=True, load_dotenv=True )
+    app.run(host='0.0.0.0', debug=True, load_dotenv=True )

+ 1 - 0
folder-alias.json

@@ -0,0 +1 @@
+{}

+ 6 - 0
requirements.txt

@@ -5,6 +5,8 @@ colorama==0.4.4
 cryptography==37.0.2
 Flask==2.1.2
 Flask-JWT-Extended==4.4.1
+Flask-SQLAlchemy==2.5.1
+greenlet==1.1.2
 importlib-metadata==4.11.4
 itsdangerous==2.1.2
 Jinja2==3.1.2
@@ -12,11 +14,15 @@ MarkupSafe==2.1.1
 paramiko==2.11.0
 psycopg2==2.9.3
 pycparser==2.21
+pydantic==1.9.1
 PyJWT==2.4.0
 PyNaCl==1.5.0
 pyOpenSSL==22.0.0
 six==1.16.0
+SQLAlchemy==1.4.39
+sqlalchemy2-stubs==0.0.2a24
 sshtunnel==0.4.0
+typing_extensions==4.3.0
 Werkzeug==2.1.2
 xmpppy==0.7.1
 zipp==3.8.0