From 81f49f4ebd204bef3b6f349b4e853bd218e315d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D9=8A?= Date: Thu, 5 Mar 2026 11:17:48 +0530 Subject: [PATCH] Add explicit usage summary uniqueness and billing indexes --- backend/models/subscription_models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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'}, )