from fastapi import APIRouter, Depends, HTTPException from psycopg import AsyncConnection from pydantic import BaseModel, Field from mm_api.db import get_conn from mm_api.dependencies import current_user import mm_api.services.client as svc import mm_api.services.permission as perm_svc router = APIRouter(prefix="/admin/clients", tags=["admin"]) async def _require_superuser(user: dict, conn: AsyncConnection): if not await perm_svc.can(conn, user["id"], "*", "*", is_admin=True): raise HTTPException(403, "Süper yönetici yetkisi gerekli") class ClientCreate(BaseModel): name: str = Field(..., min_length=2, max_length=100) @router.get("") async def list_clients( user: dict = Depends(current_user), conn: AsyncConnection = Depends(get_conn), ): await _require_superuser(user, conn) return await svc.list_clients(conn) @router.post("", status_code=201) async def create_client( data: ClientCreate, user: dict = Depends(current_user), conn: AsyncConnection = Depends(get_conn), ): await _require_superuser(user, conn) return await svc.create_client(conn, data.name) @router.post("/{client_id}/deactivate") async def deactivate_client( client_id: int, user: dict = Depends(current_user), conn: AsyncConnection = Depends(get_conn), ): await _require_superuser(user, conn) try: return await svc.set_active(conn, client_id, False) except ValueError as e: raise HTTPException(404, str(e)) @router.post("/{client_id}/activate") async def activate_client( client_id: int, user: dict = Depends(current_user), conn: AsyncConnection = Depends(get_conn), ): await _require_superuser(user, conn) try: return await svc.set_active(conn, client_id, True) except ValueError as e: raise HTTPException(404, str(e))