ifixkart-backend/Backend/app/models/EcomCustomerModel.py

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")