# 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.user_controller import UserController from packages.v1.administrativo.schemas.user_schema import ( UserSchema, UserAuthenticateSchema, UserSaveSchema, UserUpdateSchema, UserEmailSchema, UserIdSchema ) # Inicializa o roteador para as rotas de usuário router = APIRouter() # Instânciamento do controller desejado user_controller = UserController() # 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 : UserAuthenticateSchema): # 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', 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 = UserEmailSchema(email=email) # 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('/{user_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(user_id : int, current_user: dict = Depends(get_current_user)): # Cria o schema com os dados recebidos usuario_schema = UserIdSchema(user_id=user_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 : UserSaveSchema, 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('/{user_id}', status_code=status.HTTP_200_OK, summary='Atualiza um usuário', response_description='Atualiza um usuário') async def update(user_id : int, usuario_schema : UserUpdateSchema, current_user: dict = Depends(get_current_user)): # Efetua a atualização dos dados de usuário response = user_controller.update(user_id, usuario_schema) # Retorna os dados localizados return response # Exclui um determinado usuário @router.delete('/{user_id}', status_code=status.HTTP_200_OK, summary='Remove um usuário', response_description='Remove um usuário') async def delete(user_id : int, current_user: dict = Depends(get_current_user)): # Cria o schema com os dados recebidos usuario_schema = UserIdSchema(user_id=user_id) # Efetua a exclusão de um determinado usuário response = user_controller.delete(usuario_schema) # Retorna os dados localizados return response