# backend/app/models/identity.py import uuid import enum from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, JSON, Numeric, text, Enum from sqlalchemy.orm import relationship from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import func from app.db.base import Base class UserRole(str, enum.Enum): ADMIN = "admin" USER = "user" SERVICE = "service" FLEET_MANAGER = "fleet_manager" class Person(Base): __tablename__ = "persons" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) id_uuid = Column(UUID(as_uuid=True), default=uuid.uuid4, unique=True, nullable=False) last_name = Column(String, nullable=False) first_name = Column(String, nullable=False) mothers_name = Column(String, nullable=True) birth_place = Column(String, nullable=True) birth_date = Column(DateTime, nullable=True) identity_docs = Column(JSON, server_default=text("'{}'::jsonb")) medical_emergency = Column(JSON, server_default=text("'{}'::jsonb")) ice_contact = Column(JSON, server_default=text("'{}'::jsonb")) users = relationship("User", back_populates="person") class User(Base): __tablename__ = "users" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) email = Column(String, unique=True, index=True, nullable=False) hashed_password = Column(String, nullable=False) # Technikai mezők átmentése a régi user.py-ból role = Column(Enum(UserRole), default=UserRole.USER) is_active = Column(Boolean, default=True) is_superuser = Column(Boolean, default=False) is_company = Column(Boolean, default=False) company_name = Column(String, nullable=True) tax_number = Column(String, nullable=True) region_code = Column(String, default="HU") is_deleted = Column(Boolean, default=False) deleted_at = Column(DateTime, nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) person_id = Column(Integer, ForeignKey("data.persons.id"), nullable=True) person = relationship("Person", back_populates="users") wallet = relationship("Wallet", back_populates="user", uselist=False) # Az Organization kapcsolathoz (ha szükséges az import miatt) owned_organizations = relationship("Organization", backref="owner") class Wallet(Base): __tablename__ = "wallets" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("data.users.id"), unique=True) coin_balance = Column(Numeric(18, 2), default=0.00) xp_balance = Column(Integer, default=0) user = relationship("User", back_populates="wallet")