Files
brewman/brewman/brewman/routers/client.py
T
tanshu 1e7476c5d9 Moved to uv from poetry
Updated ruff and mypy, accepted all changes
Central exception management and injected the Session.
This removed a lot of duplicated boilerplate code.
Added health check
Updated to Angular 21
2026-02-24 03:08:05 +00:00

80 lines
2.4 KiB
Python

import uuid
from typing import Annotated
from fastapi import APIRouter, Security
from sqlalchemy import delete, select
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionDep
from ..models.client import Client
from ..models.login_history import LoginHistory
from ..schemas import client as schemas
from ..schemas.user import UserToken
router = APIRouter()
@router.put("/{id_}", response_model=None)
def update_route(
id_: uuid.UUID,
data: schemas.ClientIn,
user: Annotated[UserToken, Security(get_user, scopes=["clients"])],
db: SessionDep,
) -> None:
item: Client = db.execute(select(Client).where(Client.id == id_)).scalar_one()
item.enabled = data.enabled
if item.enabled:
item.otp = None
item.name = data.name
db.commit()
@router.delete("/{id_}", response_model=None)
def delete_route(
id_: uuid.UUID, user: Annotated[UserToken, Security(get_user, scopes=["clients"])], db: SessionDep
) -> None:
item: Client = db.execute(select(Client).where(Client.id == id_)).scalar_one()
db.execute(delete(LoginHistory).where(LoginHistory.client_id == item.id))
db.delete(item)
db.commit()
@router.get("/list", response_model=list[schemas.ClientList])
async def show_list(
user: Annotated[UserToken, Security(get_user, scopes=["clients"])],
db: SessionDep,
) -> list[schemas.ClientList]:
list_ = db.execute(select(Client).order_by(Client.name)).scalars().all()
clients = []
for item in list_:
clients.append(
schemas.ClientList(
id_=item.id,
code=item.code,
name=item.name,
enabled=item.enabled,
otp=item.otp,
creation_date=item.creation_date,
last_user=item.login_history[0].user.name if len(item.login_history) else "None",
last_date=item.login_history[0].date if len(item.login_history) else None,
)
)
return clients
@router.get("/{id_}", response_model=schemas.Client)
def show_id(
id_: uuid.UUID, user: Annotated[UserToken, Security(get_user, scopes=["clients"])], db: SessionDep
) -> schemas.Client:
item: Client = db.execute(select(Client).where(Client.id == id_)).scalar_one()
return schemas.Client(
id_=item.id,
code=item.code,
name=item.name,
enabled=item.enabled,
otp=item.otp,
creation_date=item.creation_date,
)