# ✅ الملف الكامل بعد التعديل from fastapi import APIRouter, Depends, Query, Request from app.core.config import settings from app.core.limiter import limiter from app.models.user import User from app.repositories.booking import BookingRepository from app.repositories.user import UserRepository from app.routers.deps import get_admin_user, get_booking_repo, get_user_repo from app.schemas.user import UserCreate, UserListResponse, UserResponse, UserUpdate from app.services.booking import BookingService from app.services.user import UserService router = APIRouter(prefix="/admin", tags=["Admin"]) def _user_svc(repo: UserRepository = Depends(get_user_repo)) -> UserService: return UserService(repo) def _booking_svc(repo: BookingRepository = Depends(get_booking_repo)) -> BookingService: return BookingService(repo) @router.get("/stats") @limiter.limit(settings.RATE_LIMIT_DEFAULT) async def get_stats( request: Request, _: User = Depends(get_admin_user), user_svc: UserService = Depends(_user_svc), booking_svc: BookingService = Depends(_booking_svc), ): users_data = await user_svc.list_users(page=1, size=1) bookings_data = await booking_svc.list_bookings(page=1, size=1) return { "total_users": users_data.total, "total_bookings": bookings_data.total, "total_revenue": 0.0, } @router.get("/users", response_model=UserListResponse) @limiter.limit(settings.RATE_LIMIT_DEFAULT) async def list_users( request: Request, page: int = Query(1, ge=1), size: int = Query(20, ge=1, le=100), _: User = Depends(get_admin_user), svc: UserService = Depends(_user_svc), ): return await svc.list_users(page, size) @router.post("/users", response_model=UserResponse, status_code=201) @limiter.limit("10/minute") async def create_user( request: Request, data: UserCreate, _: User = Depends(get_admin_user), svc: UserService = Depends(_user_svc), ): return await svc.create_user(data) @router.get("/users/{user_id}", response_model=UserResponse) @limiter.limit(settings.RATE_LIMIT_DEFAULT) async def get_user( request: Request, user_id: int, _: User = Depends(get_admin_user), svc: UserService = Depends(_user_svc), ): return await svc.get_user(user_id) @router.patch("/users/{user_id}", response_model=UserResponse) @limiter.limit(settings.RATE_LIMIT_DEFAULT) async def update_user( request: Request, user_id: int, data: UserUpdate, _: User = Depends(get_admin_user), svc: UserService = Depends(_user_svc), ): return await svc.update_user(user_id, data) @router.delete("/users/{user_id}", status_code=204) @limiter.limit("10/minute") async def delete_user( request: Request, user_id: int, current_admin: User = Depends(get_admin_user), svc: UserService = Depends(_user_svc), ): await svc.delete_user(user_id, current_admin.id)