from sqlalchemy import Column, String, DateTime, JSON, Boolean, Integer from datetime import datetime import uuid from app.database import Base class B2SyncQueue(Base): __tablename__ = "b2_sync_queue" id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4())) file_key = Column(String, nullable=False) file_url = Column(String, nullable=False) sync_type = Column(String, nullable=False) # "device" o "group" target_id = Column(String, nullable=False) # userId o groupId pending_recipients = Column(JSON, nullable=False) # lista de IDs de dispositivos o usuarios created_at = Column(DateTime, default=datetime.utcnow) is_uploaded = Column(Boolean, default=True) uploading_by = Column(String, nullable=True, default=None) uploading_claimed_at = Column(DateTime, nullable=True, default=None) missing_stems = Column(JSON, nullable=True, default=None) # JSON: {"recipient_id": ["vocals", "drums"]} class MigrationBackup(Base): __tablename__ = "migration_backups" id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4())) user_id = Column(Integer, nullable=False, index=True) created_at = Column(DateTime, default=datetime.utcnow) expires_at = Column(DateTime, nullable=False) status = Column(String, default="pending") # "pending", "completed", "restored", "expired" metadata_json = Column(JSON, nullable=True) # Mapa de metadatos locales files_info = Column(JSON, nullable=True, default=[]) # Lista de stems respaldados: [{"task_id": "...", "stem_name": "..."}]