from app import db from datetime import datetime class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) # Relationship with progress progress_entries = db.relationship('Progress', backref='user', lazy=True) class Tutorial(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) slug = db.Column(db.String(100), unique=True, nullable=False) category = db.Column(db.String(50), nullable=False) difficulty = db.Column(db.String(20), nullable=False) # beginner, intermediate, advanced order_index = db.Column(db.Integer, nullable=False) estimated_time = db.Column(db.Integer) # in minutes description = db.Column(db.Text) created_at = db.Column(db.DateTime, default=datetime.utcnow) class Progress(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) tutorial_id = db.Column(db.Integer, db.ForeignKey('tutorial.id'), nullable=False) completed = db.Column(db.Boolean, default=False) current_step = db.Column(db.Integer, default=0) completion_date = db.Column(db.DateTime) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) class Project(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) slug = db.Column(db.String(100), unique=True, nullable=False) category = db.Column(db.String(50), nullable=False) difficulty = db.Column(db.String(20), nullable=False) description = db.Column(db.Text) estimated_time = db.Column(db.Integer) # in minutes prerequisites = db.Column(db.Text) # JSON string of tutorial IDs created_at = db.Column(db.DateTime, default=datetime.utcnow)