OncoLit: a multi-tenant oncology literature search, feed, and collaboration platform. Built with FastAPI + Vue 3 + PostgreSQL. Includes PubMed pipeline, drug approvals, AI summaries, and systematic review tools.
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
import asyncio
|
|
from sqlalchemy import text
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
|
|
DATABASE_URL = 'postgresql+asyncpg://scilit:scilit_prod_2026@postgres:5432/scilit'
|
|
|
|
async def main():
|
|
engine = create_async_engine(DATABASE_URL)
|
|
async with engine.connect() as conn:
|
|
# Check cited_by_count distribution
|
|
r = await conn.execute(text("""
|
|
SELECT
|
|
CASE
|
|
WHEN cited_by_count IS NULL OR cited_by_count = 0 THEN '0 or NULL'
|
|
WHEN cited_by_count BETWEEN 1 AND 5 THEN '1-5'
|
|
WHEN cited_by_count BETWEEN 6 AND 20 THEN '6-20'
|
|
WHEN cited_by_count BETWEEN 21 AND 100 THEN '21-100'
|
|
ELSE '100+'
|
|
END as bucket,
|
|
COUNT(*) as cnt,
|
|
MAX(cited_by_count) as max_in_bucket
|
|
FROM global_literature
|
|
GROUP BY bucket
|
|
ORDER BY MIN(COALESCE(cited_by_count, 0))
|
|
"""))
|
|
print('=== Cited by count distribution ===')
|
|
for row in r:
|
|
print(f' {row.bucket}: {row.cnt}')
|
|
|
|
# Latest citation update time
|
|
r = await conn.execute(text("""
|
|
SELECT MAX(updated_at) as last_update, COUNT(*) as total_with_citations
|
|
FROM global_literature WHERE cited_by_count IS NOT NULL AND cited_by_count > 0
|
|
"""))
|
|
for row in r:
|
|
print(f'\nLast citation update: {row.last_update}')
|
|
print(f'Articles with citations: {row.total_with_citations}')
|
|
|
|
# Check what refresh_hot_articles_cache filters by
|
|
r = await conn.execute(text("""
|
|
SELECT cited_by_count, pub_date, pmid FROM global_literature
|
|
WHERE cited_by_count IS NOT NULL AND cited_by_count > 0
|
|
AND pub_date >= CURRENT_DATE - INTERVAL '365 days'
|
|
ORDER BY cited_by_count DESC LIMIT 10
|
|
"""))
|
|
print('\nTop cited articles in last year:')
|
|
for row in r:
|
|
print(f' PMID={row.pmid} cited={row.cited_by_count} pub_date={row.pub_date}')
|
|
|
|
await engine.dispose()
|
|
|
|
asyncio.run(main())
|