Spaces:
Runtime error
Runtime error
Update database.py
Browse files- database.py +4 -8
database.py
CHANGED
|
@@ -11,7 +11,6 @@ class Database:
|
|
| 11 |
self.pool: Optional[asyncpg.Pool] = None
|
| 12 |
|
| 13 |
async def connect(self) -> None:
|
| 14 |
-
# Render free tier: 512 MB RAM, keep pool small
|
| 15 |
self.pool = await asyncpg.create_pool(
|
| 16 |
dsn=config.DATABASE_URL,
|
| 17 |
min_size=1,
|
|
@@ -43,7 +42,7 @@ class Database:
|
|
| 43 |
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
| 44 |
)
|
| 45 |
""")
|
| 46 |
-
|
| 47 |
CREATE TABLE IF NOT EXISTS messages (
|
| 48 |
id SERIAL PRIMARY KEY,
|
| 49 |
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
@@ -71,7 +70,6 @@ class Database:
|
|
| 71 |
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
| 72 |
)
|
| 73 |
""")
|
| 74 |
-
|
| 75 |
logger.info("Database tables created/verified")
|
| 76 |
|
| 77 |
async def upsert_user(
|
|
@@ -108,7 +106,6 @@ class Database:
|
|
| 108 |
ORDER BY created_at DESC
|
| 109 |
LIMIT $2
|
| 110 |
""", user_id, limit)
|
| 111 |
-
# Reverse to chronological order for the LLM
|
| 112 |
return [
|
| 113 |
{"role": r["role"], "content": r["content"], "created_at": r["created_at"]}
|
| 114 |
for r in reversed(rows)
|
|
@@ -153,10 +150,11 @@ class Database:
|
|
| 153 |
|
| 154 |
async def count_unsummarized(self, user_id: int) -> int:
|
| 155 |
async with self._acquire() as conn:
|
| 156 |
-
|
| 157 |
SELECT COUNT(*) FROM messages
|
| 158 |
WHERE user_id = $1 AND is_summarized = FALSE
|
| 159 |
-
""", user_id)
|
|
|
|
| 160 |
|
| 161 |
async def clear_history(self, user_id: int) -> int:
|
| 162 |
async with self._acquire() as conn:
|
|
@@ -173,7 +171,6 @@ class Database:
|
|
| 173 |
logger.info("Cleared %d messages and summary for user %s", count, user_id)
|
| 174 |
return count
|
| 175 |
|
| 176 |
-
|
| 177 |
async def get_stats(self, user_id: int) -> Dict[str, Any]:
|
| 178 |
async with self._acquire() as conn:
|
| 179 |
user_count = await conn.fetchval("SELECT COUNT(*) FROM users")
|
|
@@ -189,4 +186,3 @@ class Database:
|
|
| 189 |
|
| 190 |
|
| 191 |
db = Database()
|
| 192 |
-
|
|
|
|
| 11 |
self.pool: Optional[asyncpg.Pool] = None
|
| 12 |
|
| 13 |
async def connect(self) -> None:
|
|
|
|
| 14 |
self.pool = await asyncpg.create_pool(
|
| 15 |
dsn=config.DATABASE_URL,
|
| 16 |
min_size=1,
|
|
|
|
| 42 |
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
| 43 |
)
|
| 44 |
""")
|
| 45 |
+
await conn.execute("""
|
| 46 |
CREATE TABLE IF NOT EXISTS messages (
|
| 47 |
id SERIAL PRIMARY KEY,
|
| 48 |
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
|
|
| 70 |
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
| 71 |
)
|
| 72 |
""")
|
|
|
|
| 73 |
logger.info("Database tables created/verified")
|
| 74 |
|
| 75 |
async def upsert_user(
|
|
|
|
| 106 |
ORDER BY created_at DESC
|
| 107 |
LIMIT $2
|
| 108 |
""", user_id, limit)
|
|
|
|
| 109 |
return [
|
| 110 |
{"role": r["role"], "content": r["content"], "created_at": r["created_at"]}
|
| 111 |
for r in reversed(rows)
|
|
|
|
| 150 |
|
| 151 |
async def count_unsummarized(self, user_id: int) -> int:
|
| 152 |
async with self._acquire() as conn:
|
| 153 |
+
val = await conn.fetchval("""
|
| 154 |
SELECT COUNT(*) FROM messages
|
| 155 |
WHERE user_id = $1 AND is_summarized = FALSE
|
| 156 |
+
""", user_id)
|
| 157 |
+
return val or 0
|
| 158 |
|
| 159 |
async def clear_history(self, user_id: int) -> int:
|
| 160 |
async with self._acquire() as conn:
|
|
|
|
| 171 |
logger.info("Cleared %d messages and summary for user %s", count, user_id)
|
| 172 |
return count
|
| 173 |
|
|
|
|
| 174 |
async def get_stats(self, user_id: int) -> Dict[str, Any]:
|
| 175 |
async with self._acquire() as conn:
|
| 176 |
user_count = await conn.fetchval("SELECT COUNT(*) FROM users")
|
|
|
|
| 186 |
|
| 187 |
|
| 188 |
db = Database()
|
|
|