hxf/backend/tests/init_db.py

100 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""init db"""
import sys
import os
def find_project_root():
"""智能查找项目根目录"""
current_dir = os.path.abspath(os.getcwd())
script_dir = os.path.dirname(os.path.abspath(__file__))
# 可能的项目根目录位置
possible_roots = [
current_dir, # 当前工作目录
script_dir, # 脚本所在目录
os.path.dirname(script_dir), # 脚本父目录
os.path.dirname(os.path.dirname(script_dir)) # 脚本祖父目录
]
for root in possible_roots:
backend_dir = os.path.join(root, 'backend')
if os.path.exists(backend_dir) and os.path.exists(os.path.join(backend_dir, 'th_agenter')):
return root, backend_dir
raise FileNotFoundError("无法找到项目根目录和backend目录")
# 查找项目根目录和backend目录
project_root, backend_dir = find_project_root()
# 添加backend目录到Python路径
sys.path.insert(0, backend_dir)
# 保存原始工作目录
original_cwd = os.getcwd()
# 设置工作目录为backend以便找到.env文件
os.chdir(backend_dir)
from th_agenter.db.database import get_db, init_db
from th_agenter.services.user import UserService
from th_agenter.utils.schemas import UserCreate
import asyncio
async def create_database_tables():
"""Create all database tables using SQLAlchemy models."""
try:
await init_db()
print('Database tables created successfully using SQLAlchemy models')
return True
except Exception as e:
print(f'Error creating database tables: {e}')
return False
async def create_test_user():
"""Create a test user."""
# First, create all database tables using SQLAlchemy models
if not await create_database_tables():
print('Failed to create database tables')
return None
db = next(get_db())
try:
user_service = UserService(db)
# Create test user
user_data = UserCreate(
username='test',
email='test@example.com',
password='123456',
full_name='Test User 1'
)
# Check if user already exists
existing_user = user_service.get_user_by_email(user_data.email)
if existing_user:
print(f'User already exists: {existing_user.username} ({existing_user.email})')
return existing_user
# Create new user
user = user_service.create_user(user_data)
print(f'Created user: {user.username} ({user.email})')
return user
except Exception as e:
print(f'Error creating user: {e}')
return None
finally:
db.close()
if __name__ == "__main__":
try:
asyncio.run(create_test_user())
finally:
# 恢复原始工作目录
os.chdir(original_cwd)