eksplicit mapping af envs
This commit is contained in:
60
backend/app/services/stats_service.py
Normal file
60
backend/app/services/stats_service.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from datetime import UTC, date, datetime
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.db_models import DailyStat, InterestCategoryCount
|
||||
from app.services.session_service import count_active_sessions
|
||||
|
||||
|
||||
async def get_stats(db: AsyncSession) -> dict:
|
||||
"""Return anonymised aggregate stats for the admin dashboard."""
|
||||
today = date.today()
|
||||
|
||||
row = await db.scalar(
|
||||
sa.select(DailyStat).where(DailyStat.date == today)
|
||||
)
|
||||
|
||||
top_categories_rows = await db.scalars(
|
||||
sa.select(InterestCategoryCount)
|
||||
.where(InterestCategoryCount.date == today)
|
||||
.order_by(InterestCategoryCount.count.desc())
|
||||
.limit(5)
|
||||
)
|
||||
top_categories = [r.category for r in top_categories_rows]
|
||||
active = await count_active_sessions()
|
||||
|
||||
return {
|
||||
"total_sessions_today": row.total_sessions if row else 0,
|
||||
"total_matches_today": row.total_matches if row else 0,
|
||||
"active_sessions_now": active,
|
||||
"top_interest_categories": top_categories,
|
||||
}
|
||||
|
||||
|
||||
async def increment_sessions(db: AsyncSession) -> None:
|
||||
"""Increment daily session counter. Called when a new session is created."""
|
||||
today = date.today()
|
||||
await db.execute(
|
||||
sa.dialects.postgresql.insert(DailyStat)
|
||||
.values(date=today, total_sessions=1, total_matches=0)
|
||||
.on_conflict_do_update(
|
||||
index_elements=["date"],
|
||||
set_={"total_sessions": DailyStat.total_sessions + 1},
|
||||
)
|
||||
)
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def increment_matches(db: AsyncSession) -> None:
|
||||
"""Increment daily match counter. Called on a successful match."""
|
||||
today = date.today()
|
||||
await db.execute(
|
||||
sa.dialects.postgresql.insert(DailyStat)
|
||||
.values(date=today, total_sessions=0, total_matches=1)
|
||||
.on_conflict_do_update(
|
||||
index_elements=["date"],
|
||||
set_={"total_matches": DailyStat.total_matches + 1},
|
||||
)
|
||||
)
|
||||
await db.commit()
|
||||
Reference in New Issue
Block a user