Skip to content

Instantly share code, notes, and snippets.

@okomarov
Last active November 13, 2019 12:41
Show Gist options
  • Save okomarov/dbccd474627fa9b934e26fa12a88d97b to your computer and use it in GitHub Desktop.
Save okomarov/dbccd474627fa9b934e26fa12a88d97b to your computer and use it in GitHub Desktop.
Viral queue waitlist and referrals
class Waitlist(BaseModel, db.Model):
__tablename__ = 'waitlist'
initial_score = 65231
decrease_per_referral = 10
uuid = db.Column(db.String(8), primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', back_populates='waitlist')
score = db.Column(db.Integer)
referred = db.relationship(
'Waitlist',
secondary=referrals,
primaryjoin=(referrals.c.referring == uuid),
secondaryjoin=(referrals.c.referred == uuid),
backref=db.backref('referral', lazy='dynamic'), lazy='dynamic')
def __init__(self, user_id):
self.user_id = user_id
self.set_uuid()
self.set_initial_score()
def set_uuid(self):
uuid = utils.generate_simple_uuid(8)
while db.session.query(Waitlist).filter_by(uuid=uuid).one_or_none():
uuid = utils.generate_simple_uuid(8)
self.uuid = uuid
def set_initial_score(self):
self.score = self.initial_score + db.session.query(Waitlist).count() + 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment