Neda/Back/domains/admin/api.py
2026-03-06 20:01:04 +03:30

91 lines
2.0 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,
AdminUserResponse
)
from domains.groups.schemas import GroupResponse
from domains.groups.repo import get_all_groups
from domains.admin.service import (
admin_create_user,
admin_reset_user_secret
)
from domains.users.repo import get_all_users
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}
@router.get("/users", response_model=list[AdminUserResponse])
async def list_users(
db: AsyncSession = Depends(get_db),
admin=Depends(get_current_admin)
):
return await get_all_users(db)
@router.get("/groups", response_model=list[GroupResponse])
async def list_groups(
db: AsyncSession = Depends(get_db),
admin=Depends(get_current_admin)
):
return await get_all_groups(db)