diff --git a/backend/models/subscription_models.py b/backend/models/subscription_models.py index 996bc870..72dd66a2 100644 --- a/backend/models/subscription_models.py +++ b/backend/models/subscription_models.py @@ -6,7 +6,7 @@ Comprehensive models for usage-based subscription system with API cost tracking. # Ensure Optional is available in global scope for dynamic imports from typing import Optional -from sqlalchemy import Column, Integer, String, DateTime, Float, Boolean, JSON, Text, ForeignKey, Enum +from sqlalchemy import Column, Integer, String, DateTime, Float, Boolean, JSON, Text, ForeignKey, Enum, Index, UniqueConstraint from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from datetime import datetime, timedelta @@ -174,6 +174,9 @@ class APIUsageLog(Base): # Indexes for performance __table_args__ = ( + Index('ix_api_usage_logs_user_period_ts', 'user_id', 'billing_period', 'timestamp'), + Index('ix_api_usage_logs_user_provider_ts', 'user_id', 'provider', 'timestamp'), + Index('ix_api_usage_logs_user_status_ts', 'user_id', 'status_code', 'timestamp'), {'mysql_engine': 'InnoDB'}, ) @@ -241,6 +244,8 @@ class UsageSummary(Base): # Unique constraint on user_id and billing_period __table_args__ = ( + UniqueConstraint('user_id', 'billing_period', name='uq_usage_summaries_user_period'), + Index('ix_usage_summaries_user_period', 'user_id', 'billing_period'), {'mysql_engine': 'InnoDB'}, ) @@ -276,6 +281,7 @@ class APIProviderPricing(Base): # Unique constraint on provider and model __table_args__ = ( + UniqueConstraint('provider', 'model_name', name='uq_api_provider_pricing_provider_model'), {'mysql_engine': 'InnoDB'}, )