FastAPI + PostgreSQL 16. KYC, issue sistemi, permission/group yönetimi, session yönetimi, API client auth (kışla kapısı), officials/persons CRUD. Migration 0001–0013 dahil.
63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
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))
|