class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) user = db.Column(db.Integer, db.ForeignKey(User.id)) country = db.Column(db.Integer, db.ForeignKey(Country.id)) message = db.Column(db.String(255)) image = db.Column(db.String(255)) time_added = db.Column(db.DateTime, default=db.func.current_timestamp()) users = db.relationship('User', backref='post') countries = db.relationship('Country', backref='post') def __init__(self, user, country, message, image): self.user = user self.country = country self.message = message self.image = image def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
class Country(db.Model): __tablename__ = 'countries' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255)) code = db.Column(db.Integer) time_added = db.Column(db.DateTime, default=db.func.current_timestamp()) def __init__(self, name, code): self.name = name self.code = code def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
class Reaction(db.Model): __tablename__ = 'reactions' id = db.Column(db.Integer, primary_key=True) user = db.Column(db.Integer, db.ForeignKey(User.id)) post = db.Column(db.Integer, db.ForeignKey(Post.id)) scale = db.Column(db.String(255)) time_added = db.Column(db.DateTime, default=db.func.current_timestamp()) users = db.relationship('User', backref='reaction') posts = db.relationship('Post', backref='reaction') def __init__(self, name, code): self.name = name self.code = code def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(100), unique=True) password = db.Column(db.String(100)) username = db.Column(db.String(200))
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(155)) country = db.Column(db.String(255)) email = db.Column(db.String(200)) phone = db.Column(db.String(100)) password = db.Column(db.String(255)) thumbnail = db.Column(db.String(255)) role = db.Column(db.String(20)) time_added = db.Column(db.DateTime, default=db.func.current_timestamp()) last_login = db.Column(db.DateTime) login_times = db.Column(db.Integer) def __init__(self, name, country, password, phone, email, thumbnail, role): self.name = name self.country = country self.password = Bcrypt().generate_password_hash(password).decode() self.phone = phone self.email = email self.thumbnail = thumbnail self.role = role def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit() def user_email_verified(self, password): return Bcrypt().check_password_hash(self.password, password) def generate_token(self): """ Generates the access token """ try: payload = { 'exp': datetime.utcnow() + timedelta(minutes=300), 'iat': datetime.utcnow(), 'sub': self.id, 'rle': self.role, 'country': self.country } jwt_string = jwt.encode( payload, str(os.getenv('SECRET')), algorithm='HS256' ) return jwt_string.decode() except Exception as e: return str(e) def decode_token(self, token): """Decodes the access token from the Authorization header.""" try: payload = jwt.decode(token, str(os.getenv('SECRET'))) return [payload['sub'], payload['country']] except jwt.ExpiredSignatureError: return "Expired token. Please login to get a new token" except jwt.InvalidTokenError: return "Invalid token. Please register or login"