Spaces:
Build error
Build error
| from fastapi import APIRouter, Depends, HTTPException | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from sqlalchemy import select, func | |
| from app.core.database import get_db | |
| from app.core.security import get_current_user | |
| from app.core.config import settings | |
| from app.models.user import User, UserRole | |
| from app.models.appointment import Appointment | |
| from app.models.fitness import ActivityLog | |
| router = APIRouter() | |
| async def verify_admin(current_user: User = Depends(get_current_user)): | |
| if current_user.role != UserRole.ADMIN: | |
| raise HTTPException(status_code=403, detail="Admin access required") | |
| return current_user | |
| async def admin_get_users( | |
| db: AsyncSession = Depends(get_db), | |
| admin: User = Depends(verify_admin), | |
| ): | |
| result = await db.execute(select(User).order_by(User.created_at.desc())) | |
| return result.scalars().all() | |
| async def admin_analytics( | |
| db: AsyncSession = Depends(get_db), | |
| admin: User = Depends(verify_admin), | |
| ): | |
| total_users = await db.scalar(select(func.count(User.id))) | |
| total_appointments = await db.scalar(select(func.count(Appointment.id))) | |
| verified_users = await db.scalar(select(func.count(User.id)).where(User.is_verified == True)) | |
| return { | |
| "total_users": total_users or 0, | |
| "total_appointments": total_appointments or 0, | |
| "verified_users": verified_users or 0, | |
| "appointments_by_status": {}, | |
| "users_by_role": {}, | |
| } | |
| async def admin_activity_logs( | |
| db: AsyncSession = Depends(get_db), | |
| admin: User = Depends(verify_admin), | |
| ): | |
| result = await db.execute( | |
| select(ActivityLog).order_by(ActivityLog.created_at.desc()).limit(100) | |
| ) | |
| return result.scalars().all() | |
| async def admin_update_role( | |
| user_id: int, | |
| role: UserRole, | |
| db: AsyncSession = Depends(get_db), | |
| admin: User = Depends(verify_admin), | |
| ): | |
| result = await db.execute(select(User).where(User.id == user_id)) | |
| user = result.scalar_one_or_none() | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found") | |
| user.role = role | |
| await db.commit() | |
| return {"message": f"User role updated to {role.value}"} | |