56 lines
2 KiB
Python
56 lines
2 KiB
Python
from sqlalchemy import Column, String, Boolean, DateTime, Integer, Text
|
|
from datetime import datetime
|
|
import uuid
|
|
|
|
from database.models.generic_model import Base
|
|
|
|
|
|
class ApiKey(Base):
|
|
"""Modèle pour les clés API publiques"""
|
|
|
|
__tablename__ = "api_keys"
|
|
|
|
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
key_hash = Column(String(64), unique=True, nullable=False, index=True)
|
|
key_prefix = Column(String(10), nullable=False)
|
|
|
|
name = Column(String(255), nullable=False)
|
|
description = Column(Text, nullable=True)
|
|
|
|
user_id = Column(String(36), nullable=True)
|
|
created_by = Column(String(255), nullable=False)
|
|
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
rate_limit_per_minute = Column(Integer, default=60, nullable=False)
|
|
allowed_endpoints = Column(Text, nullable=True)
|
|
|
|
total_requests = Column(Integer, default=0, nullable=False)
|
|
last_used_at = Column(DateTime, nullable=True)
|
|
|
|
created_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
expires_at = Column(DateTime, nullable=True)
|
|
revoked_at = Column(DateTime, nullable=True)
|
|
|
|
def __repr__(self):
|
|
return f"<ApiKey(name='{self.name}', prefix='{self.key_prefix}', active={self.is_active})>"
|
|
|
|
|
|
class SwaggerUser(Base):
|
|
"""Modèle pour les utilisateurs autorisés à accéder au Swagger"""
|
|
|
|
__tablename__ = "swagger_users"
|
|
|
|
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
username = Column(String(100), unique=True, nullable=False, index=True)
|
|
hashed_password = Column(String(255), nullable=False)
|
|
|
|
full_name = Column(String(255), nullable=True)
|
|
email = Column(String(255), nullable=True)
|
|
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
|
|
created_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
last_login = Column(DateTime, nullable=True)
|
|
|
|
def __repr__(self):
|
|
return f"<SwaggerUser(username='{self.username}', active={self.is_active})>"
|