Neda/Back/domains/admin/api.py
2026-03-06 15:16:41 +03:30

71 lines
1.5 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from db.session import get_db
from core.deps import get_current_admin
from domains.admin.schemas import (
AdminCreateUser,
AdminCreateUserResult,
AdminResetSecretResult
)
from domains.admin.service import (
admin_create_user,
admin_reset_user_secret
)
router = APIRouter(
prefix="/admin",
tags=["admin"]
)
@router.post("/users", response_model=AdminCreateUserResult)
async def create_user(
payload: AdminCreateUser,
db: AsyncSession = Depends(get_db),
admin=Depends(get_current_admin)
):
try:
user, secret = await admin_create_user(
db,
payload.username,
payload.role
)
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=str(e)
)
return {
"user": user,
"secret": secret
}
@router.post("/users/{user_id}/reset-secret",
response_model=AdminResetSecretResult)
async def reset_secret(
user_id: str,
db: AsyncSession = Depends(get_db),
admin=Depends(get_current_admin)
):
new_secret = await admin_reset_user_secret(
db,
user_id
)
if not new_secret:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found"
)
return {"secret": new_secret}