From 9c989350ec0a0c7db28b695fc886d3e6e4d1a01c Mon Sep 17 00:00:00 2001 From: Llloooggg Date: Sun, 20 Nov 2022 11:45:27 +0300 Subject: [PATCH] =?UTF-8?q?backend:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20?= =?UTF-8?q?=D0=B4=D1=83=D1=8D=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/migrations/versions/1da93403ba52_.py | 32 ++++++++++++++++ .../{c3b392fdf575_.py => aa81b5d5ae0f_.py} | 33 +++++++++++----- backend/textsouls/models.py | 38 +++++++++++++++++-- 3 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 backend/migrations/versions/1da93403ba52_.py rename backend/migrations/versions/{c3b392fdf575_.py => aa81b5d5ae0f_.py} (69%) diff --git a/backend/migrations/versions/1da93403ba52_.py b/backend/migrations/versions/1da93403ba52_.py new file mode 100644 index 0000000..8fae361 --- /dev/null +++ b/backend/migrations/versions/1da93403ba52_.py @@ -0,0 +1,32 @@ +"""empty message + +Revision ID: 1da93403ba52 +Revises: aa81b5d5ae0f +Create Date: 2022-11-20 11:44:37.737612 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '1da93403ba52' +down_revision = 'aa81b5d5ae0f' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('duels', schema=None) as batch_op: + batch_op.add_column(sa.Column('created_on', sa.DateTime(), nullable=False)) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('duels', schema=None) as batch_op: + batch_op.drop_column('created_on') + + # ### end Alembic commands ### diff --git a/backend/migrations/versions/c3b392fdf575_.py b/backend/migrations/versions/aa81b5d5ae0f_.py similarity index 69% rename from backend/migrations/versions/c3b392fdf575_.py rename to backend/migrations/versions/aa81b5d5ae0f_.py index 906ca6a..2518d89 100644 --- a/backend/migrations/versions/c3b392fdf575_.py +++ b/backend/migrations/versions/aa81b5d5ae0f_.py @@ -1,8 +1,8 @@ """empty message -Revision ID: c3b392fdf575 +Revision ID: aa81b5d5ae0f Revises: -Create Date: 2022-11-20 00:31:12.952336 +Create Date: 2022-11-20 11:42:42.864173 """ from alembic import op @@ -10,7 +10,7 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = 'c3b392fdf575' +revision = 'aa81b5d5ae0f' down_revision = None branch_labels = None depends_on = None @@ -40,6 +40,10 @@ def upgrade(): sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('name') ) + op.create_table('duels', + sa.Column('id', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) op.create_table('users', sa.Column('id', sa.BigInteger(), autoincrement=False, nullable=False), sa.Column('chat_id', sa.BigInteger(), nullable=False), @@ -53,29 +57,40 @@ def upgrade(): ) op.create_table('characters', sa.Column('id', sa.Integer(), nullable=False), - sa.Column('owner', sa.BigInteger(), nullable=True), + sa.Column('owner_id', sa.BigInteger(), nullable=True), sa.Column('name', sa.String(length=255), nullable=False), - sa.Column('character_race', sa.Integer(), nullable=False), - sa.Column('character_class', sa.Integer(), nullable=False), + sa.Column('character_race_id', sa.Integer(), nullable=False), + sa.Column('character_class_id', sa.Integer(), nullable=False), sa.Column('created_on', sa.DateTime(), nullable=False), sa.Column('endurance_base', sa.Integer(), nullable=False), sa.Column('strength_base', sa.Integer(), nullable=False), sa.Column('agility_base', sa.Integer(), nullable=False), sa.Column('defence_base', sa.Integer(), nullable=False), sa.Column('wisdom_base', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['character_class'], ['character_classes.id'], ondelete='CASCADE'), - sa.ForeignKeyConstraint(['character_race'], ['character_races.id'], ondelete='CASCADE'), - sa.ForeignKeyConstraint(['owner'], ['users.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['character_class_id'], ['character_classes.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['character_race_id'], ['character_races.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['owner_id'], ['users.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('name') ) + op.create_table('duels_participants', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('participant_id', sa.Integer(), nullable=True), + sa.Column('turn_order', sa.Integer(), nullable=False), + sa.Column('duel_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['duel_id'], ['duels.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['participant_id'], ['characters.id'], ondelete='CASCADE'), + sa.PrimaryKeyConstraint('id') + ) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('duels_participants') op.drop_table('characters') op.drop_table('users') + op.drop_table('duels') op.drop_table('character_races') op.drop_table('character_classes') # ### end Alembic commands ### diff --git a/backend/textsouls/models.py b/backend/textsouls/models.py index 0149726..6ff2f51 100644 --- a/backend/textsouls/models.py +++ b/backend/textsouls/models.py @@ -73,17 +73,17 @@ class Character(db.Model, SerializerMixin): serialize_rules = ("-user", "-race", "-class") id = db.Column(db.Integer, primary_key=True) - owner = db.Column( + owner_id = db.Column( db.BigInteger, db.ForeignKey("users.id", ondelete="CASCADE"), ) name = db.Column(db.String(255), nullable=False, unique=True) - character_race = db.Column( + character_race_id = db.Column( db.Integer, db.ForeignKey("character_races.id", ondelete="CASCADE"), nullable=False, ) - character_class = db.Column( + character_class_id = db.Column( db.Integer, db.ForeignKey("character_classes.id", ondelete="CASCADE"), nullable=False, @@ -148,3 +148,35 @@ class Character(db.Model, SerializerMixin): "defence_chance": defence_chance, "dodge_chance": dodge_chance, } + + +class DuelParticipants(db.Model, SerializerMixin): + + __tablename__ = "duels_participants" + + id = db.Column(db.Integer, primary_key=True) + participant_id = db.Column( + db.Integer, + db.ForeignKey("characters.id", ondelete="CASCADE"), + ) + turn_order = db.Column(db.Integer, nullable=False) + duel_id = db.Column( + db.Integer, + db.ForeignKey("duels.id", ondelete="CASCADE"), + ) + + +class Duel(db.Model, SerializerMixin): + + __tablename__ = "duels" + + id = db.Column(db.Integer, primary_key=True) + created_on = db.Column( + db.DateTime, nullable=False, default=datetime.datetime.now() + ) + participants = db.relationship( + "DuelParticipants", backref="duel", lazy="dynamic" + ) + + def __str__(self): + return self.name