Base code

This commit is contained in:
Kunthawat Greethong
2026-01-08 22:39:53 +07:00
parent 697115c61a
commit c35fa52117
2169 changed files with 626670 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
"""
Database migration script to create comprehensive user data cache table.
Run this script to add the cache table to your database.
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
from loguru import logger
import os
def create_cache_table():
"""Create the comprehensive user data cache table."""
try:
# Get database URL from environment or use default
database_url = os.getenv('DATABASE_URL', 'sqlite:///alwrity.db')
# Create engine
engine = create_engine(database_url)
# Create session
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db = SessionLocal()
# SQL to create the cache table
create_table_sql = """
CREATE TABLE IF NOT EXISTS comprehensive_user_data_cache (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
strategy_id INTEGER,
data_hash VARCHAR(64) NOT NULL,
comprehensive_data JSON NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
expires_at DATETIME NOT NULL,
last_accessed DATETIME DEFAULT CURRENT_TIMESTAMP,
access_count INTEGER DEFAULT 0
);
"""
# Create indexes
create_indexes_sql = [
"CREATE INDEX IF NOT EXISTS idx_user_strategy ON comprehensive_user_data_cache(user_id, strategy_id);",
"CREATE INDEX IF NOT EXISTS idx_expires_at ON comprehensive_user_data_cache(expires_at);",
"CREATE INDEX IF NOT EXISTS idx_data_hash ON comprehensive_user_data_cache(data_hash);"
]
# Execute table creation
logger.info("Creating comprehensive_user_data_cache table...")
db.execute(text(create_table_sql))
# Execute index creation
logger.info("Creating indexes...")
for index_sql in create_indexes_sql:
db.execute(text(index_sql))
# Commit changes
db.commit()
# Verify table creation
result = db.execute(text("SELECT name FROM sqlite_master WHERE type='table' AND name='comprehensive_user_data_cache';"))
table_exists = result.fetchone()
if table_exists:
logger.info("✅ Comprehensive user data cache table created successfully!")
# Show table structure
result = db.execute(text("PRAGMA table_info(comprehensive_user_data_cache);"))
columns = result.fetchall()
logger.info("Table structure:")
for column in columns:
logger.info(f" - {column[1]} ({column[2]})")
else:
logger.error("❌ Failed to create comprehensive_user_data_cache table")
return False
db.close()
return True
except Exception as e:
logger.error(f"❌ Error creating cache table: {str(e)}")
if 'db' in locals():
db.close()
return False
def drop_cache_table():
"""Drop the comprehensive user data cache table (for testing)."""
try:
# Get database URL from environment or use default
database_url = os.getenv('DATABASE_URL', 'sqlite:///alwrity.db')
# Create engine
engine = create_engine(database_url)
# Create session
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db = SessionLocal()
# Drop table
logger.info("Dropping comprehensive_user_data_cache table...")
db.execute(text("DROP TABLE IF EXISTS comprehensive_user_data_cache;"))
db.commit()
logger.info("✅ Comprehensive user data cache table dropped successfully!")
db.close()
return True
except Exception as e:
logger.error(f"❌ Error dropping cache table: {str(e)}")
if 'db' in locals():
db.close()
return False
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Manage comprehensive user data cache table")
parser.add_argument("--action", choices=["create", "drop"], default="create",
help="Action to perform (create or drop table)")
args = parser.parse_args()
if args.action == "create":
success = create_cache_table()
if success:
logger.info("🎉 Cache table setup completed successfully!")
else:
logger.error("💥 Cache table setup failed!")
sys.exit(1)
elif args.action == "drop":
success = drop_cache_table()
if success:
logger.info("🗑️ Cache table dropped successfully!")
else:
logger.error("💥 Failed to drop cache table!")
sys.exit(1)