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
« 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()
13#Validador para login con swagger y manual
15def validarLogin(username,password,dbSession):
16 usuario=UsuarioService(dbSession).validarCredenciales(username,password)
17 token=crearTokenJWT(usuario)
18 return {"access_token": token, "token_type": "bearer"}
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)
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)
37router = APIRouter(dependencies=[Depends(protegerRuta("Usuarios", "ALL"))])# Protege todas las rutas módulo Usuarios solo administradores
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()
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)):
54 usuarioService = UsuarioService(dbSession)
55 return usuarioService.obtenerPorId(idUsuario)
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)
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)
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)