mirror of
https://github.com/Llloooggg/TextSouls.git
synced 2026-03-06 20:46:23 +03:00
backend+ telegram: регистрация переведена на классы
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user