from sqlalchemy import Column, Integer, String, Float, DateTime, Boolean, Text, ForeignKey, Table from sqlalchemy.orm import relationship from datetime import datetime from app.database.database import Base user_wishlist = Table( "user_wishlist", Base.metadata, Column("user_id", Integer, ForeignKey("user.id"), primary_key=True), Column("product_id", Integer, ForeignKey("product.id"), primary_key=True), ) class User(Base): __tablename__ = "user" id = Column(Integer, primary_key=True, index=True) email = Column(String, unique=True, index=True) hashed_password = Column(String) full_name = Column(String) phone = Column(String, nullable=True) address = Column(String, nullable=True) city = Column(String, nullable=True) postal_code = Column(String, nullable=True) country = Column(String, nullable=True) is_active = Column(Boolean, default=True) is_admin = Column(Boolean, default=False) must_change_password = Column(Boolean, default=False) password_reset_pin = Column(String, nullable=True) pin_expires_at = Column(DateTime, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) cart = relationship("Cart", back_populates="user", uselist=False) orders = relationship("Order", back_populates="user") wishlist = relationship( "Product", secondary=user_wishlist, backref="wishlisted_by" )