61 lines
3 KiB
Python
61 lines
3 KiB
Python
import ulid
|
|
from sqlalchemy import Column, String, Boolean, DateTime, func, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from app.core.database.db_session import Base
|
|
|
|
class EcomCustomer(Base):
|
|
__tablename__ = "ecom_customers"
|
|
|
|
customer_id = Column(String(26), primary_key=True, default=lambda: str(ulid.ULID()))
|
|
google_id = Column(String(128), unique=True, index=True, nullable=True)
|
|
email = Column(String(255), unique=True, index=True, nullable=False)
|
|
password_hash = Column(String(255), nullable=True)
|
|
first_name = Column(String(100), nullable=False)
|
|
last_name = Column(String(100), nullable=False)
|
|
phone = Column(String(30), unique=True, index=True, nullable=True)
|
|
profile_picture = Column(String(1024), nullable=True)
|
|
is_active = Column(Boolean, default=True)
|
|
email_verified = Column(Boolean, default=False)
|
|
phone_verified = Column(Boolean, default=False)
|
|
last_login = Column(DateTime, nullable=True)
|
|
created_at = Column(DateTime, server_default=func.now())
|
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|
|
|
|
# Relationships
|
|
orders = relationship("Order", back_populates="customer")
|
|
addresses = relationship("CustomerAddress", back_populates="customer", cascade="all, delete-orphan")
|
|
refresh_tokens = relationship("CustomerRefreshToken", back_populates="customer", cascade="all, delete-orphan")
|
|
|
|
class CustomerAddress(Base):
|
|
__tablename__ = "customer_addresses"
|
|
|
|
address_id = Column(String(26), primary_key=True, default=lambda: str(ulid.ULID()))
|
|
customer_id = Column(String(26), ForeignKey("ecom_customers.customer_id", ondelete="CASCADE"), nullable=False, index=True)
|
|
address_type = Column(String(20), default="SHIPPING") # SHIPPING, BILLING
|
|
full_name = Column(String(150), nullable=False)
|
|
phone = Column(String(30), nullable=False)
|
|
street_address = Column(String(255), nullable=False)
|
|
city = Column(String(100), nullable=False)
|
|
state = Column(String(100), nullable=False)
|
|
pincode = Column(String(20), nullable=False, index=True)
|
|
is_default = Column(Boolean, default=False)
|
|
created_at = Column(DateTime, server_default=func.now())
|
|
|
|
customer = relationship("EcomCustomer", back_populates="addresses")
|
|
|
|
class CustomerRefreshToken(Base):
|
|
__tablename__ = "customer_refresh_tokens"
|
|
|
|
id = Column(String(26), primary_key=True, default=lambda: str(ulid.ULID()))
|
|
customer_id = Column(String(26), ForeignKey("ecom_customers.customer_id", ondelete="CASCADE"), nullable=False, index=True)
|
|
token_hash = Column(String(255), unique=True, index=True, nullable=False)
|
|
token_family_id = Column(String(26), nullable=False, index=True)
|
|
expires_at = Column(DateTime, nullable=False)
|
|
created_at = Column(DateTime, server_default=func.now())
|
|
revoked_at = Column(DateTime, nullable=True)
|
|
last_used_at = Column(DateTime, nullable=True)
|
|
user_agent = Column(String(255), nullable=True)
|
|
ip_address = Column(String(45), nullable=True)
|
|
|
|
customer = relationship("EcomCustomer", back_populates="refresh_tokens")
|
|
|