class User(db.Model, UserMixin): __tablename__ = "user" id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(25), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(60), nullable=False) win = db.Column(db.Integer, unique=False, nullable=True, default=0) loss = db.Column(db.Integer, unique=False, nullable=True, default=0) tie = db.Column(db.Integer, unique=False, nullable=True, default=0) monsters = db.relationship("Monster", secondary=deck_monster, back_populates="users", lazy=True) monster_effects = db.relationship("MonsterEffect", secondary=deck_monster_effect, back_populates="users", lazy=True) equipment = db.relationship("Equipment", secondary=deck_equipment, back_populates="users", lazy=True) boards = db.relationship("Board") def __init__(self, username, email, password): self.username = username self.email = email self.password = password def __repr__(self): return (f"User('{self.username}'), ID: {self.id}")
class Monster(db.Model): __tablename__ = "monster" id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(25), unique=True, nullable=False) attack_points = db.Column(db.Integer, nullable=True, default=0) defense_points = db.Column(db.Integer, nullable=True, default=0) types = db.relationship("Type", secondary=monster_type, back_populates="monsters", lazy=True) archetypes = db.relationship("Archetype", secondary=monster_archetype, back_populates="monsters", lazy=True) users = db.relationship("User", secondary=deck_monster, back_populates="monsters", lazy=True) def __init__(self, name, attack_points, defense_points): self.name = name self.attack_points = attack_points self.defense_points = defense_points def __repr__(self): return (f"Monster('{self.name}', Attack: {self.attack_points}, " f"Defense: '{self.defense_points}', ID: '{self.id}')")
class Equipment(db.Model): __tablename__ = "equipment" id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(25), unique=False, nullable=False) # SQLAlchemy supports JSON as a data type in a column # However: adding using our current admin panel would be annoying, # because users would have to write in JSON format. # We need to modify the Update operator for this specific class # if we want probabilistic modification of monster attributes. attack = db.Column(db.Integer, unique=False, nullable=False) defense = db.Column(db.Integer, unique=False, nullable=False) types = db.relationship("Type", secondary=equipment_type, back_populates="equipment", lazy=True) archetypes = db.relationship("Archetype", secondary=equipment_archetype, back_populates="equipment", lazy=True) users = db.relationship("User", secondary=deck_equipment, back_populates="equipment", lazy=True) def __init__(self, name): self.name = name def __repr__(self): return (f"Equipment('{self.name}'), Attack: {self.attack_points}, " f"Defense: '{self.defense_points}')")
class Type(db.Model): __tablename__ = "type" id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(25), unique=False, nullable=False) monsters = db.relationship("Monster", secondary=monster_type, back_populates="types", lazy=True) equipment = db.relationship("Equipment", secondary=equipment_type, back_populates="types", lazy=True) monster_effects = db.relationship("MonsterEffect", secondary=monster_effect_type, back_populates="types", lazy=True) def __init__(self, name): self.name = name def __repr__(self): return f"Type('{self.name}')"