from flask_sqlalchemy import SQLAlchemy from datetime import datetime from werkzeug.security import generate_password_hash, check_password_hash db = SQLAlchemy() class User(db.Model): user_id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(256), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) designs = db.relationship('Design', backref='author', lazy=True) bookings = db.relationship('Booking', backref='customer', lazy=True) def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) class Design(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), nullable=False) image_path = db.Column(db.String(255), nullable=False) selected_theme = db.Column(db.String(50)) ai_output = db.Column(db.Text) created_at = db.Column(db.DateTime, default=datetime.utcnow) class Furniture(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) category = db.Column(db.String(50), nullable=False) price = db.Column(db.Float, nullable=False) image_url = db.Column(db.String(255)) bookings = db.relationship('Booking', backref='item', lazy=True) class Booking(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), nullable=False) furniture_id = db.Column(db.Integer, db.ForeignKey('furniture.id'), nullable=False) status = db.Column(db.String(20), default='Pending') booking_date = db.Column(db.DateTime, default=datetime.utcnow)