# services/tenant/app/models/tenants.py """ Tenant models for bakery management """ from sqlalchemy import Column, String, Boolean, DateTime, Float, ForeignKey, Text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from datetime import datetime import uuid from shared.database.base import Base class Tenant(Base): """Tenant/Bakery model""" __tablename__ = "tenants" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column(String(200), nullable=False) subdomain = Column(String(100), unique=True) business_type = Column(String(100), default="bakery") # Location info address = Column(Text, nullable=False) city = Column(String(100), default="Madrid") postal_code = Column(String(10), nullable=False) latitude = Column(Float) longitude = Column(Float) # Contact info phone = Column(String(20)) email = Column(String(255)) # Status is_active = Column(Boolean, default=True) subscription_tier = Column(String(50), default="basic") # ML status model_trained = Column(Boolean, default=False) last_training_date = Column(DateTime) # Ownership owner_id = Column(UUID(as_uuid=True), nullable=False, index=True) # Timestamps created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def __repr__(self): return f"" class TenantMember(Base): """Tenant membership model for team access""" __tablename__ = "tenant_members" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) tenant_id = Column(UUID(as_uuid=True), ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False) user_id = Column(UUID(as_uuid=True), nullable=False, index=True) # Role and permissions role = Column(String(50), default="member") # owner, admin, member, viewer permissions = Column(Text) # JSON string of permissions # Status is_active = Column(Boolean, default=True) invited_by = Column(UUID(as_uuid=True)) invited_at = Column(DateTime, default=datetime.utcnow) joined_at = Column(DateTime) created_at = Column(DateTime, default=datetime.utcnow) def __repr__(self): return f""