Browse Source

last stable version

Evgeny Polivanov 2 years ago
parent
commit
b88ed3aaea
2 changed files with 84 additions and 107 deletions
  1. 84 106
      api.py
  2. 0 1
      folder-alias.json

+ 84 - 106
api.py

@@ -1,129 +1,80 @@
-from flask import Flask, jsonify, request, json
-from types import SimpleNamespace
+from flask import Flask, jsonify, request
 from xmpp import cli
 from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token
-from datetime import date, timedelta, datetime
-
-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
-
-
+from datetime import timedelta
+from BackendApi.Models import RoleModel, UserModel
+from BackendApi.SharixQuery import SharixQuery, ReturnData
 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)
-
-#Переменные чтобы не ошибиться
-data = 'data'
-code = 'httpcode'
-
-#Генерация токена (id - данные которые шифруются, min - время действия токена)
-#Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах)
-def gen_token(id, min):
-    token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))}
-    return jsonify(token)
-#Ошибка сервера (возвращает ошибку и код ошибки)
-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))
+db_query = SharixQuery()
 
 #Авторизация пользователя
-# @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 add_user():
     try:
-        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
+        result = db_query.add_user(request.get_json())
+        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(id)
+        if type(result) == UserModel:
+            result.password = None
+            result.insys = None
+            result.id = None
+            return jsonify(result.as_dict())
         else:
-            return "User exist", 400
+            return 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:
         data = []
-        for user in session.query(UserModel).all():
-            data.append(user.as_dict())
-        #result = db_query.get_all_user_query()
-        return jsonify(data), 200
+        result = db_query.get_all_user()
+        if type(result) == list:
+            for user in result:
+                user.lastlogintime = None
+                user.insys = None
+                data.append(user.as_dict())
+            return jsonify(data), 200
+        else:
+            return result.data, result.code
     except Exception as ex:
         return err_mes(ex) 
-
 #Удаление пользователя
 @app.route('/deleteuser', methods=['POST'])
 def delete_user():
     try:
-        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]
+        result = db_query.delete_user_query(UserModel.id, request.get_json()["id"])
+        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'])
+def test_api():
+    try:
+        result = db_query.update_user(request.get_json())
+        return jsonify(result.data), result.code
+    except Exception as ex:
+        return err_mes(ex) 
 #Отправка сообщения через XMPP
 @app.route('/testmessage', methods=['POST'])
 def send_mess():
@@ -134,18 +85,45 @@ def send_mess():
         return jsonify({"msg":"Succes send!"}), 200
     except Exception as ex:
         return err_mes(ex) 
+#Список ролей
+@app.route('/roles', methods=['GET'])
+def get_all_roles():
+    try:
+        data = []
+        result = db_query.get_roles()
+        if type(result) == list:
+            for role in result:
+                data.append(role.as_dict())
+            return jsonify(data), 200
+        else:
+            return result.data, result.code
+    except Exception as ex:
+        return err_mes(ex) 
+#Удалить роль
+@app.route('/deleterole', methods=['POST'])
+def delete_role():
+    try:
+        result = db_query.delete_role(RoleModel.id, request.get_json()["id"])
+        return result.data, result.code
+    except Exception as ex:
+        return err_mes(ex) 
+#Добавить роль
+@app.route('/addrole', methods=['POST'])
+def add_role():
+    try:
+        result = db_query.add_role(request.get_json())
+        return result.data, 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) 
-
-
-
+#Генерация токена (id - данные которые шифруются, min - время действия токена)
+#Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах)
+def gen_token(id, min):
+    token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))}
+    return jsonify(token)
+#Ошибка сервера (возвращает ошибку и код ошибки)
+def err_mes(ex):
+    return jsonify({"msg":str(ex)}), 500
+#Запуск сервера
 if __name__ == '__main__':
-    #from waitress import serve
-    #serve(app, host='127.0.0.2', port='8080')
     app.run(host='0.0.0.0', debug=True, load_dotenv=True )

+ 0 - 1
folder-alias.json

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