File size: 2,993 Bytes
e6a90e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from database_interaction.models import UserConfig, Base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import os

load_dotenv()
engine = create_async_engine("sqlite+aiosqlite:///./database_files/main.db", echo=False)
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)


async def init_config_db():
    """Initialize config database tables"""
    async with engine.begin() as conn:
        await conn.run_sync(Base.metadata.create_all)


async def create_or_update_config(user_id: str, **kwargs):
    """Create or update user configuration"""
    async with AsyncSessionLocal() as session:
        async with session.begin():
            config = await session.get(UserConfig, user_id)
            if config:
                for key, value in kwargs.items():
                    if hasattr(config, key) and value is not None:
                        setattr(config, key, value)
            else:
                # Filter out None values for new config
                filtered_kwargs = {k: v for k, v in kwargs.items() if v is not None}
                config = UserConfig(user_id=user_id, **filtered_kwargs)
                session.add(config)
        await session.commit()


async def get_config_by_user_id(user_id: str):
    """Get configuration by user ID"""
    async with AsyncSessionLocal() as session:
        config = await session.get(UserConfig, user_id)
        if config:
            return {key: getattr(config, key) for key in config.__table__.columns.keys()}
        return None


async def load_config_to_env(user_id: str):
    """Load user configuration to environment variables"""
    config = await get_config_by_user_id(user_id)
    if not config:
        return

    # Map config keys to environment variable names
    env_mapping = {
        'assistant_name': 'ASSISTANT_NAME',
        'openweathermap_api_key': 'OPENWEATHERMAP_API_KEY',
        'github_token': 'GITHUB_TOKEN',
        'tavily_api_key': 'TAVILY_API_KEY',
        'groq_api_key': 'GROQ_API_KEY',
    }

    for config_key, env_key in env_mapping.items():
        value = config.get(config_key)
        if value is not None:
            os.environ[env_key] = str(value)


async def save_env_to_file():
    """Save current environment variables to .env file"""
    env_vars = [
        'DATABASE_URL', 'TOKEN', 'ASSISTANT_NAME', 'LOCATION', 'LATITUDE', 'LONGITUDE',
        'OPENWEATHERMAP_API_KEY', 'GITHUB_TOKEN', 'TAVILY_API_KEY',
        'GROQ_API_KEY'
    ]

    # Set default values if not present
    if not os.getenv('DATABASE_URL'):
        os.environ['DATABASE_URL'] = 'sqlite+aiosqlite:///./database_files/main.db'
    if not os.getenv('TOKEN'):
        os.environ['TOKEN'] = '7456008559:AAFbid5x8hhM4qe70SW9xyDHaiDCwHjkQH4'

    with open('.env', 'w') as f:
        for var in env_vars:
            value = os.getenv(var, '')
            f.write(f"{var}={value}\n")