class UserAttitude(db.Model): __tablename__ = 'users_attitude' user = db.relationship(User) user_id = db.Column(db.Integer, db.ForeignKey('users.id', name='fk_users_id', ondelete='CASCADE'), primary_key=True) repo = db.relationship(Repo, lazy=False) repo_id = db.Column(db.BigInteger, db.ForeignKey('repos.id', name='fk_repos_id', ondelete='CASCADE'), primary_key=True, index=True) attitude = db.Column(db.Enum('like', 'dislike', 'neutral'), nullable=False) @classmethod def join_by_user_and_repo(cls, query, user_id: int, repo_id: int): return query.outerjoin(cls, (cls.user_id == user_id) & (cls.repo_id == repo_id)) @classmethod def list_liked_by_user(cls, user_id: int): """ @type user_id: int @rtype: list """ return cls.query.filter(cls.user_id == user_id).filter( cls.attitude == 'like').all() @staticmethod def like(user_id: int, repo_id: int): return UserAttitude(user_id=user_id, repo_id=repo_id, attitude='like')
class RepoMean(db.Model): __tablename__ = 'repos_mean' repo = db.relationship(Repo) repo_id = db.Column( db.BigInteger, db.ForeignKey('repos.id', name='fk_repos_mean_repo_id', ondelete='CASCADE'), primary_key=True ) created_at = db.Column( db.Date, default=datetime.today().strftime('%Y-%m-%d'), nullable=False, primary_key=True ) value = db.Column(db.Float(), nullable=False)
class RepoStars(db.Model): __tablename__ = 'repos_stars' repo_id = db.Column(db.BigInteger, db.ForeignKey('repos.id', name='fk_repos_stars_repo_id', ondelete='CASCADE'), primary_key=True) stars = db.Column(SMALLINT(display_width=4, unsigned=True), nullable=False) year = db.Column(SMALLINT(display_width=4, unsigned=True), autoincrement=False, nullable=False, primary_key=True) day = db.Column(SMALLINT(display_width=3, unsigned=True), autoincrement=False, nullable=False, primary_key=True)
def id(self): return db.Column(db.BigInteger, db.ForeignKey('repos.id'), primary_key=True)