MirrorAPI/packages/v1/administrativo/endpoints/usuario_endpoint.py
2025-11-03 15:18:26 -03:00

164 lines
4.5 KiB
Python

# Importação de bibliotecas
from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.usuario_controller import UsuarioController
from packages.v1.administrativo.schemas.usuario_schema import (
UsuarioSchema,
UsuarioAuthenticateSchema,
UsuarioSaveSchema,
UsuarioUpdateSchema,
UsuarioEmailSchema,
UsuarioIdSchema,
)
# Inicializa o roteador para as rotas de usuário
router = APIRouter()
# Instânciamento do controller desejado
user_controller = UsuarioController()
# Autenticação de usuário
@router.post(
"/authenticate",
status_code=status.HTTP_200_OK,
summary="Cria o token de acesso do usuário",
response_description="Retorna o token de acesso do usuário",
)
async def index(user_authenticate_schema: UsuarioAuthenticateSchema):
# Efetua a autenticação de um usuário junto ao sistema
response = user_controller.authenticate(user_authenticate_schema)
# Retorna os dados localizados
return response
# Dados do usuário logado
@router.get(
"/me",
status_code=status.HTTP_200_OK,
summary="Retorna os dados do usuário que efetuou o login",
response_description="Dados do usuário que efetuou o login",
)
async def me(current_user: dict = Depends(get_current_user)):
# Busca os dados do usuário logado
response = user_controller.me(current_user)
# Retorna os dados localizados
return response
# Lista todos os usuários
@router.get(
"/",
status_code=status.HTTP_200_OK,
summary="Lista todos os usuário cadastrados",
response_description="Lista todos os usuário cadastrados",
)
async def index(current_user: dict = Depends(get_current_user)):
# Busca todos os usuários cadastrados
response = user_controller.index()
# Retorna os dados localizados
return response
# Localiza um usuário pelo email
@router.get(
"/email/{email}",
status_code=status.HTTP_200_OK,
summary="Busca um registro em especifico por e-mail informado",
response_description="Busca um registro em especifico",
)
async def getEmail(email: str, current_user: dict = Depends(get_current_user)):
# Cria o schema com os dados recebidos
usuario_schema = UsuarioEmailSchema(email=email)
print(usuario_schema)
# Busca um usuário especifico pelo e-mail
response = user_controller.getEmail(usuario_schema)
# Retorna os dados localizados
return response
# Localiza um usuário pelo ID
@router.get(
"/{usuario_id}",
status_code=status.HTTP_200_OK,
summary="Busca um registro em especifico pelo ID do usuário",
response_description="Busca um registro em especifico",
)
async def show(usuario_id: int, current_user: dict = Depends(get_current_user)):
# Cria o schema com os dados recebidos
usuario_schema = UsuarioIdSchema(usuario_id=usuario_id)
# Busca um usuário especifico pelo ID
response = user_controller.show(usuario_schema)
# Retorna os dados localizados
return response
# Cadastro de usuários
@router.post(
"/",
status_code=status.HTTP_200_OK,
summary="Cadastra um usuário",
response_description="Cadastra um usuário",
)
async def save(
usuario_schema: UsuarioSaveSchema, current_user: dict = Depends(get_current_user)
):
# Efetua o cadastro do usuário junto ao banco de dados
response = user_controller.save(usuario_schema)
# Retorna os dados localizados
return response
# Atualiza os dados de usuário
@router.put(
"/{usuario_id}",
status_code=status.HTTP_200_OK,
summary="Atualiza um usuário",
response_description="Atualiza um usuário",
)
async def update(
usuario_id: int,
usuario_schema: UsuarioUpdateSchema,
current_user: dict = Depends(get_current_user),
):
# Efetua a atualização dos dados de usuário
response = user_controller.update(usuario_id, usuario_schema)
# Retorna os dados localizados
return response
# Exclui um determinado usuário
@router.delete(
"/{usuario_id}",
status_code=status.HTTP_200_OK,
summary="Remove um usuário",
response_description="Remove um usuário",
)
async def delete(usuario_id: int, current_user: dict = Depends(get_current_user)):
# Cria o schema com os dados recebidos
usuario_schema = UsuarioIdSchema(usuario_id=usuario_id)
# Efetua a exclusão de um determinado usuário
response = user_controller.delete(usuario_schema)
# Retorna os dados localizados
return response