app/api/routers/campaigns.py:20: EmailTemplate, GmailAccount, Recipient, RecipientList, app/api/routers/campaigns.py:126: rl = await db.get(RecipientList, data.recipient_list_id) app/api/routers/campaigns.py:301: rl = await db.get(RecipientList, c.recipient_list_id) app/api/routers/campaigns.py:374: rl = await db.get(RecipientList, c.recipient_list_id) app/api/routers/campaigns.py:629: lists = (await db.execute(select(RecipientList).where(RecipientList.user_id == user.id) app/api/routers/campaigns.py:630: .order_by(RecipientList.id.desc()))).scalars().all() app/api/routers/dashboard.py:12: EmailTemplate, GmailAccount, Recipient, RecipientList, app/api/routers/dashboard.py:69: "recipients": await count(Recipient, Recipient.user_id == user.id), app/api/routers/dashboard.py:70: "recipient_lists": await count(RecipientList, RecipientList.user_id == user.id), app/api/routers/recipients.py:15:from app.models import Recipient, RecipientList, SuppressionEntry, User app/api/routers/recipients.py:50: rows = (await db.execute(select(RecipientList).where( app/api/routers/recipients.py:51: RecipientList.user_id == user.id).order_by(RecipientList.id.desc()))).scalars().all() === dashboard overview section === router = APIRouter(prefix="/dashboard", tags=["dashboard"]) @router.get("/overview") async def overview(db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """Everything the Dashboard page needs in one call.""" now = datetime.now(timezone.utc) week_ago = now - timedelta(days=7) async def count(model, *filters): q = select(func.count()).select_from(model) for f in filters: q = q.where(f) return (await db.execute(q)).scalar() or 0 total_campaigns = await count(Campaign, Campaign.user_id == user.id) active_campaigns = await count(Campaign, Campaign.user_id == user.id, Campaign.status.in_(["running", "queued"])) accounts = (await db.execute( select(GmailAccount).where(GmailAccount.user_id == user.id))).scalars().all() account_health = [{"id": a.id, "email": a.email, "status": a.status, "sends_today": a.sends_today, "daily_limit": a.daily_limit, "cooldown": a.cooldown_until.isoformat() if a.cooldown_until else None, "is_active": a.is_active, "sending_method": a.sending_method} for a in accounts] # aggregate campaign counters agg = (await db.execute( select(func.count(Campaign.id), func.coalesce(func.sum(Campaign.total_recipients), 0), func.coalesce(func.sum(Campaign.sent_count), 0), func.coalesce(func.sum(Campaign.failed_count), 0), func.coalesce(func.sum(Campaign.suppressed_count), 0), func.coalesce(func.sum(Campaign.skipped_count), 0)) .where(Campaign.user_id == user.id))).one() sends_last_7d = (await db.execute( select(func.count()).select_from(CampaignRecipient) .join(Campaign, Campaign.id == CampaignRecipient.campaign_id) .where(Campaign.user_id == user.id, CampaignRecipient.status == "sent", CampaignRecipient.sent_at >= week_ago))).scalar() or 0 recent_campaigns = (await db.execute( select(Campaign).where(Campaign.user_id == user.id) .order_by(Campaign.id.desc()).limit(8))).scalars().all() return { "user": {"id": user.id, "email": user.email, "name": user.full_name}, "totals": { "campaigns": total_campaigns, "active_campaigns": active_campaigns, "recipients": await count(Recipient, Recipient.user_id == user.id), "recipient_lists": await count(RecipientList, RecipientList.user_id == user.id), "subjects": await count(SubjectLine, SubjectLine.user_id == user.id), "templates": await count(EmailTemplate, EmailTemplate.user_id == user.id), "attachments": await count(Attachment, Attachment.user_id == user.id), "phones": await count(CompanyPhoneNumber, CompanyPhoneNumber.user_id == user.id), "suppression": await count(SuppressionEntry, SuppressionEntry.user_id == user.id), "gmail_accounts": len(accounts), }, "send_stats": { "total_recipients": int(agg[1]), "sent": int(agg[2]), "failed": int(agg[3]), "suppressed": int(agg[4]),