backend+ telegram: регистрация переведена на классы

This commit is contained in:
2022-11-18 18:27:53 +03:00
parent 82dfc158e9
commit 210938fd78
10 changed files with 94 additions and 49 deletions

View File

@@ -1,5 +1,7 @@
from flask import Blueprint
from flask import request
from flask import jsonify
from flask.views import MethodView
from . import db
from textsouls.models import User
@@ -7,34 +9,67 @@ from textsouls.models import User
main = Blueprint("main", __name__)
@main.route("/")
def index():
return "Nice!", 200
class ItemAPI(MethodView):
init_every_request = False
def __init__(self, model):
self.model = model
@main.route("/registration", methods=["POST"])
def registration():
data = request.get_json()
def _get_item(self, id):
return self.model.query.get_or_404(id)
tg_id = data.get("tg_id")
first_name = data.get("first_name")
last_name = data.get("last_name")
username = data.get("username")
def get(self, id):
item = self._get_item(id)
return item.to_dict()
existed_user = User.query.filter_by(tg_id=tg_id).first()
def patch(self, id):
item = self._get_item(id)
errors = self.validator.validate(item, request.json)
if not existed_user:
new_user = User(
tg_id=tg_id,
first_name=first_name,
last_name=last_name,
username=username,
)
if errors:
return jsonify(errors), 400
db.session.add(new_user)
item.update_from_json(request.json)
db.session.commit()
return item.to_dict()
return {"created": True, "id": new_user.id}
def delete(self, id):
item = self._get_item(id)
db.session.delete(item)
db.session.commit()
return "", 200
else:
return {"created": False, "id": existed_user.id}
class ListAPI(MethodView):
init_every_request = False
def __init__(self, model):
self.model = model
def _get_item(self, id):
return self.model.query.filter_by(id=id).first()
def get(self):
items = self.model.query.all()
return jsonify([item.to_dict() for item in items])
def post(self):
item = self._get_item(request.json["id"])
if item:
return "Already exists!", 400
db.session.add(self.model(**request.json))
db.session.commit()
return "", 200
def register_api(app, model, name):
item = ItemAPI.as_view(f"{name}-item", model)
group = ListAPI.as_view(f"{name}-list", model)
app.add_url_rule(f"/{name}/<int:id>", view_func=item)
app.add_url_rule(f"/{name}/", view_func=group)
register_api(main, User, "users")