بهبود هندلر شروع، انعطافپذیری دستورات و افزایش پایداری دیتابیس
This commit is contained in:
+74
-29
@@ -70,16 +70,26 @@ class Repository:
|
||||
return [SourceChannel(**dict(r)) for r in rows]
|
||||
|
||||
async def get_source_by_channel_id(self, channel_id: int) -> Optional[SourceChannel]:
|
||||
if not isinstance(channel_id, int) or not (-9223372036854775808 <= channel_id <= 9223372036854775807):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM sources WHERE channel_id = $1;", channel_id)
|
||||
return SourceChannel(**dict(row)) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM sources WHERE channel_id = $1;", channel_id)
|
||||
return SourceChannel(**dict(row)) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_source_by_id(self, source_id: int) -> Optional[SourceChannel]:
|
||||
if not isinstance(source_id, int) or not (1 <= source_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM sources WHERE id = $1;", source_id)
|
||||
return SourceChannel(**dict(row)) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM sources WHERE id = $1;", source_id)
|
||||
return SourceChannel(**dict(row)) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def update_source_context_count(self, source_id: int, count: int) -> None:
|
||||
pool = await self._get_pool()
|
||||
@@ -133,10 +143,15 @@ class Repository:
|
||||
return [_parse_source_website_row(r) for r in rows]
|
||||
|
||||
async def get_source_website_by_id(self, site_id: int) -> Optional[SourceWebsite]:
|
||||
if not isinstance(site_id, int) or not (1 <= site_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM source_websites WHERE id = $1;", site_id)
|
||||
return _parse_source_website_row(row) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM source_websites WHERE id = $1;", site_id)
|
||||
return _parse_source_website_row(row) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_source_websites_by_category(self, category_id: Optional[int]) -> List[SourceWebsite]:
|
||||
pool = await self._get_pool()
|
||||
@@ -363,10 +378,15 @@ class Repository:
|
||||
return [TargetChannel(**dict(r)) for r in rows]
|
||||
|
||||
async def get_target_by_id(self, target_id: int) -> Optional[TargetChannel]:
|
||||
if not isinstance(target_id, int) or not (1 <= target_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM targets WHERE id = $1;", target_id)
|
||||
return TargetChannel(**dict(row)) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM targets WHERE id = $1;", target_id)
|
||||
return TargetChannel(**dict(row)) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def set_target_auto_sources(self, target_id: int, source_channel_ids: List[int]) -> None:
|
||||
"""Replace the set of source channels auto-routed into this target."""
|
||||
@@ -459,10 +479,15 @@ class Repository:
|
||||
return None
|
||||
|
||||
async def get_post_by_id(self, post_id: int) -> Optional[Post]:
|
||||
if not isinstance(post_id, int) or not (1 <= post_id <= 9223372036854775807):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM posts WHERE id = $1;", post_id)
|
||||
return _parse_post_row(row) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM posts WHERE id = $1;", post_id)
|
||||
return _parse_post_row(row) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_recent_source_posts(
|
||||
self,
|
||||
@@ -862,21 +887,26 @@ class Repository:
|
||||
return [AIProviderProfile(**dict(r)) for r in rows]
|
||||
|
||||
async def get_provider_profile_by_id(self, profile_id: int) -> Optional[AIProviderProfile]:
|
||||
if not isinstance(profile_id, int) or not (1 <= profile_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow(
|
||||
"""
|
||||
SELECT p.id, p.name, p.provider_type, p.model, p.base_url, p.api_key, p.reasoning_effort, p.is_active,
|
||||
p.fallback_provider_id, p.supports_vision,
|
||||
fb.name as fallback_provider_name,
|
||||
to_char(p.created_at, 'YYYY-MM-DD HH24:MI:SS') as created_at
|
||||
FROM ai_providers p
|
||||
LEFT JOIN ai_providers fb ON p.fallback_provider_id = fb.id
|
||||
WHERE p.id = $1;
|
||||
""",
|
||||
profile_id
|
||||
)
|
||||
return AIProviderProfile(**dict(row)) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow(
|
||||
"""
|
||||
SELECT p.id, p.name, p.provider_type, p.model, p.base_url, p.api_key, p.reasoning_effort, p.is_active,
|
||||
p.fallback_provider_id, p.supports_vision,
|
||||
fb.name as fallback_provider_name,
|
||||
to_char(p.created_at, 'YYYY-MM-DD HH24:MI:SS') as created_at
|
||||
FROM ai_providers p
|
||||
LEFT JOIN ai_providers fb ON p.fallback_provider_id = fb.id
|
||||
WHERE p.id = $1;
|
||||
""",
|
||||
profile_id
|
||||
)
|
||||
return AIProviderProfile(**dict(row)) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_active_provider_profile(self) -> Optional[AIProviderProfile]:
|
||||
pool = await self._get_pool()
|
||||
@@ -983,10 +1013,15 @@ class Repository:
|
||||
return [ChannelCategory(**dict(r)) for r in rows]
|
||||
|
||||
async def get_category_by_id(self, cat_id: int) -> Optional[ChannelCategory]:
|
||||
if not isinstance(cat_id, int) or not (1 <= cat_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM channel_categories WHERE id = $1;", cat_id)
|
||||
return ChannelCategory(**dict(row)) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM channel_categories WHERE id = $1;", cat_id)
|
||||
return ChannelCategory(**dict(row)) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def update_category(self, cat_id: int, name: Optional[str] = None, description: Optional[str] = None, cat_type: Optional[str] = None) -> None:
|
||||
pool = await self._get_pool()
|
||||
@@ -1092,16 +1127,26 @@ class Repository:
|
||||
return [_parse_admin_channel_row(r) for r in rows]
|
||||
|
||||
async def get_admin_channel_by_id(self, admin_id: int) -> Optional[AdminReviewChannel]:
|
||||
if not isinstance(admin_id, int) or not (1 <= admin_id <= 2147483647):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM admin_channels WHERE id = $1;", admin_id)
|
||||
return _parse_admin_channel_row(row) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM admin_channels WHERE id = $1;", admin_id)
|
||||
return _parse_admin_channel_row(row) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_admin_channel_by_telegram_id(self, channel_id: int) -> Optional[AdminReviewChannel]:
|
||||
if not isinstance(channel_id, int) or not (-9223372036854775808 <= channel_id <= 9223372036854775807):
|
||||
return None
|
||||
pool = await self._get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow("SELECT * FROM admin_channels WHERE channel_id = $1;", channel_id)
|
||||
return _parse_admin_channel_row(row) if row else None
|
||||
try:
|
||||
row = await conn.fetchrow("SELECT * FROM admin_channels WHERE channel_id = $1;", channel_id)
|
||||
return _parse_admin_channel_row(row) if row else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def get_default_admin_channel(self) -> Optional[AdminReviewChannel]:
|
||||
pool = await self._get_pool()
|
||||
|
||||
Reference in New Issue
Block a user