# 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