memleketmeselesi/mm_api/routers/clients.py
Mukan Erkin 2498e75594 init: memleketmeselesi platform — API + migrations
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.
2026-04-27 23:06:59 +03:00

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))