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
80 lines
2.4 KiB
Python
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,
|
|
)
|