mirror of
https://github.com/Llloooggg/TextSouls.git
synced 2026-03-06 04:26:23 +03:00
backend: добавлены базовые модели классов, расс и персонажей
This commit is contained in:
@@ -3,8 +3,13 @@ from flask_admin.contrib.sqla import ModelView
|
||||
|
||||
from . import admin
|
||||
from textsouls.models import db
|
||||
|
||||
from textsouls.models import User
|
||||
|
||||
from textsouls.models import CharacterRace
|
||||
from textsouls.models import CharacterClass
|
||||
from textsouls.models import Character
|
||||
|
||||
ts_admin = Blueprint("ts_admin", __name__)
|
||||
|
||||
|
||||
@@ -15,4 +20,14 @@ class AdminView(ModelView):
|
||||
super(AdminView, self).__init__(model, *args, **kwargs)
|
||||
|
||||
|
||||
class CommonView(ModelView):
|
||||
def __init__(self, model, *args, **kwargs):
|
||||
self.column_list = [c.key for c in model.__table__.columns]
|
||||
super(CommonView, self).__init__(model, *args, **kwargs)
|
||||
|
||||
|
||||
admin.add_view(AdminView(User, db.session))
|
||||
|
||||
admin.add_view(CommonView(CharacterRace, db.session))
|
||||
admin.add_view(CommonView(CharacterClass, db.session))
|
||||
admin.add_view(CommonView(Character, db.session))
|
||||
|
||||
68
backend/textsouls/common/views.py
Normal file
68
backend/textsouls/common/views.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from .. import db
|
||||
|
||||
from flask import request
|
||||
from flask import jsonify
|
||||
from flask.views import MethodView
|
||||
|
||||
|
||||
class ItemAPI(MethodView):
|
||||
init_every_request = False
|
||||
|
||||
def __init__(self, model):
|
||||
self.model = model
|
||||
|
||||
def _get_item(self, id):
|
||||
return self.model.query.get_or_404(id)
|
||||
|
||||
def get(self, id):
|
||||
item = self._get_item(id)
|
||||
return item.to_dict()
|
||||
|
||||
def patch(self, id):
|
||||
item = self._get_item(id)
|
||||
errors = self.validator.validate(item, request.json)
|
||||
|
||||
if errors:
|
||||
return jsonify(errors), 400
|
||||
|
||||
item.update_from_json(request.json)
|
||||
db.session.commit()
|
||||
return item.to_dict()
|
||||
|
||||
def delete(self, id):
|
||||
item = self._get_item(id)
|
||||
db.session.delete(item)
|
||||
db.session.commit()
|
||||
return "", 200
|
||||
|
||||
|
||||
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)
|
||||
@@ -1,75 +1,16 @@
|
||||
from flask import Blueprint
|
||||
from flask import request
|
||||
from flask import jsonify
|
||||
from flask.views import MethodView
|
||||
|
||||
from . import db
|
||||
from textsouls.common.views import register_api
|
||||
from textsouls.models import User
|
||||
|
||||
from textsouls.models import CharacterRace
|
||||
from textsouls.models import CharacterClass
|
||||
from textsouls.models import Character
|
||||
|
||||
main = Blueprint("main", __name__)
|
||||
|
||||
|
||||
class ItemAPI(MethodView):
|
||||
init_every_request = False
|
||||
|
||||
def __init__(self, model):
|
||||
self.model = model
|
||||
|
||||
def _get_item(self, id):
|
||||
return self.model.query.get_or_404(id)
|
||||
|
||||
def get(self, id):
|
||||
item = self._get_item(id)
|
||||
return item.to_dict()
|
||||
|
||||
def patch(self, id):
|
||||
item = self._get_item(id)
|
||||
errors = self.validator.validate(item, request.json)
|
||||
|
||||
if errors:
|
||||
return jsonify(errors), 400
|
||||
|
||||
item.update_from_json(request.json)
|
||||
db.session.commit()
|
||||
return item.to_dict()
|
||||
|
||||
def delete(self, id):
|
||||
item = self._get_item(id)
|
||||
db.session.delete(item)
|
||||
db.session.commit()
|
||||
return "", 200
|
||||
|
||||
|
||||
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")
|
||||
|
||||
register_api(main, CharacterRace, "charachter-races")
|
||||
register_api(main, CharacterClass, "charachter-classes")
|
||||
register_api(main, Character, "character")
|
||||
|
||||
@@ -19,3 +19,60 @@ class User(db.Model, SerializerMixin):
|
||||
db.DateTime, nullable=False, default=datetime.datetime.now()
|
||||
)
|
||||
is_admin = db.Column(db.Boolean, nullable=False, default=False)
|
||||
character = db.relationship("Character", backref="user", lazy="dynamic")
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.id}: {self.username}"
|
||||
|
||||
|
||||
class CharacterRace(db.Model, SerializerMixin):
|
||||
|
||||
__tablename__ = "character_races"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=True)
|
||||
character = db.relationship("Character", backref="race", lazy="dynamic")
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class CharacterClass(db.Model, SerializerMixin):
|
||||
|
||||
__tablename__ = "character_classes"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=True)
|
||||
character = db.relationship("Character", backref="class", lazy="dynamic")
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Character(db.Model, SerializerMixin):
|
||||
|
||||
__tablename__ = "characters"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
owner = db.Column(
|
||||
db.Integer,
|
||||
db.ForeignKey("users.id"),
|
||||
nullable=False,
|
||||
)
|
||||
name = db.Column(db.String(255), nullable=False)
|
||||
character_race = db.Column(
|
||||
db.Integer,
|
||||
db.ForeignKey("character_races.id"),
|
||||
nullable=False,
|
||||
)
|
||||
character_class = db.Column(
|
||||
db.Integer,
|
||||
db.ForeignKey("character_classes.id"),
|
||||
nullable=False,
|
||||
)
|
||||
created_on = db.Column(
|
||||
db.DateTime, nullable=False, default=datetime.datetime.now()
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
Reference in New Issue
Block a user