feat: add user creation form in admin panel
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi import APIRouter, Form, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from sqlalchemy import func, select
|
||||
|
||||
from app.database import async_session_factory
|
||||
@@ -13,6 +13,7 @@ from app.repositories.payment import PaymentRepository
|
||||
from app.repositories.server import ServerRepository
|
||||
from app.repositories.tariff import TariffRepository
|
||||
from app.repositories.user import UserRepository
|
||||
from app.services.user import UserService
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
|
||||
@@ -66,16 +67,49 @@ async def dashboard(request: Request):
|
||||
|
||||
|
||||
@router.get("/users", response_class=HTMLResponse)
|
||||
async def users_page(request: Request):
|
||||
async def users_page(request: Request, error: str = ""):
|
||||
async with async_session_factory() as session:
|
||||
repo = UserRepository(session)
|
||||
users = await repo.get_all()
|
||||
|
||||
return HTMLResponse(
|
||||
_render("users.html", request=request, users=users)
|
||||
_render("users.html", request=request, users=users, error=error)
|
||||
)
|
||||
|
||||
|
||||
@router.post("/users/create", response_class=HTMLResponse)
|
||||
async def users_create(
|
||||
request: Request,
|
||||
telegram_id: int = Form(...),
|
||||
username: str = Form(""),
|
||||
full_name: str = Form(""),
|
||||
language_code: str = Form("ru"),
|
||||
):
|
||||
async with async_session_factory() as session:
|
||||
user_repo = UserRepository(session)
|
||||
user_service = UserService(user_repo)
|
||||
|
||||
existing = await user_repo.get_by_telegram_id(telegram_id)
|
||||
if existing is not None:
|
||||
return HTMLResponse(
|
||||
_render(
|
||||
"users.html",
|
||||
request=request,
|
||||
users=await user_repo.get_all(),
|
||||
error=f"User with telegram_id {telegram_id} already exists",
|
||||
)
|
||||
)
|
||||
|
||||
await user_service.register(
|
||||
telegram_id=telegram_id,
|
||||
username=username or None,
|
||||
full_name=full_name or str(telegram_id),
|
||||
language_code=language_code,
|
||||
)
|
||||
|
||||
return RedirectResponse(url="/admin/users", status_code=303)
|
||||
|
||||
|
||||
@router.get("/payments", response_class=HTMLResponse)
|
||||
async def payments_page(request: Request):
|
||||
async with async_session_factory() as session:
|
||||
|
||||
Reference in New Issue
Block a user