mirror of
https://github.com/simple-login/app.git
synced 2025-02-23 15:23:27 +08:00
Add Referral model
This commit is contained in:
parent
a54ac0b3da
commit
cdf23d04fc
2 changed files with 61 additions and 0 deletions
|
@ -20,6 +20,7 @@ from app.config import (
|
|||
JOB_ONBOARDING_2,
|
||||
JOB_ONBOARDING_3,
|
||||
JOB_ONBOARDING_4,
|
||||
LANDING_PAGE_URL,
|
||||
)
|
||||
from app.extensions import db
|
||||
from app.log import LOG
|
||||
|
@ -155,6 +156,10 @@ class User(db.Model, ModelMixin, UserMixin):
|
|||
db.Boolean, default=True, nullable=False, server_default="1"
|
||||
)
|
||||
|
||||
referral_id = db.Column(db.ForeignKey("referral.id"), nullable=True, default=None)
|
||||
|
||||
referral = db.relationship("Referral", foreign_keys=[referral_id])
|
||||
|
||||
@classmethod
|
||||
def create(cls, email, name, password=None, **kwargs):
|
||||
user: User = super(User, cls).create(email=email, name=name, **kwargs)
|
||||
|
@ -1087,3 +1092,17 @@ class RefusedEmail(db.Model, ModelMixin):
|
|||
|
||||
def __repr__(self):
|
||||
return f"<Refused Email {self.id} {self.path} {self.delete_at}>"
|
||||
|
||||
|
||||
class Referral(db.Model, ModelMixin):
|
||||
"""Referral code so user can invite others"""
|
||||
|
||||
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
|
||||
|
||||
code = db.Column(db.String(128), unique=True, nullable=False)
|
||||
|
||||
def nb_user(self):
|
||||
return User.filter_by(referral_id=self.id, activated=True).count()
|
||||
|
||||
def link(self):
|
||||
return f"{LANDING_PAGE_URL}?slref={self.code}"
|
||||
|
|
42
migrations/versions/2020_040922_ea30c0b5b2e3_.py
Normal file
42
migrations/versions/2020_040922_ea30c0b5b2e3_.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
"""empty message
|
||||
|
||||
Revision ID: ea30c0b5b2e3
|
||||
Revises: 497cfd2a02e2
|
||||
Create Date: 2020-04-09 22:16:58.923473
|
||||
|
||||
"""
|
||||
import sqlalchemy_utils
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'ea30c0b5b2e3'
|
||||
down_revision = '497cfd2a02e2'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table('referral',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('created_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
|
||||
sa.Column('updated_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
|
||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
||||
sa.Column('code', sa.String(length=128), nullable=False),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='cascade'),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('code')
|
||||
)
|
||||
op.add_column('users', sa.Column('referral_id', sa.Integer(), nullable=True))
|
||||
op.create_foreign_key(None, 'users', 'referral', ['referral_id'], ['id'])
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_constraint(None, 'users', type_='foreignkey')
|
||||
op.drop_column('users', 'referral_id')
|
||||
op.drop_table('referral')
|
||||
# ### end Alembic commands ###
|
Loading…
Reference in a new issue