<reponame>Deepankar-98/Flask-Practice-Project
from flask_app import db,login_manager
from datetime import datetime
from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


class User (db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(20), unique = True, nullable = False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default = "default.png")
    password = db.Column(db.String(60), nullable=False)
    # 'author' is not an actual column in the Posts table but backref
    # helps perform an query which can be used to return the User table row
    # corresponding to the user.
    posts = db.relationship('Post', backref = "author", lazy = True)

    def __repr__(self):
        return f'User: ("{self.username}", "{self.email}", "{self.image_file}")'


class Post (db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(30), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default = datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    # user.id is in lower case because here we are accessing the database table and
    # attribute name instead of the class name.
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable = False)

    def __repr__(self):
        return f'User: ("{self.id}", "{self.title}", "{self.date_posted}")'

