dvirlabs 417b2ef877
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
feat: Add admin user, PIN-based password reset, and profile management
- Auto-create admin user on startup with configurable credentials
- Force password change on first admin login
- PIN-based password reset via email (6-digit code)
- Remove demo account notice from login page
- Add complete profile edit with email, phone, address fields
- Add password change functionality in profile
- Add database migration for new user fields
- Update Helm values with admin and email config
2026-05-07 08:09:30 +03:00

38 lines
1.4 KiB
Python

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