from datetime import datetime, timedelta, UTC from sqlalchemy import Column, String, DateTime, Boolean, JSON from db.models import Base class APIKey(Base): __tablename__ = 'apikey' key = Column(String(64), primary_key=True) name = Column(String(255), nullable=False) created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC)) last_used_at = Column(DateTime) is_active = Column(Boolean, default=True) roles = Column(JSON, nullable=False, default=list) expire = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC) + timedelta(days=15)) def to_dict(self): return { "key": self.key, "name": self.name, "created_at": self.created_at.isoformat() if self.created_at else None, "last_used_at": self.last_used_at.isoformat() if self.last_used_at else None, "is_active": self.is_active, "roles": self.roles, "expire": self.expire.isoformat() if self.expire else None }