Coverage for backend \ app \ Usuarios \ controllers \ usuarioController.py: 80.95%

42 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-29 16:13 -0500

1from fastapi import APIRouter, HTTPException, Depends 

2from app.configuracionGeneral.errores import ERROR_CREDENCIALES 

3from app.configuracionGeneral.schemasGenerales import respuestaApi 

4from app.Usuarios.schemas.usuarioSchemas import IniciarSesionRequest 

5from app.configuracionGeneral.seguridadJWT import crearTokenJWT 

6from fastapi.security import OAuth2PasswordRequestForm 

7from app.Usuarios.services.usuarioService import UsuarioService 

8from app.Usuarios.schemas.usuarioSchemas import * 

9from app.database import obtenerSesion 

10from app.configuracionGeneral.seguridadJWT import protegerRuta 

11publicRouter = APIRouter() 

12 

13#Validador para login con swagger y manual 

14 

15def validarLogin(username,password,dbSession): 

16 usuario=UsuarioService(dbSession).validarCredenciales(username,password) 

17 token=crearTokenJWT(usuario) 

18 return {"access_token": token, "token_type": "bearer"} 

19 

20# Login Público - Swagger 

21@publicRouter.post("/loginSwagger", 

22 summary="Iniciar sesión con OAuth2PasswordBearer (OAuth2, password)", 

23 description="Iniciar sesión y obtener un token de acceso JWT directamente desde Swagger") 

24def iniciarSesion(request: OAuth2PasswordRequestForm = Depends(),# Usa form-data en swagger 

25 dbSession=Depends(obtenerSesion) 

26 ): 

27 return validarLogin(request.username, request.password, dbSession) 

28 

29 

30# Login Público - Manual JSON 

31@publicRouter.post("/login", 

32 summary="Iniciar sesión", 

33 description="Iniciar sesión y obtener un token de acceso JWT si se lo hace manualmente con cuerpo JSON") 

34def iniciarSesion(request: IniciarSesionRequest,dbSession=Depends(obtenerSesion)):# Usa cuerpo JSON 

35 return validarLogin(request.username, request.password, dbSession) 

36 

37router = APIRouter(dependencies=[Depends(protegerRuta("Usuarios", "ALL"))])# Protege todas las rutas módulo Usuarios solo administradores 

38 

39# Operaciones con usuario 

40@router.get("/", tags=["Usuarios"], 

41 summary="Obtener todos los usuarios", 

42 status_code=200, 

43 response_model=respuestaApi) 

44async def obtenerTodosLosUsuarios(dbSession=Depends(obtenerSesion)): 

45 usuarioService = UsuarioService(dbSession) 

46 return usuarioService.listarUsuarios() 

47 

48@router.get("/{idUsuario}", tags=["Usuarios"], 

49 summary="Obtener un usuario por id", 

50 status_code=200, 

51 response_model=respuestaApi) 

52async def obtenerUsuarioPorId(idUsuario: int, dbSession=Depends(obtenerSesion)): 

53 

54 usuarioService = UsuarioService(dbSession) 

55 return usuarioService.obtenerPorId(idUsuario) 

56 

57 

58@router.post("/", tags=["Usuarios"], 

59 description="Crear un nuevo usuario", 

60 status_code=201, 

61 response_model=respuestaApi) 

62async def crearUsuario(usuario: UsuarioCrearSchema, dbSession=Depends(obtenerSesion)): 

63 usuarioService = UsuarioService(dbSession) 

64 return usuarioService.crearUsuario(usuario) 

65 

66@router.put("/{idUsuario}", tags=["Usuarios"], 

67 summary="Actualizar un usuario por id", 

68 status_code=200, 

69 response_model=respuestaApi) 

70async def actualizarUsuario(idUsuario: int, usuario: UsuarioActualizarSchema, dbSession=Depends(obtenerSesion)): 

71 usuarioService = UsuarioService(dbSession) 

72 return usuarioService.modificarUsuario(idUsuario, usuario) 

73 

74@router.delete("/{idUsuario}", tags=["Usuarios"], 

75 summary="Eliminar un usuario como soft delete(inactivo) por id", 

76 status_code=200, 

77 response_model=respuestaApi) 

78async def deshabilitarUsuario(idUsuario: int, dbSession=Depends(obtenerSesion)): 

79 usuarioService = UsuarioService(dbSession) 

80 return usuarioService.deshabilitarUsuario(idUsuario) 

81