mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 12:22:47 +00:00 
			
		
		
		
	User following mechanics
This commit is contained in:
		@@ -285,6 +285,12 @@ corpus_followers = db.Table(
 | 
				
			|||||||
    db.Column('corpus_id', db.ForeignKey('corpora.id'), primary_key=True)
 | 
					    db.Column('corpus_id', db.ForeignKey('corpora.id'), primary_key=True)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					user_followers = db.Table(
 | 
				
			||||||
 | 
					    'user_followers',
 | 
				
			||||||
 | 
					    db.Model.metadata,
 | 
				
			||||||
 | 
					    db.Column('follower_user_id', db.ForeignKey('users.id'), primary_key=True),
 | 
				
			||||||
 | 
					    db.Column('followed_user_id', db.ForeignKey('users.id'), primary_key=True)
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class User(HashidMixin, UserMixin, db.Model):
 | 
					class User(HashidMixin, UserMixin, db.Model):
 | 
				
			||||||
    __tablename__ = 'users'
 | 
					    __tablename__ = 'users'
 | 
				
			||||||
@@ -343,6 +349,14 @@ class User(HashidMixin, UserMixin, db.Model):
 | 
				
			|||||||
        backref=db.backref('followers', lazy='dynamic'),
 | 
					        backref=db.backref('followers', lazy='dynamic'),
 | 
				
			||||||
        lazy='dynamic'
 | 
					        lazy='dynamic'
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    followed_users = db.relationship(
 | 
				
			||||||
 | 
					        'User',
 | 
				
			||||||
 | 
					        secondary=user_followers,
 | 
				
			||||||
 | 
					        primaryjoin=(user_followers.c.follower_user_id == id),
 | 
				
			||||||
 | 
					        secondaryjoin=(user_followers.c.followed_user_id == id),
 | 
				
			||||||
 | 
					        backref=db.backref('followers', lazy='dynamic'),
 | 
				
			||||||
 | 
					        lazy='dynamic'
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    jobs = db.relationship(
 | 
					    jobs = db.relationship(
 | 
				
			||||||
        'Job',
 | 
					        'Job',
 | 
				
			||||||
        backref='user',
 | 
					        backref='user',
 | 
				
			||||||
@@ -559,17 +573,29 @@ class User(HashidMixin, UserMixin, db.Model):
 | 
				
			|||||||
    #endregion Profile Privacy settings
 | 
					    #endregion Profile Privacy settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def follow_corpus(self, corpus):
 | 
					    def follow_corpus(self, corpus):
 | 
				
			||||||
        if not self.is_following(corpus):
 | 
					        if not self.is_following_corpus(corpus):
 | 
				
			||||||
            self.followed_corpora.append(corpus)
 | 
					            self.followed_corpora.append(corpus)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def unfollow_corpus(self, corpus):
 | 
					    def unfollow_corpus(self, corpus):
 | 
				
			||||||
        if self.is_following(corpus):
 | 
					        if self.is_following_corpus(corpus):
 | 
				
			||||||
            self.followed_corpora.remove(corpus)
 | 
					            self.followed_corpora.remove(corpus)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def is_following_corpus(self, corpus):
 | 
					    def is_following_corpus(self, corpus):
 | 
				
			||||||
        return self.followed_corpora.filter(
 | 
					        return self.followed_corpora.filter(
 | 
				
			||||||
            corpus_followers.c.corpus_id == corpus.id).count() > 0
 | 
					            corpus_followers.c.corpus_id == corpus.id).count() > 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def follow_user(self, user):
 | 
				
			||||||
 | 
					        if not self.is_following_user(user):
 | 
				
			||||||
 | 
					            self.followed_users.append(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def unfollow_user(self, user):
 | 
				
			||||||
 | 
					        if self.is_following_user(user):
 | 
				
			||||||
 | 
					            self.followed_users.remove(user)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def is_following_user(self, user):
 | 
				
			||||||
 | 
					        return self.followed_users.filter(
 | 
				
			||||||
 | 
					            user_followers.c.followed_user_id == user.id).count() > 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def to_json_serializeable(self, backrefs=False, relationships=False, filter_by_privacy_settings=False):
 | 
					    def to_json_serializeable(self, backrefs=False, relationships=False, filter_by_privacy_settings=False):
 | 
				
			||||||
        json_serializeable = {
 | 
					        json_serializeable = {
 | 
				
			||||||
            'id': self.hashid,
 | 
					            'id': self.hashid,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								migrations/versions/7d51bc4b6079_.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								migrations/versions/7d51bc4b6079_.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					"""Add user_followers table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Revision ID: 7d51bc4b6079
 | 
				
			||||||
 | 
					Revises: 4aa88f253dab
 | 
				
			||||||
 | 
					Create Date: 2023-01-17 12:48:33.261942
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					from alembic import op
 | 
				
			||||||
 | 
					import sqlalchemy as sa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# revision identifiers, used by Alembic.
 | 
				
			||||||
 | 
					revision = '7d51bc4b6079'
 | 
				
			||||||
 | 
					down_revision = '4aa88f253dab'
 | 
				
			||||||
 | 
					branch_labels = None
 | 
				
			||||||
 | 
					depends_on = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def upgrade():
 | 
				
			||||||
 | 
					    op.create_table(
 | 
				
			||||||
 | 
					        'user_followers',
 | 
				
			||||||
 | 
					        sa.Column('follower_user_id', sa.Integer(), nullable=False),
 | 
				
			||||||
 | 
					        sa.Column('followed_user_id', sa.Integer(), nullable=False),
 | 
				
			||||||
 | 
					        sa.ForeignKeyConstraint(['followed_user_id'], ['users.id'], ),
 | 
				
			||||||
 | 
					        sa.ForeignKeyConstraint(['follower_user_id'], ['users.id'], ),
 | 
				
			||||||
 | 
					        sa.PrimaryKeyConstraint('follower_user_id', 'followed_user_id')
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def downgrade():
 | 
				
			||||||
 | 
					    op.drop_table('user_followers')
 | 
				
			||||||
		Reference in New Issue
	
	Block a user