diff --git a/app/models.py b/app/models.py index 14c1384a..f1980d56 100644 --- a/app/models.py +++ b/app/models.py @@ -6,7 +6,7 @@ import arrow import bcrypt from flask import url_for from flask_login import UserMixin -from sqlalchemy import text, desc +from sqlalchemy import text, desc, CheckConstraint from sqlalchemy_utils import ArrowType from app import s3 @@ -906,3 +906,21 @@ class Mailbox(db.Model, ModelMixin): def __repr__(self): return f"" + + +class AccountActivation(db.Model, ModelMixin): + """contains code to activate the user account when they sign up on mobile""" + + user_id = db.Column( + db.ForeignKey(User.id, ondelete="cascade"), nullable=False, unique=True + ) + # the activation code is usually 6 digits + code = db.Column(db.String(10), unique=True, nullable=False) + + # nb tries decrements each time user enters wrong code + tries = db.Column(db.Integer, default=3, nullable=False) + + __table_args__ = ( + CheckConstraint(tries >= 0, name="account_activation_tries_positive"), + {}, + )