import uuid from datetime import datetime from sqlalchemy import DateTime, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from .db import Base class Hub(Base): __tablename__ = "hubs" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) slug: Mapped[str] = mapped_column(String(120), unique=True, index=True) name: Mapped[str] = mapped_column(String(240)) status: Mapped[str] = mapped_column(String(40), default="active") description: Mapped[str | None] = mapped_column(Text()) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() ) class HubCapabilityManifest(Base): __tablename__ = "hub_capability_manifests" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) hub_slug: Mapped[str] = mapped_column(String(120), index=True) manifest_version: Mapped[str] = mapped_column(String(40), default="0.1.0") body_json: Mapped[str] = mapped_column(Text()) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) class ApiConsumer(Base): __tablename__ = "api_consumers" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) slug: Mapped[str] = mapped_column(String(120), unique=True, index=True) name: Mapped[str] = mapped_column(String(240)) key_prefix: Mapped[str | None] = mapped_column(String(32)) key_hash: Mapped[str | None] = mapped_column(String(255)) status: Mapped[str] = mapped_column(String(40), default="active") created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())