创建数据库表和索引
(self, conn: asyncpg.Connection)
| 72 | raise |
| 73 | |
| 74 | async def _create_tables(self, conn: asyncpg.Connection) -> None: |
| 75 | """创建数据库表和索引""" |
| 76 | await conn.execute(""" |
| 77 | CREATE TABLE IF NOT EXISTS credentials ( |
| 78 | id SERIAL PRIMARY KEY, |
| 79 | filename TEXT UNIQUE NOT NULL, |
| 80 | credential_data TEXT NOT NULL, |
| 81 | |
| 82 | disabled INTEGER DEFAULT 0, |
| 83 | error_codes TEXT DEFAULT '[]', |
| 84 | error_messages TEXT DEFAULT '[]', |
| 85 | last_success DOUBLE PRECISION, |
| 86 | user_email TEXT, |
| 87 | |
| 88 | model_cooldowns TEXT DEFAULT '{}', |
| 89 | preview INTEGER DEFAULT 1, |
| 90 | tier TEXT DEFAULT 'pro', |
| 91 | |
| 92 | rotation_order INTEGER DEFAULT 0, |
| 93 | call_count INTEGER DEFAULT 0, |
| 94 | |
| 95 | created_at DOUBLE PRECISION DEFAULT EXTRACT(EPOCH FROM NOW()), |
| 96 | updated_at DOUBLE PRECISION DEFAULT EXTRACT(EPOCH FROM NOW()) |
| 97 | ) |
| 98 | """) |
| 99 | |
| 100 | await conn.execute(""" |
| 101 | CREATE TABLE IF NOT EXISTS antigravity_credentials ( |
| 102 | id SERIAL PRIMARY KEY, |
| 103 | filename TEXT UNIQUE NOT NULL, |
| 104 | credential_data TEXT NOT NULL, |
| 105 | |
| 106 | disabled INTEGER DEFAULT 0, |
| 107 | error_codes TEXT DEFAULT '[]', |
| 108 | error_messages TEXT DEFAULT '[]', |
| 109 | last_success DOUBLE PRECISION, |
| 110 | user_email TEXT, |
| 111 | |
| 112 | model_cooldowns TEXT DEFAULT '{}', |
| 113 | tier TEXT DEFAULT 'pro', |
| 114 | enable_credit INTEGER DEFAULT 0, |
| 115 | |
| 116 | rotation_order INTEGER DEFAULT 0, |
| 117 | call_count INTEGER DEFAULT 0, |
| 118 | |
| 119 | created_at DOUBLE PRECISION DEFAULT EXTRACT(EPOCH FROM NOW()), |
| 120 | updated_at DOUBLE PRECISION DEFAULT EXTRACT(EPOCH FROM NOW()) |
| 121 | ) |
| 122 | """) |
| 123 | |
| 124 | await conn.execute(""" |
| 125 | CREATE TABLE IF NOT EXISTS config ( |
| 126 | key TEXT PRIMARY KEY, |
| 127 | value TEXT NOT NULL, |
| 128 | updated_at DOUBLE PRECISION DEFAULT EXTRACT(EPOCH FROM NOW()) |
| 129 | ) |
| 130 | """) |
| 131 |