class Game(db.Model, Model): __tablename__ = 'games' id = db.Column(db.Integer, primary_key=True) start = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) end = db.Column(db.DateTime) finished = db.Column(db.Boolean, default=False) x_player_id = db.Column( db.Integer, db.ForeignKey('users.id'), nullable=False) x_player = db.relationship( 'User', foreign_keys=[x_player_id], backref='x_games') o_player_id = db.Column( db.Integer, db.ForeignKey('users.id'), nullable=False) o_player = db.relationship( 'User', foreign_keys=[o_player_id], backref='o_games') winner_id = db.Column(db.Integer, db.ForeignKey('users.id')) winner = db.relationship( 'User', foreign_keys=[winner_id], backref='won_games') @hybrid_property def serialized(self): return {'id': self.id, 'x_player_id': self.x_player_id, 'o_player_id': self.o_player_id, 'start': str(self.start), 'end': str(self.end), 'finished': self.finished, 'winner_id': self.winner_id}
class UserModel(db.Model): __tablename__ = "api_auth_user" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), nullable=False, unique=True) password = db.Column(db.String, nullable=False, default='SOME_SECRET') first_name = db.Column(db.String(255)) last_name = db.Column(db.String(255)) email = db.Column(db.String(255), unique=True) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) creation_date = db.Column(db.DateTime, default=datetime.utcnow) modification_date = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) roles = db.relationship('RoleModel', secondary=api_auth_roles_users, lazy='subquery', backref=db.backref('users', lazy=True)) company_id = db.Column(db.Integer, db.ForeignKey('api_auth_company.id')) # Each user has one company company = db.relationship("CompanyModel") @classmethod def find_by_username(cls, username): return cls.query.filter_by(username=username).first() @classmethod def find_by_id(cls, _id): return cls.query.filter_by(id=_id).first() @classmethod def find_all(cls): return cls.query.all() @classmethod def find_by_company(cls, _id): return cls.query.filter_by(company_id=_id).all() def set_password(self, pw): pwhash = bcrypt.generate_password_hash(pw.encode('utf8')) self.password = pwhash.decode('utf8') def check_password(self, pw): return bcrypt.check_password_hash(self.password, pw) def save_to_db(self): db.session.add(self) db.session.commit() def delete_from_db(self): db.session.delete(self) db.session.commit() def update(self): return db.session.commit()
class Author(db.Model): __tablename__ = "authors" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), nullable=False) birth = db.Column(db.String(10), nullable=False) books = db.relationship("Book", backref=db.backref('author')) def __init__(self, name: str, birth: str): self.name = name self.birth = birth def serialize(self): return {"id": self.id, "name": self.name, "birth": self.birth}
class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255)) picture = db.Column(db.String(255)) company = db.Column(db.String(255)) email = db.Column(db.String(255), index=True) phone = db.Column(db.String(255)) skills = db.relationship("Skill") # one to many def update(self, data): for k, v in data.items(): setattr(self, k, v) return self
class TokenModel(db.Model, CRUDMixin): __tablename__ = "api_auth_token" id = db.Column(db.Integer, primary_key=True) jti = db.Column(db.String, nullable=False, unique=True) token_type = db.Column(db.String, nullable=False) fresh = db.Column(db.Boolean, nullable=False, default=False) blacklisted = db.Column(db.Boolean, nullable=False, default=False) never_expire = db.Column(db.Boolean, nullable=False, default=False) creation_date = db.Column(db.DateTime, default=datetime.utcnow) expiration_date = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey( 'api_auth_user.id')) # Each token has one user user = db.relationship("UserModel") @classmethod def find_by_jti(cls, _jti): return cls.query.filter_by(jti=_jti).first()
def company(cls): return db.relationship(CompanyModel)